ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgppbmRleCBkZWI2YjQ4Li5hMDdjMGYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCkBAIC0yMSwyNSArMjEsMjcgQEAKIERlc2NyaXB0aW9uOgogCQlFYWNoIFVTQiBkZXZpY2UgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpbGUgbmFtZWQKIAkJcG93ZXIvbGV2ZWwuICBUaGlzIGZpbGUgaG9sZHMgYSBwb3dlci1sZXZlbCBzZXR0aW5nIGZvcgotCQl0aGUgZGV2aWNlLCBvbmUgb2YgIm9uIiwgImF1dG8iLCBvciAic3VzcGVuZCIuCisJCXRoZSBkZXZpY2UsIGVpdGhlciAib24iIG9yICJhdXRvIi4KIAogCQkib24iIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyBub3QgYWxsb3dlZCB0byBhdXRvc3VzcGVuZCwKIAkJYWx0aG91Z2ggbm9ybWFsIHN1c3BlbmRzIGZvciBzeXN0ZW0gc2xlZXAgd2lsbCBzdGlsbAogCQliZSBob25vcmVkLiAgImF1dG8iIG1lYW5zIHRoZSBkZXZpY2Ugd2lsbCBhdXRvc3VzcGVuZAogCQlhbmQgYXV0b3Jlc3VtZSBpbiB0aGUgdXN1YWwgbWFubmVyLCBhY2NvcmRpbmcgdG8gdGhlCi0JCWNhcGFiaWxpdGllcyBvZiBpdHMgZHJpdmVyLiAgInN1c3BlbmQiIG1lYW5zIHRoZSBkZXZpY2UKLQkJaXMgZm9yY2VkIGludG8gYSBzdXNwZW5kZWQgc3RhdGUgYW5kIGl0IHdpbGwgbm90IGF1dG9yZXN1bWUKLQkJaW4gcmVzcG9uc2UgdG8gSS9PIHJlcXVlc3RzLiAgSG93ZXZlciByZW1vdGUtd2FrZXVwIHJlcXVlc3RzCi0JCWZyb20gdGhlIGRldmljZSBtYXkgc3RpbGwgYmUgZW5hYmxlZCAodGhlIHJlbW90ZS13YWtldXAKLQkJc2V0dGluZyBpcyBjb250cm9sbGVkIHNlcGFyYXRlbHkgYnkgdGhlIHBvd2VyL3dha2V1cAotCQlhdHRyaWJ1dGUpLgorCQljYXBhYmlsaXRpZXMgb2YgaXRzIGRyaXZlci4KIAogCQlEdXJpbmcgbm9ybWFsIHVzZSwgZGV2aWNlcyBzaG91bGQgYmUgbGVmdCBpbiB0aGUgImF1dG8iCi0JCWxldmVsLiAgVGhlIG90aGVyIGxldmVscyBhcmUgbWVhbnQgZm9yIGFkbWluaXN0cmF0aXZlIHVzZXMuCisJCWxldmVsLiAgVGhlICJvbiIgbGV2ZWwgaXMgbWVhbnQgZm9yIGFkbWluaXN0cmF0aXZlIHVzZXMuCiAJCUlmIHlvdSB3YW50IHRvIHN1c3BlbmQgYSBkZXZpY2UgaW1tZWRpYXRlbHkgYnV0IGxlYXZlIGl0CiAJCWZyZWUgdG8gd2FrZSB1cCBpbiByZXNwb25zZSB0byBJL08gcmVxdWVzdHMsIHlvdSBzaG91bGQKIAkJd3JpdGUgIjAiIHRvIHBvd2VyL2F1dG9zdXNwZW5kLgogCisJCURldmljZSBub3QgY2FwYWJsZSBvZiBwcm9wZXIgc3VzcGVuZCBhbmQgcmVzdW1lIHNob3VsZCBiZQorCQlsZWZ0IGluIHRoZSAib24iIGxldmVsLiAgQWx0aG91Z2ggdGhlIFVTQiBzcGVjIHJlcXVpcmVzCisJCWRldmljZXMgdG8gc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZSwgbWFueSBvZiB0aGVtIGRvIG5vdC4KKwkJSW4gZmFjdCBzbyBtYW55IGRvbid0IHRoYXQgYnkgZGVmYXVsdCwgdGhlIFVTQiBjb3JlCisJCWluaXRpYWxpemVzIGFsbCBub24taHViIGRldmljZXMgaW4gdGhlICJvbiIgbGV2ZWwuICBTb21lCisJCWRyaXZlcnMgbWF5IGNoYW5nZSB0aGlzIHNldHRpbmcgd2hlbiB0aGV5IGFyZSBib3VuZC4KKwogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLy4uLi9wb3dlci9wZXJzaXN0CiBEYXRlOgkJTWF5IDIwMDcKIEtlcm5lbFZlcnNpb246CTIuNi4yMwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKaW5kZXggZjUwOGE4YS4uNWU3ZDg0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJPC9wYXJhPgogCQk8cHJvZ3JhbWxpc3Rpbmc+CiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpib2FyZF9tdGQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBiYXNlYWRkcjsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmJhc2VhZGRyOwogCQk8L3Byb2dyYW1saXN0aW5nPgogCQk8cGFyYT4KIAkJCVN0YXRpYyBleGFtcGxlCkBAIC0xODIsNyArMTgyLDcgQEAKIAkJPHByb2dyYW1saXN0aW5nPgogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyBib2FyZF9tdGQ7CiBzdGF0aWMgc3RydWN0IG5hbmRfY2hpcCBib2FyZF9jaGlwOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFzZWFkZHI7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpiYXNlYWRkcjsKIAkJPC9wcm9ncmFtbGlzdGluZz4KIAk8L3NlY3QxPgogCTxzZWN0MSBpZD0iUGFydGl0aW9uX2RlZmluZXMiPgpAQCAtMjgzLDggKzI4Myw4IEBACiAJfQogCiAJLyogbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQliYXNlYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAoQ0hJUF9QSFlTSUNBTF9BRERSRVNTLCAxMDI0KTsKLQlpZighYmFzZWFkZHIpeworCWJhc2VhZGRyID0gaW9yZW1hcChDSElQX1BIWVNJQ0FMX0FERFJFU1MsIDEwMjQpOworCWlmICghYmFzZWFkZHIpIHsKIAkJcHJpbnRrKCJJb3JlbWFwIHRvIGFjY2VzcyBOQU5EIGNoaXAgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXRfbXRkOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJZ290byBvdXQ7CiAKIG91dF9pb3I6Ci0JaW91bm1hcCgodm9pZCAqKWJhc2VhZGRyKTsKKwlpb3VubWFwKGJhc2VhZGRyKTsKIG91dF9tdGQ6CiAJa2ZyZWUgKGJvYXJkX210ZCk7CiBvdXQ6CkBAIC0zNDEsNyArMzQxLDcgQEAKIAluYW5kX3JlbGVhc2UgKGJvYXJkX210ZCk7CiAKIAkvKiB1bm1hcCBwaHlzaWNhbCBhZGRyZXNzICovCi0JaW91bm1hcCgodm9pZCAqKWJhc2VhZGRyKTsKKwlpb3VubWFwKGJhc2VhZGRyKTsKIAkKIAkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLwogCWtmcmVlIChib2FyZF9tdGQpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQKaW5kZXggNzhhNDQwNi4uMWI1YWExMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0CkBAIC0xNTcsNyArMTU3LDcgQEAKIAkgKiBhY2Nlc3Mgb25seSB0aGUgNjQway0xTUIgYXJlYSwgc28gYW55dGhpbmcgZWxzZQogCSAqIGhhcyB0byBiZSByZW1hcHBlZC4KIAkgKi8KLQljaGFyICogYmFzZXB0ciA9IGlvcmVtYXAoMHhGQzAwMDAwMCwgMTAyNCoxMDI0KTsKKwl2b2lkIF9faW9tZW0gKmJhc2VwdHIgPSBpb3JlbWFwKDB4RkMwMDAwMDAsIDEwMjQqMTAyNCk7CiAKIAkvKiB3cml0ZSBhICdBJyB0byB0aGUgb2Zmc2V0IDEwIG9mIHRoZSBhcmVhICovCiAJd3JpdGViKCdBJyxiYXNlcHRyKzEwKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2Jsb2NrLzAwLUlOREVYCmluZGV4IDk2MWEwNTEuLmE0MDYyODZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svMDAtSU5ERVgKQEAgLTEsNyArMSw1IEBACiAwMC1JTkRFWAogCS0gVGhpcyBmaWxlCi1hcy1pb3NjaGVkLnR4dAotCS0gQW50aWNpcGF0b3J5IElPIHNjaGVkdWxlcgogYmFycmllci50eHQKIAktIEkvTyBCYXJyaWVycwogYmlvZG9jLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOGI3MmIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi1BbnRpY2lwYXRvcnkgSU8gc2NoZWR1bGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1OaWNrIFBpZ2dpbiA8cGlnZ2luQGN5YmVyb25lLmNvbS5hdT4gICAgMTMgU2VwIDIwMDMKLQotQXR0ZW50aW9uISBEYXRhYmFzZSBzZXJ2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHVzaW5nICJUQ1EiIGRpc2tzIHNob3VsZAotaW52ZXN0aWdhdGUgcGVyZm9ybWFuY2Ugd2l0aCB0aGUgJ2RlYWRsaW5lJyBJTyBzY2hlZHVsZXIuIEFueSBzeXN0ZW0gd2l0aCBoaWdoCi1kaXNrIHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cyBzaG91bGQgZG8gc28sIGluIGZhY3QuCi0KLUlmIHlvdSBzZWUgdW51c3VhbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgeW91ciBkaXNrIHN5c3RlbXMsIG9yIHlvdQotc2VlIGJpZyBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyB2ZXJzdXMgdGhlIGRlYWRsaW5lIHNjaGVkdWxlciwgcGxlYXNlIGVtYWlsCi1tZS4gRGF0YWJhc2UgdXNlcnMgZG9uJ3QgYm90aGVyIHVubGVzcyB5b3UncmUgd2lsbGluZyB0byB0ZXN0IGEgbG90IG9mIHBhdGNoZXMKLWZyb20gbWUgOykgaXRzIGEga25vd24gaXNzdWUuCi0KLUFsc28sIHVzZXJzIHdpdGggaGFyZHdhcmUgUkFJRCBjb250cm9sbGVycywgZG9pbmcgc3RyaXBpbmcsIG1heSBmaW5kCi1oaWdobHkgdmFyaWFibGUgcGVyZm9ybWFuY2UgcmVzdWx0cyB3aXRoIHVzaW5nIHRoZSBhcy1pb3NjaGVkLiBUaGUKLWFzLWlvc2NoZWQgYW50aWNpcGF0b3J5IGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBub3Rpb24gdGhhdCBhIGRpc2sKLWRldmljZSBoYXMgb25seSBvbmUgcGh5c2ljYWwgc2Vla2luZyBoZWFkLiAgQSBzdHJpcGVkIFJBSUQgY29udHJvbGxlcgotYWN0dWFsbHkgaGFzIGEgaGVhZCBmb3IgZWFjaCBwaHlzaWNhbCBkZXZpY2UgaW4gdGhlIGxvZ2ljYWwgUkFJRCBkZXZpY2UuCi0KLUhvd2V2ZXIsIHNldHRpbmcgdGhlIGFudGljX2V4cGlyZSAoc2VlIHR1bmFibGUgcGFyYW1ldGVycyBiZWxvdykgcHJvZHVjZXMKLXZlcnkgc2ltaWxhciBiZWhhdmlvciB0byB0aGUgZGVhZGxpbmUgSU8gc2NoZWR1bGVyLgotCi1TZWxlY3RpbmcgSU8gc2NoZWR1bGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyIHRvIERvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dCBmb3IgaW5mb3JtYXRpb24gb24KLXNlbGVjdGluZyBhbiBpbyBzY2hlZHVsZXIgb24gYSBwZXItZGV2aWNlIGJhc2lzLgotCi1BbnRpY2lwYXRvcnkgSU8gc2NoZWR1bGVyIFBvbGljaWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgYXMtaW9zY2hlZCBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIHNldmVyYWwgbGF5ZXJzIG9mIHBvbGljaWVzCi10byBkZXRlcm1pbmUgd2hlbiBhbiBJTyByZXF1ZXN0IGlzIGRpc3BhdGNoZWQgdG8gdGhlIGRpc2sgY29udHJvbGxlci4KLUhlcmUgYXJlIHRoZSBwb2xpY2llcyBvdXRsaW5lZCwgaW4gb3JkZXIgb2YgYXBwbGljYXRpb24uCi0KLTEuIG9uZS13YXkgRWxldmF0b3IgYWxnb3JpdGhtLgotCi1UaGUgZWxldmF0b3IgYWxnb3JpdGhtIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIGRlYWRsaW5lIHNjaGVkdWxlciwgd2l0aAotdGhlIGFkZGl0aW9uIHRoYXQgaXQgYWxsb3dzIGxpbWl0ZWQgYmFja3dhcmQgbW92ZW1lbnQgb2YgdGhlIGVsZXZhdG9yCi0oaS5lLiBzZWVrcyBiYWNrd2FyZHMpLiAgQSBzZWVrIGJhY2t3YXJkcyBjYW4gb2NjdXIgd2hlbiBjaG9vc2luZyBiZXR3ZWVuCi10d28gSU8gcmVxdWVzdHMgd2hlcmUgb25lIGlzIGJlaGluZCB0aGUgZWxldmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLCBhbmQKLXRoZSBvdGhlciBpcyBpbiBmcm9udCBvZiB0aGUgZWxldmF0b3IncyBwb3NpdGlvbi4gSWYgdGhlIHNlZWsgZGlzdGFuY2UgdG8KLXRoZSByZXF1ZXN0IGluIGJhY2sgb2YgdGhlIGVsZXZhdG9yIGlzIGxlc3MgdGhhbiBoYWxmIHRoZSBzZWVrIGRpc3RhbmNlIHRvCi10aGUgcmVxdWVzdCBpbiBmcm9udCBvZiB0aGUgZWxldmF0b3IsIHRoZW4gdGhlIHJlcXVlc3QgaW4gYmFjayBjYW4gYmUgY2hvc2VuLgotQmFja3dhcmQgc2Vla3MgYXJlIGFsc28gbGltaXRlZCB0byBhIG1heGltdW0gb2YgTUFYQkFDSyAoMTAyNCoxMDI0KSBzZWN0b3JzLgotVGhpcyBmYXZvcnMgZm9yd2FyZCBtb3ZlbWVudCBvZiB0aGUgZWxldmF0b3IsIHdoaWxlIGFsbG93aW5nIG9wcG9ydHVuaXN0aWMKLSJzaG9ydCIgYmFja3dhcmQgc2Vla3MuCi0KLTIuIEZJRk8gZXhwaXJhdGlvbiB0aW1lcyBmb3IgcmVhZHMgYW5kIGZvciB3cml0ZXMuCi0KLVRoaXMgaXMgYWdhaW4gdmVyeSBzaW1pbGFyIHRvIHRoZSBkZWFkbGluZSBJTyBzY2hlZHVsZXIuICBUaGUgZXhwaXJhdGlvbgotdGltZXMgZm9yIHJlcXVlc3RzIG9uIHRoZXNlIGxpc3RzIGlzIHR1bmFibGUgdXNpbmcgdGhlIHBhcmFtZXRlcnMgcmVhZF9leHBpcmUKLWFuZCB3cml0ZV9leHBpcmUgZGlzY3Vzc2VkIGJlbG93LiAgV2hlbiBhIHJlYWQgb3IgYSB3cml0ZSBleHBpcmVzIGluIHRoaXMgd2F5LAotdGhlIElPIHNjaGVkdWxlciB3aWxsIGludGVycnVwdCBpdHMgY3VycmVudCBlbGV2YXRvciBzd2VlcCBvciByZWFkIGFudGljaXBhdGlvbgotdG8gc2VydmljZSB0aGUgZXhwaXJlZCByZXF1ZXN0LgotCi0zLiBSZWFkIGFuZCB3cml0ZSByZXF1ZXN0IGJhdGNoaW5nCi0KLUEgYmF0Y2ggaXMgYSBjb2xsZWN0aW9uIG9mIHJlYWQgcmVxdWVzdHMgb3IgYSBjb2xsZWN0aW9uIG9mIHdyaXRlCi1yZXF1ZXN0cy4gIFRoZSBhcyBzY2hlZHVsZXIgYWx0ZXJuYXRlcyBkaXNwYXRjaGluZyByZWFkIGFuZCB3cml0ZSBiYXRjaGVzCi10byB0aGUgZHJpdmVyLiAgSW4gdGhlIGNhc2UgYSByZWFkIGJhdGNoLCB0aGUgc2NoZWR1bGVyIHN1Ym1pdHMgcmVhZAotcmVxdWVzdHMgdG8gdGhlIGRyaXZlciBhcyBsb25nIGFzIHRoZXJlIGFyZSByZWFkIHJlcXVlc3RzIHRvIHN1Ym1pdCwgYW5kCi10aGUgcmVhZCBiYXRjaCB0aW1lIGxpbWl0IGhhcyBub3QgYmVlbiBleGNlZWRlZCAocmVhZF9iYXRjaF9leHBpcmUpLgotVGhlIHJlYWQgYmF0Y2ggdGltZSBsaW1pdCBiZWdpbnMgY291bnRpbmcgZG93biBvbmx5IHdoZW4gdGhlcmUgYXJlCi1jb21wZXRpbmcgd3JpdGUgcmVxdWVzdHMgcGVuZGluZy4KLQotSW4gdGhlIGNhc2Ugb2YgYSB3cml0ZSBiYXRjaCwgdGhlIHNjaGVkdWxlciBzdWJtaXRzIHdyaXRlIHJlcXVlc3RzIHRvCi10aGUgZHJpdmVyIGFzIGxvbmcgYXMgdGhlcmUgYXJlIHdyaXRlIHJlcXVlc3RzIGF2YWlsYWJsZSwgYW5kIHRoZQotd3JpdGUgYmF0Y2ggdGltZSBsaW1pdCBoYXMgbm90IGJlZW4gZXhjZWVkZWQgKHdyaXRlX2JhdGNoX2V4cGlyZSkuCi1Ib3dldmVyLCB0aGUgbGVuZ3RoIG9mIHdyaXRlIGJhdGNoZXMgd2lsbCBiZSBncmFkdWFsbHkgc2hvcnRlbmVkCi13aGVuIHJlYWQgYmF0Y2hlcyBmcmVxdWVudGx5IGV4Y2VlZCB0aGVpciB0aW1lIGxpbWl0LgotCi1XaGVuIGNoYW5naW5nIGJldHdlZW4gYmF0Y2ggdHlwZXMsIHRoZSBzY2hlZHVsZXIgd2FpdHMgZm9yIGFsbCByZXF1ZXN0cwotZnJvbSB0aGUgcHJldmlvdXMgYmF0Y2ggdG8gY29tcGxldGUgYmVmb3JlIHNjaGVkdWxpbmcgcmVxdWVzdHMgZm9yIHRoZQotbmV4dCBiYXRjaC4KLQotVGhlIHJlYWQgYW5kIHdyaXRlIGZpZm8gZXhwaXJhdGlvbiB0aW1lcyBkZXNjcmliZWQgaW4gcG9saWN5IDIgYWJvdmUKLWFyZSBjaGVja2VkIG9ubHkgd2hlbiBpbiBzY2hlZHVsaW5nIElPIG9mIGEgYmF0Y2ggZm9yIHRoZSBjb3JyZXNwb25kaW5nCi0ocmVhZC93cml0ZSkgdHlwZS4gIFNvIGZvciBleGFtcGxlLCB0aGUgcmVhZCBGSUZPIHRpbWVvdXQgdmFsdWVzIGFyZQotdGVzdGVkIG9ubHkgZHVyaW5nIHJlYWQgYmF0Y2hlcy4gIExpa2V3aXNlLCB0aGUgd3JpdGUgRklGTyB0aW1lb3V0Ci12YWx1ZXMgYXJlIHRlc3RlZCBvbmx5IGR1cmluZyB3cml0ZSBiYXRjaGVzLiAgRm9yIHRoaXMgcmVhc29uLAotaXQgaXMgZ2VuZXJhbGx5IG5vdCByZWNvbW1lbmRlZCBmb3IgdGhlIHJlYWQgYmF0Y2ggdGltZQotdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIHdyaXRlIGV4cGlyYXRpb24gdGltZSwgbm9yIGZvciB0aGUgd3JpdGUgYmF0Y2gKLXRpbWUgdG8gZXhjZWVkIHRoZSByZWFkIGV4cGlyYXRpb24gdGltZSAoc2VlIHR1bmFibGUgcGFyYW1ldGVycyBiZWxvdykuCi0KLVdoZW4gdGhlIElPIHNjaGVkdWxlciBjaGFuZ2VzIGZyb20gYSByZWFkIHRvIGEgd3JpdGUgYmF0Y2gsCi1pdCBiZWdpbnMgdGhlIGVsZXZhdG9yIGZyb20gdGhlIHJlcXVlc3QgdGhhdCBpcyBvbiB0aGUgaGVhZCBvZiB0aGUKLXdyaXRlIGV4cGlyYXRpb24gRklGTy4gIExpa2V3aXNlLCB3aGVuIGNoYW5naW5nIGZyb20gYSB3cml0ZSBiYXRjaCB0bwotYSByZWFkIGJhdGNoLCBzY2hlZHVsZXIgYmVnaW5zIHRoZSBlbGV2YXRvciBmcm9tIHRoZSBmaXJzdCBlbnRyeQotb24gdGhlIHJlYWQgZXhwaXJhdGlvbiBGSUZPLgotCi00LiBSZWFkIGFudGljaXBhdGlvbi4KLQotUmVhZCBhbnRpY2lwYXRpb24gb2NjdXJzIG9ubHkgd2hlbiBzY2hlZHVsaW5nIGEgcmVhZCBiYXRjaC4KLVRoaXMgaW1wbGVtZW50YXRpb24gb2YgcmVhZCBhbnRpY2lwYXRpb24gYWxsb3dzIG9ubHkgb25lIHJlYWQgcmVxdWVzdAotdG8gYmUgZGlzcGF0Y2hlZCB0byB0aGUgZGlzayBjb250cm9sbGVyIGF0IGEgdGltZS4gIEluCi1jb250cmFzdCwgbWFueSB3cml0ZSByZXF1ZXN0cyBtYXkgYmUgZGlzcGF0Y2hlZCB0byB0aGUgZGlzayBjb250cm9sbGVyCi1hdCBhIHRpbWUgZHVyaW5nIGEgd3JpdGUgYmF0Y2guICBJdCBpcyB0aGlzIGNoYXJhY3RlcmlzdGljIHRoYXQgY2FuIG1ha2UKLXRoZSBhbnRpY2lwYXRvcnkgc2NoZWR1bGVyIHBlcmZvcm0gYW5vbWFsb3VzbHkgd2l0aCBjb250cm9sbGVycyBzdXBwb3J0aW5nCi1UQ1EsIG9yIHdpdGggaGFyZHdhcmUgc3RyaXBlZCBSQUlEIGRldmljZXMuIFNldHRpbmcgdGhlIGFudGljX2V4cGlyZQotcXVldWUgcGFyYW1ldGVyIChzZWUgYmVsb3cpIHRvIHplcm8gZGlzYWJsZXMgdGhpcyBiZWhhdmlvciwgYW5kIHRoZSAKLWFudGljaXBhdG9yeSBzY2hlZHVsZXIgYmVoYXZlcyBlc3NlbnRpYWxseSBsaWtlIHRoZSBkZWFkbGluZSBzY2hlZHVsZXIuCi0KLVdoZW4gcmVhZCBhbnRpY2lwYXRpb24gaXMgZW5hYmxlZCAoYW50aWNfZXhwaXJlIGlzIG5vdCB6ZXJvKSwgcmVhZHMKLWFyZSBkaXNwYXRjaGVkIHRvIHRoZSBkaXNrIGNvbnRyb2xsZXIgb25lIGF0IGEgdGltZS4KLUF0IHRoZSBlbmQgb2YgZWFjaCByZWFkIHJlcXVlc3QsIHRoZSBJTyBzY2hlZHVsZXIgZXhhbWluZXMgaXRzIG5leHQKLWNhbmRpZGF0ZSByZWFkIHJlcXVlc3QgZnJvbSBpdHMgc29ydGVkIHJlYWQgbGlzdC4gIElmIHRoYXQgbmV4dCByZXF1ZXN0Ci1pcyBmcm9tIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIHJlcXVlc3QgdGhhdCBqdXN0IGNvbXBsZXRlZCwKLW9yIGlmIHRoZSBuZXh0IHJlcXVlc3QgaW4gdGhlIHF1ZXVlIGlzICJ2ZXJ5IGNsb3NlIiB0byB0aGUKLWp1c3QgY29tcGxldGVkIHJlcXVlc3QsIGl0IGlzIGRpc3BhdGNoZWQgaW1tZWRpYXRlbHkuICBPdGhlcndpc2UsCi1zdGF0aXN0aWNzIChhdmVyYWdlIHRoaW5rIHRpbWUsIGF2ZXJhZ2Ugc2VlayBkaXN0YW5jZSkgb24gdGhlIHByb2Nlc3MKLXRoYXQgc3VibWl0dGVkIHRoZSBqdXN0IGNvbXBsZXRlZCByZXF1ZXN0IGFyZSBleGFtaW5lZC4gIElmIGl0IHNlZW1zCi1saWtlbHkgdGhhdCB0aGF0IHByb2Nlc3Mgd2lsbCBzdWJtaXQgYW5vdGhlciByZXF1ZXN0IHNvb24sIGFuZCB0aGF0Ci1yZXF1ZXN0IGlzIGxpa2VseSB0byBiZSBuZWFyIHRoZSBqdXN0IGNvbXBsZXRlZCByZXF1ZXN0LCB0aGVuIHRoZSBJTwotc2NoZWR1bGVyIHdpbGwgc3RvcCBkaXNwYXRjaGluZyBtb3JlIHJlYWQgcmVxdWVzdHMgZm9yIHVwIHRvIChhbnRpY19leHBpcmUpCi1taWxsaXNlY29uZHMsIGhvcGluZyB0aGF0IHByb2Nlc3Mgd2lsbCBzdWJtaXQgYSBuZXcgcmVxdWVzdCBuZWFyIHRoZSBvbmUKLXRoYXQganVzdCBjb21wbGV0ZWQuICBJZiBzdWNoIGEgcmVxdWVzdCBpcyBtYWRlLCB0aGVuIGl0IGlzIGRpc3BhdGNoZWQKLWltbWVkaWF0ZWx5LiAgSWYgdGhlIGFudGljX2V4cGlyZSB3YWl0IHRpbWUgZXhwaXJlcywgdGhlbiB0aGUgSU8gc2NoZWR1bGVyCi13aWxsIGRpc3BhdGNoIHRoZSBuZXh0IHJlYWQgcmVxdWVzdCBmcm9tIHRoZSBzb3J0ZWQgcmVhZCBxdWV1ZS4KLQotVG8gZGVjaWRlIHdoZXRoZXIgYW4gYW50aWNpcGF0b3J5IHdhaXQgaXMgd29ydGh3aGlsZSwgdGhlIHNjaGVkdWxlcgotbWFpbnRhaW5zIHN0YXRpc3RpY3MgZm9yIGVhY2ggcHJvY2VzcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUKLW1lYW4gInRoaW5rIHRpbWUiICh0aGUgdGltZSBiZXR3ZWVuIHJlYWQgcmVxdWVzdHMpLCBhbmQgbWVhbiBzZWVrCi1kaXN0YW5jZSBmb3IgdGhhdCBwcm9jZXNzLiAgT25lIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlc2Ugc3RhdGlzdGljcwotYXJlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHByb2Nlc3MsIGJ1dCB0aG9zZSBzdGF0aXN0aWNzIGFyZSBub3QgYXNzb2NpYXRlZAotd2l0aCBhIHNwZWNpZmljIElPIGRldmljZS4gIFNvIGZvciBleGFtcGxlLCBpZiBhIHByb2Nlc3MgaXMgZG9pbmcgSU8KLW9uIHNldmVyYWwgZmlsZSBzeXN0ZW1zIG9uIHNlcGFyYXRlIGRldmljZXMsIHRoZSBzdGF0aXN0aWNzIHdpbGwgYmUKLWEgY29tYmluYXRpb24gb2YgSU8gYmVoYXZpb3IgZnJvbSBhbGwgdGhvc2UgZGV2aWNlcy4KLQotCi1UdW5pbmcgdGhlIGFudGljaXBhdG9yeSBJTyBzY2hlZHVsZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2hlbiB1c2luZyAnYXMnLCB0aGUgYW50aWNpcGF0b3J5IElPIHNjaGVkdWxlciB0aGVyZSBhcmUgNSBwYXJhbWV0ZXJzIHVuZGVyCi0vc3lzL2Jsb2NrLyovcXVldWUvaW9zY2hlZC8uIEFsbCBhcmUgdW5pdHMgb2YgbWlsbGlzZWNvbmRzLgotCi1UaGUgcGFyYW1ldGVycyBhcmU6Ci0qIHJlYWRfZXhwaXJlCi0gICAgQ29udHJvbHMgaG93IGxvbmcgdW50aWwgYSByZWFkIHJlcXVlc3QgYmVjb21lcyAiZXhwaXJlZCIuIEl0IGFsc28gY29udHJvbHMgdGhlCi0gICAgaW50ZXJ2YWwgYmV0d2VlbiB3aGljaCBleHBpcmVkIHJlcXVlc3RzIGFyZSBzZXJ2ZWQsIHNvIHNldCB0byA1MCwgYSByZXF1ZXN0Ci0gICAgbWlnaHQgdGFrZSBhbnl3aGVyZSA8IDEwMG1zIHRvIGJlIHNlcnZpY2VkIF9pZl8gaXQgaXMgdGhlIG5leHQgb24gdGhlCi0gICAgZXhwaXJlZCBsaXN0LiBPYnZpb3VzbHkgcmVxdWVzdCBleHBpcmF0aW9uIHN0cmF0ZWdpZXMgd29uJ3QgbWFrZSB0aGUgZGlzawotICAgIGdvIGZhc3Rlci4gVGhlIHJlc3VsdCBiYXNpY2FsbHkgZXF1YXRlcyB0byB0aGUgdGltZXNsaWNlIGEgc2luZ2xlIHJlYWRlcgotICAgIGdldHMgaW4gdGhlIHByZXNlbmNlIG9mIG90aGVyIElPLiAxMDAqKChzZWVrIHRpbWUgLyByZWFkX2V4cGlyZSkgKyAxKSBpcwotICAgIHZlcnkgcm91Z2hseSB0aGUgJSBzdHJlYW1pbmcgcmVhZCBlZmZpY2llbmN5IHlvdXIgZGlzayBzaG91bGQgZ2V0IHdpdGgKLSAgICBtdWx0aXBsZSByZWFkZXJzLgotCi0qIHJlYWRfYmF0Y2hfZXhwaXJlCi0gICAgQ29udHJvbHMgaG93IG11Y2ggdGltZSBhIGJhdGNoIG9mIHJlYWRzIGlzIGdpdmVuIGJlZm9yZSBwZW5kaW5nIHdyaXRlcyBhcmUKLSAgICBzZXJ2ZWQuIEEgaGlnaGVyIHZhbHVlIGlzIG1vcmUgZWZmaWNpZW50LiBUaGlzIG1pZ2h0IGJlIHNldCBiZWxvdyByZWFkX2V4cGlyZQotICAgIGlmIHdyaXRlcyBhcmUgdG8gYmUgZ2l2ZW4gaGlnaGVyIHByaW9yaXR5IHRoYW4gcmVhZHMsIGJ1dCByZWFkcyBhcmUgdG8gYmUKLSAgICBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUgd2hlbiB0aGVyZSBhcmUgbm8gd3JpdGVzLiBHZW5lcmFsbHkgdGhvdWdoLCBpdAotICAgIHNob3VsZCBiZSBzb21lIG11bHRpcGxlIG9mIHJlYWRfZXhwaXJlLgotCi0qIHdyaXRlX2V4cGlyZSwgYW5kCi0qIHdyaXRlX2JhdGNoX2V4cGlyZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgYWJvdmUsIGZvciB3cml0ZXMuCi0KLSogYW50aWNfZXhwaXJlCi0gICAgQ29udHJvbHMgdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgd2UgY2FuIGFudGljaXBhdGUgYSBnb29kIHJlYWQgKG9uZQotICAgIHdpdGggYSBzaG9ydCBzZWVrIGRpc3RhbmNlIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgY29tcGxldGVkIHJlcXVlc3QpIGJlZm9yZQotICAgIGdpdmluZyB1cC4gTWFueSBvdGhlciBmYWN0b3JzIG1heSBjYXVzZSBhbnRpY2lwYXRpb24gdG8gYmUgc3RvcHBlZCBlYXJseSwKLSAgICBvciBzb21lIHByb2Nlc3NlcyB3aWxsIG5vdCBiZSAiYW50aWNpcGF0ZWQiIGF0IGFsbC4gU2hvdWxkIGJlIGEgYml0IGhpZ2hlcgotICAgIGZvciBiaWcgc2VlayB0aW1lIGRldmljZXMgdGhvdWdoIG5vdCBhIGxpbmVhciBjb3JyZXNwb25kZW5jZSAtIG1vc3QKLSAgICBwcm9jZXNzZXMgaGF2ZSBvbmx5IGEgZmV3IG1zIHRoaW5rdGltZS4KLQotSW4gYWRkaXRpb24gdG8gdGhlIHR1bmFibGVzIGFib3ZlIHRoZXJlIGlzIGEgcmVhZC1vbmx5IGZpbGUgbmFtZWQgZXN0X3RpbWUKLXdoaWNoLCB3aGVuIHJlYWQsIHdpbGwgc2hvdzoKLQotICAgIC0gVGhlIHByb2JhYmlsaXR5IG9mIGEgdGFzayBleGl0aW5nIHdpdGhvdXQgYSBjb29wZXJhdGluZyB0YXNrCi0gICAgICBzdWJtaXR0aW5nIGFuIGFudGljaXBhdGVkIElPLgotCi0gICAgLSBUaGUgY3VycmVudCBtZWFuIHRoaW5rIHRpbWUuCi0KLSAgICAtIFRoZSBzZWVrIGRpc3RhbmNlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIGluY29taW5nIElPIGlzIGJldHRlci4KLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CmluZGV4IDhkMjE1OGEuLjZmYWI5N2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTE4Niw3ICsxODYsNyBAQAogZG8gbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbWFwcGluZykgYW5kCiBsb3ctbWVtb3J5IHBhZ2VzLgogCi1Ob3RlOiBQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQgZm9yIGEgZGlzY3Vzc2lvbgorTm90ZTogUGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQgZm9yIGEgZGlzY3Vzc2lvbgogb24gUENJIGhpZ2ggbWVtIERNQSBhc3BlY3RzIGFuZCBtYXBwaW5nIG9mIHNjYXR0ZXIgZ2F0aGVyIGxpc3RzLCBhbmQgc3VwcG9ydAogZm9yIDY0IGJpdCBQQ0kuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0CmluZGV4IDYwMTIwZmIuLmQyY2Q2ZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dApAQCAtMjI2LDUgKzIyNiw1IEBACiBUaGlzIGNhbiB0aGVuIGJlIHVzZWQgdG8gYWRkIGFuZCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZQogZHJpdmVyJ3MgZGlyZWN0b3J5IHVzaW5nOgogCi1pbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwotdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CitpbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwordm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCBhZjY4ODVjLi5lMWRlZjE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQkJYWxzbyBiZSB1c2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGJhcnJpZXJzLCBmb3IKIAkJCWNvbnNpc3RlbmN5IHdpdGggb3RoZXIgZXh0NCBtb3VudCBvcHRpb25zLgogCi1pbm9kZV9yZWFkYWhlYWQ9bglUaGlzIHR1bmluZyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIG1heGltdW0KK2lub2RlX3JlYWRhaGVhZF9ibGtzPW4JVGhpcyB0dW5pbmcgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBtYXhpbXVtCiAJCQludW1iZXIgb2YgaW5vZGUgdGFibGUgYmxvY2tzIHRoYXQgZXh0NCdzIGlub2RlCiAJCQl0YWJsZSByZWFkYWhlYWQgYWxnb3JpdGhtIHdpbGwgcHJlLXJlYWQgaW50bwogCQkJdGhlIGJ1ZmZlciBjYWNoZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMyIGJsb2Nrcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dAppbmRleCA0OTQ5ZmNhLi44MzllZmQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25pbGZzMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uaWxmczIudHh0CkBAIC0yOCw3ICsyOCw3IEBACiBQcm9qZWN0IHdlYiBwYWdlOiAgICBodHRwOi8vd3d3Lm5pbGZzLm9yZy9lbi8KIERvd25sb2FkIHBhZ2U6ICAgICAgIGh0dHA6Ly93d3cubmlsZnMub3JnL2VuL2Rvd25sb2FkLmh0bWwKIEdpdCB0cmVlIHdlYiBwYWdlOiAgIGh0dHA6Ly93d3cubmlsZnMub3JnL2dpdC8KLU5JTEZTIG1haWxpbmcgbGlzdHM6IGh0dHA6Ly93d3cubmlsZnMub3JnL21haWxtYW4vbGlzdGluZm8vdXNlcnMKK0xpc3QgaW5mbzogICAgICAgICAgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sI2xpbnV4LW5pbGZzCiAKIENhdmVhdHMKID09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKaW5kZXggYjI0NWQ1Mi4uOTMxYzgwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKQEAgLTkxLDggKzkxLDggQEAKIAkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKik7Ci12b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOworaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOwordm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqLCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKTsKIAogSXQgYWxzbyBkZWZpbmVzIHRoaXMgaGVscGVyIGZvciBkZWZpbmluZyBkZXZpY2UgYXR0cmlidXRlczogCiAKQEAgLTMxNiw4ICszMTYsOCBAQAogCiBDcmVhdGlvbi9SZW1vdmFsOgogCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKLXZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7CitpbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKK3ZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKIAogCiAtIGJ1cyBkcml2ZXJzIChpbmNsdWRlL2xpbnV4L2RldmljZS5oKQpAQCAtMzU4LDcgKzM1OCw3IEBACiAKIENyZWF0aW9uL1JlbW92YWw6CiAKLWludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Ci12b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKK2ludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Cit2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDViYTRkOWQuLjczNmQ0NTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0yNDAsNyArMjQwLDcgQEAKIAogCWFjcGlfc2xlZXA9CVtIVyxBQ1BJXSBTbGVlcCBvcHRpb25zCiAJCQlGb3JtYXQ6IHsgczNfYmlvcywgczNfbW9kZSwgczNfYmVlcCwgczRfbm9od3NpZywKLQkJCQkgIG9sZF9vcmRlcmluZywgczRfbm9udnMgfQorCQkJCSAgb2xkX29yZGVyaW5nLCBzNF9ub252cywgc2NpX2ZvcmNlX2VuYWJsZSB9CiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlby50eHQgZm9yIGluZm9ybWF0aW9uIG9uCiAJCQlzM19iaW9zIGFuZCBzM19tb2RlLgogCQkJczNfYmVlcCBpcyBmb3IgZGVidWdnaW5nOyBpdCBtYWtlcyB0aGUgUEMncyBzcGVha2VyIGJlZXAKQEAgLTI1Myw2ICsyNTMsOSBAQAogCQkJb2YgX1BUUyBpcyB1c2VkIGJ5IGRlZmF1bHQpLgogCQkJczRfbm9udnMgcHJldmVudHMgdGhlIGtlcm5lbCBmcm9tIHNhdmluZy9yZXN0b3JpbmcgdGhlCiAJCQlBQ1BJIE5WUyBtZW1vcnkgZHVyaW5nIGhpYmVybmF0aW9uLgorCQkJc2NpX2ZvcmNlX2VuYWJsZSBjYXVzZXMgdGhlIGtlcm5lbCB0byBzZXQgU0NJX0VOIGRpcmVjdGx5CisJCQlvbiByZXN1bWUgZnJvbSBTMS9TMyAod2hpY2ggaXMgYWdhaW5zdCB0aGUgQUNQSSBzcGVjLAorCQkJYnV0IHNvbWUgYnJva2VuIHN5c3RlbXMgZG9uJ3Qgd29yayB3aXRob3V0IGl0KS4KIAogCWFjcGlfdXNlX3RpbWVyX292ZXJyaWRlIFtIVyxBQ1BJXQogCQkJVXNlIHRpbWVyIG92ZXJyaWRlLiBGb3Igc29tZSBicm9rZW4gTnZpZGlhIE5GNSBib2FyZHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CmluZGV4IGUxYTExNDEuLjI4MTFlNDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dApAQCAtNjg1LDcgKzY4NSw3IEBACiAJCV9fdTggcGFkOwogCX0gbm1pOwogCV9fdTMyIHNpcGlfdmVjdG9yOwotCV9fdTMyIGZsYWdzOyAgIC8qIG11c3QgYmUgemVybyAqLworCV9fdTMyIGZsYWdzOwogfTsKIAogNC4zMCBLVk1fU0VUX1ZDUFVfRVZFTlRTCkBAIC03MDEsNiArNzAxLDE0IEBACiAKIFNlZSBLVk1fR0VUX1ZDUFVfRVZFTlRTIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmUuCiAKK0ZpZWxkcyB0aGF0IG1heSBiZSBtb2RpZmllZCBhc3luY2hyb25vdXNseSBieSBydW5uaW5nIFZDUFVzIGNhbiBiZSBleGNsdWRlZAorZnJvbSB0aGUgdXBkYXRlLiBUaGVzZSBmaWVsZHMgYXJlIG5taS5wZW5kaW5nIGFuZCBzaXBpX3ZlY3Rvci4gS2VlcCB0aGUKK2NvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZmxhZ3MgZmllbGQgY2xlYXJlZCB0byBzdXBwcmVzcyBvdmVyd3JpdGluZyB0aGUKK2N1cnJlbnQgaW4ta2VybmVsIHN0YXRlLiBUaGUgYml0cyBhcmU6CisKK0tWTV9WQ1BVRVZFTlRfVkFMSURfTk1JX1BFTkRJTkcgLSB0cmFuc2ZlciBubWkucGVuZGluZyB0byB0aGUga2VybmVsCitLVk1fVkNQVUVWRU5UX1ZBTElEX1NJUElfVkVDVE9SIC0gdHJhbnNmZXIgc2lwaV92ZWN0b3IKKwogCiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CmluZGV4IDE2OTA5MWYuLjc1YWZhMTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKQEAgLTEwOTIsOCArMTA5Miw4IEBACiAgICAgaXRzIGxldmVsIHVwIGFuZCBkb3duIGF0IGV2ZXJ5IGNoYW5nZS4KIAogCi1Wb2x1bWUgY29udHJvbAotLS0tLS0tLS0tLS0tLS0KK1ZvbHVtZSBjb250cm9sIChDb25zb2xlIEF1ZGlvIGNvbnRyb2wpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBwcm9jZnM6IC9wcm9jL2FjcGkvaWJtL3ZvbHVtZQogQUxTQTogIlRoaW5rUGFkIENvbnNvbGUgQXVkaW8gQ29udHJvbCIsIGRlZmF1bHQgSUQ6ICJUaGlua1BhZEVDIgpAQCAtMTExMCw5ICsxMTEwLDUzIEBACiBTb2Z0d2FyZSB2b2x1bWUgY29udHJvbCBzaG91bGQgYmUgZG9uZSBvbmx5IGluIHRoZSBtYWluIEFDOTcvSERBCiBtaXhlci4KIAotVGhpcyBmZWF0dXJlIGFsbG93cyB2b2x1bWUgY29udHJvbCBvbiBUaGlua1BhZCBtb2RlbHMgd2l0aCBhIGRpZ2l0YWwKLXZvbHVtZSBrbm9iICh3aGVuIGF2YWlsYWJsZSwgbm90IGFsbCBtb2RlbHMgaGF2ZSBpdCksIGFzIHdlbGwgYXMKLW11dGUvdW5tdXRlIGNvbnRyb2wuICBUaGUgYXZhaWxhYmxlIGNvbW1hbmRzIGFyZToKKworQWJvdXQgdGhlIFRoaW5rUGFkIENvbnNvbGUgQXVkaW8gY29udHJvbDoKKworVGhpbmtQYWRzIGhhdmUgYSBidWlsdC1pbiBhbXBsaWZpZXIgYW5kIG11dGluZyBjaXJjdWl0IHRoYXQgZHJpdmVzIHRoZQorY29uc29sZSBoZWFkcGhvbmUgYW5kIHNwZWFrZXJzLiAgVGhpcyBjaXJjdWl0IGlzIGFmdGVyIHRoZSBtYWluIEFDOTcKK29yIEhEQSBtaXhlciBpbiB0aGUgYXVkaW8gcGF0aCwgYW5kIHVuZGVyIGV4Y2x1c2l2ZSBjb250cm9sIG9mIHRoZQorZmlybXdhcmUuCisKK1RoaW5rUGFkcyBoYXZlIHRocmVlIHNwZWNpYWwgaG90a2V5cyB0byBpbnRlcmFjdCB3aXRoIHRoZSBjb25zb2xlCithdWRpbyBjb250cm9sOiB2b2x1bWUgdXAsIHZvbHVtZSBkb3duIGFuZCBtdXRlLgorCitJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgbm9ybWFsIHdheSB0aGUgbXV0ZSBmdW5jdGlvbiB3b3JrcyAob24KK1RoaW5rUGFkcyB0aGF0IGRvIG5vdCBoYXZlIGEgIm11dGUgTEVEIikgaXM6CisKKzEuIFByZXNzIG11dGUgdG8gbXV0ZS4gIEl0IHdpbGwgKmFsd2F5cyogbXV0ZSwgeW91IGNhbiBwcmVzcyBpdCBhcworICAgbWFueSB0aW1lcyBhcyB5b3Ugd2FudCwgYW5kIHRoZSBzb3VuZCB3aWxsIHJlbWFpbiBtdXRlLgorCisyLiBQcmVzcyBlaXRoZXIgdm9sdW1lIGtleSB0byB1bm11dGUgdGhlIFRoaW5rUGFkIChpdCB3aWxsIF9ub3RfCisgICBjaGFuZ2UgdGhlIHZvbHVtZSwgaXQgd2lsbCBqdXN0IHVubXV0ZSkuCisKK1RoaXMgaXMgYSB2ZXJ5IHN1cGVyaW9yIGRlc2lnbiB3aGVuIGNvbXBhcmVkIHRvIHRoZSBjaGVhcCBzb2Z0d2FyZS1vbmx5CittdXRlLXRvZ2dsZSBzb2x1dGlvbiBmb3VuZCBvbiBub3JtYWwgY29uc3VtZXIgbGFwdG9wczogIHlvdSBjYW4gYmUKK2Fic29sdXRlbHkgc3VyZSB0aGUgVGhpbmtQYWQgd2lsbCBub3QgbWFrZSBub2lzZSBpZiB5b3UgcHJlc3MgdGhlIG11dGUKK2J1dHRvbiwgbm8gbWF0dGVyIHRoZSBwcmV2aW91cyBzdGF0ZS4KKworVGhlIElCTSBUaGlua1BhZHMsIGFuZCB0aGUgZWFybGllciBMZW5vdm8gVGhpbmtQYWRzIGhhdmUgdmFyaWFibGUtZ2FpbgorYW1wbGlmaWVycyBkcml2aW5nIHRoZSBzcGVha2VycyBhbmQgaGVhZHBob25lIG91dHB1dCwgYW5kIHRoZSBmaXJtd2FyZQorYWxzbyBoYW5kbGVzIHZvbHVtZSBjb250cm9sIGZvciB0aGUgaGVhZHBob25lIGFuZCBzcGVha2VycyBvbiB0aGVzZQorVGhpbmtQYWRzIHdpdGhvdXQgYW55IGhlbHAgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbSAodGhpcyB2b2x1bWUKK2NvbnRyb2wgc3RhZ2UgZXhpc3RzIGFmdGVyIHRoZSBtYWluIEFDOTcgb3IgSERBIG1peGVyIGluIHRoZSBhdWRpbworcGF0aCkuCisKK1RoZSBuZXdlciBMZW5vdm8gbW9kZWxzIG9ubHkgaGF2ZSBmaXJtd2FyZSBtdXRlIGNvbnRyb2wsIGFuZCBkZXBlbmQgb24KK3RoZSBtYWluIEhEQSBtaXhlciB0byBkbyB2b2x1bWUgY29udHJvbCAod2hpY2ggaXMgZG9uZSBieSB0aGUgb3BlcmF0aW5nCitzeXN0ZW0pLiAgSW4gdGhpcyBjYXNlLCB0aGUgdm9sdW1lIGtleXMgYXJlIGZpbHRlcmVkIG91dCBmb3IgdW5tdXRlCitrZXkgcHJlc3MgKHRoZXJlIGFyZSBzb21lIGZpcm13YXJlIGJ1Z3MgaW4gdGhpcyBhcmVhKSBhbmQgZGVsaXZlcmVkIGFzCitub3JtYWwga2V5IHByZXNzZXMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gKHRoaW5rcGFkLWFjcGkgaXMgbm90CitpbnZvbHZlZCkuCisKKworVGhlIFRoaW5rUGFkLUFDUEkgdm9sdW1lIGNvbnRyb2w6CisKK1RoZSBwcmVmZXJyZWQgd2F5IHRvIGludGVyYWN0IHdpdGggdGhlIENvbnNvbGUgQXVkaW8gY29udHJvbCBpcyB0aGUKK0FMU0EgaW50ZXJmYWNlLgorCitUaGUgbGVnYWN5IHByb2NmcyBpbnRlcmZhY2UgYWxsb3dzIG9uZSB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlLAorYW5kIGlmIHZvbHVtZSBjb250cm9sIGlzIGVuYWJsZWQsIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKIAogCWVjaG8gdXAgICA+L3Byb2MvYWNwaS9pYm0vdm9sdW1lCiAJZWNobyBkb3duID4vcHJvYy9hY3BpL2libS92b2x1bWUKQEAgLTExMjEsMTIgKzExNjUsMTAgQEAKIAllY2hvICdsZXZlbCA8bGV2ZWw+JyA+L3Byb2MvYWNwaS9pYm0vdm9sdW1lCiAKIFRoZSA8bGV2ZWw+IG51bWJlciByYW5nZSBpcyAwIHRvIDE0IGFsdGhvdWdoIG5vdCBhbGwgb2YgdGhlbSBtYXkgYmUKLWRpc3RpbmN0LiBUaGUgdW5tdXRlIHRoZSB2b2x1bWUgYWZ0ZXIgdGhlIG11dGUgY29tbWFuZCwgdXNlIGVpdGhlciB0aGUKK2Rpc3RpbmN0LiBUbyB1bm11dGUgdGhlIHZvbHVtZSBhZnRlciB0aGUgbXV0ZSBjb21tYW5kLCB1c2UgZWl0aGVyIHRoZQogdXAgb3IgZG93biBjb21tYW5kICh0aGUgbGV2ZWwgY29tbWFuZCB3aWxsIG5vdCB1bm11dGUgdGhlIHZvbHVtZSksIG9yCiB0aGUgdW5tdXRlIGNvbW1hbmQuCiAKLVRoZSBjdXJyZW50IHZvbHVtZSBsZXZlbCBhbmQgbXV0ZSBzdGF0ZSBpcyBzaG93biBpbiB0aGUgZmlsZS4KLQogWW91IGNhbiB1c2UgdGhlIHZvbHVtZV9jYXBhYmlsaXRpZXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIGRyaXZlcgogd2hldGhlciB5b3VyIHRoaW5rcGFkIGhhcyB2b2x1bWUgY29udHJvbCBvciBtdXRlLW9ubHkgY29udHJvbDoKIHZvbHVtZV9jYXBhYmlsaXRpZXM9MSBmb3IgbWl4ZXJzIHdpdGggbXV0ZSBhbmQgdm9sdW1lIGNvbnRyb2wsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dAppbmRleCA0YTMxMDliLi4zNTZmZDg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKQEAgLTQyLDgwICs0Miw4MSBAQAogCS4uLgogfTsKIAotVGhlIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgZm9yIHRoZSBidXMgdHlwZSBvZgotdGhlIGRldmljZSBiZWluZyBzdXNwZW5kZWQuICBUaGUgYnVzIHR5cGUncyBjYWxsYmFjayBpcyB0aGVuIF9lbnRpcmVseV8KLV9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHdoaWNoIG1heSwgYnV0IG5lZWQgbm90Ci1pbmNsdWRlIGV4ZWN1dGluZyB0aGUgZGV2aWNlIGRyaXZlcidzIG93biAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIChmcm9tIHRoZQotUE0gY29yZSdzIHBvaW50IG9mIHZpZXcgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgYSAtPnJ1bnRpbWVfc3VzcGVuZCgpCi1jYWxsYmFjayBpbiBhIGRldmljZSBkcml2ZXIgYXMgbG9uZyBhcyB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGtub3dzCi13aGF0IHRvIGRvIHRvIGhhbmRsZSB0aGUgZGV2aWNlKS4KK1RoZSAtPnJ1bnRpbWVfc3VzcGVuZCgpLCAtPnJ1bnRpbWVfcmVzdW1lKCkgYW5kIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2tzIGFyZQorZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgZm9yIGVpdGhlciB0aGUgYnVzIHR5cGUsIG9yIGRldmljZSB0eXBlIChpZiB0aGUgYnVzCit0eXBlJ3MgY2FsbGJhY2sgaXMgbm90IGRlZmluZWQpLCBvciBkZXZpY2UgY2xhc3MgKGlmIHRoZSBidXMgdHlwZSdzIGFuZCBkZXZpY2UKK3R5cGUncyBjYWxsYmFja3MgYXJlIG5vdCBkZWZpbmVkKSBvZiBnaXZlbiBkZXZpY2UuICBUaGUgYnVzIHR5cGUsIGRldmljZSB0eXBlCithbmQgZGV2aWNlIGNsYXNzIGNhbGxiYWNrcyBhcmUgcmVmZXJyZWQgdG8gYXMgc3Vic3lzdGVtLWxldmVsIGNhbGxiYWNrcyBpbiB3aGF0Citmb2xsb3dzLgogCi0gICogT25jZSB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CitUaGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgaXMgX2VudGlyZWx5XyBfcmVzcG9uc2libGVfIGZvciBoYW5kbGluZwordGhlIHN1c3BlbmQgb2YgdGhlIGRldmljZSBhcyBhcHByb3ByaWF0ZSwgd2hpY2ggbWF5LCBidXQgbmVlZCBub3QgaW5jbHVkZQorZXhlY3V0aW5nIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgb3duIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgKGZyb20gdGhlCitQTSBjb3JlJ3MgcG9pbnQgb2YgdmlldyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBhIC0+cnVudGltZV9zdXNwZW5kKCkKK2NhbGxiYWNrIGluIGEgZGV2aWNlIGRyaXZlciBhcyBsb25nIGFzIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjawora25vd3Mgd2hhdCB0byBkbyB0byBoYW5kbGUgdGhlIGRldmljZSkuCisKKyAgKiBPbmNlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQogICAgIGZvciBnaXZlbiBkZXZpY2UsIHRoZSBQTSBjb3JlIHJlZ2FyZHMgdGhlIGRldmljZSBhcyBzdXNwZW5kZWQsIHdoaWNoIG5lZWQKICAgICBub3QgbWVhbiB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gcHV0IGludG8gYSBsb3cgcG93ZXIgc3RhdGUuICBJdCBpcwogICAgIHN1cHBvc2VkIHRvIG1lYW4sIGhvd2V2ZXIsIHRoYXQgdGhlIGRldmljZSB3aWxsIG5vdCBwcm9jZXNzIGRhdGEgYW5kIHdpbGwKLSAgICBub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgQ1BVKHMpIGFuZCBSQU0gdW50aWwgaXRzIGJ1cyB0eXBlJ3MKLSAgICAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgZm9yIGl0LiAgVGhlIHJ1bi10aW1lIFBNIHN0YXR1cyBvZgotICAgIGEgZGV2aWNlIGFmdGVyIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mIGl0cyBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkKLSAgICBjYWxsYmFjayBpcyAnc3VzcGVuZGVkJy4KKyAgICBub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgQ1BVKHMpIGFuZCBSQU0gdW50aWwgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUKKyAgICBjYWxsYmFjayBpcyBleGVjdXRlZCBmb3IgaXQuICBUaGUgcnVuLXRpbWUgUE0gc3RhdHVzIG9mIGEgZGV2aWNlIGFmdGVyCisgICAgc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YgdGhlIHN1YnN5c3RlbS1sZXZlbCBzdXNwZW5kIGNhbGxiYWNrIGlzICdzdXNwZW5kZWQnLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayByZXR1cm5zIC1FQlVTWSBvciAtRUFHQUlOLAotICAgIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgaXMgc3VwcG9zZWQgdG8gYmUgJ2FjdGl2ZScsIHdoaWNoIG1lYW5zIHRoYXQKLSAgICB0aGUgZGV2aWNlIF9tdXN0XyBiZSBmdWxseSBvcGVyYXRpb25hbCBhZnRlcndhcmRzLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayByZXR1cm5zIC1FQlVTWSBvciAtRUFHQUlOLAorICAgIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgaXMgJ2FjdGl2ZScsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRldmljZQorICAgIF9tdXN0XyBiZSBmdWxseSBvcGVyYXRpb25hbCBhZnRlcndhcmRzLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIGNvZGUKLSAgICBkaWZmZXJlbnQgZnJvbSAtRUJVU1kgb3IgLUVBR0FJTiwgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGlzIGFzIGEgZmF0YWwKLSAgICBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQKLSAgICBmb3IgdGhlIGRldmljZSwgdW50aWwgdGhlIHN0YXR1cyBvZiBpdCBpcyBkaXJlY3RseSBzZXQgZWl0aGVyIHRvICdhY3RpdmUnCi0gICAgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzIHNwZWNpYWwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhpcwotICAgIHB1cnBvc2UpLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIGNvZGUgZGlmZmVyZW50CisgICAgZnJvbSAtRUJVU1kgb3IgLUVBR0FJTiwgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGlzIGFzIGEgZmF0YWwgZXJyb3IgYW5kIHdpbGwKKyAgICByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQgZm9yIHRoZSBkZXZpY2UsCisgICAgdW50aWwgdGhlIHN0YXR1cyBvZiBpdCBpcyBkaXJlY3RseSBzZXQgZWl0aGVyIHRvICdhY3RpdmUnLCBvciB0byAnc3VzcGVuZGVkJworICAgICh0aGUgUE0gY29yZSBwcm92aWRlcyBzcGVjaWFsIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoaXMgcHVycG9zZSkuCiAKLUluIHBhcnRpY3VsYXIsIGlmIHRoZSBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCBjYXBhYmlsaXR5IGZvciBwcm9wZXIKLWZ1bmN0aW9uaW5nIGFuZCBkZXZpY2VfcnVuX3dha2UoKSByZXR1cm5zICdmYWxzZScgZm9yIHRoZSBkZXZpY2UsIHRoZW4KLS0+cnVudGltZV9zdXNwZW5kKCkgc2hvdWxkIHJldHVybiAtRUJVU1kuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYKLWRldmljZV9ydW5fd2FrZSgpIHJldHVybnMgJ3RydWUnIGZvciB0aGUgZGV2aWNlIGFuZCB0aGUgZGV2aWNlIGlzIHB1dAotaW50byBhIGxvdyBwb3dlciBzdGF0ZSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBpdHMgYnVzIHR5cGUncwotLT5ydW50aW1lX3N1c3BlbmQoKSwgaXQgaXMgZXhwZWN0ZWQgdGhhdCByZW1vdGUgd2FrZS11cCAoaS5lLiBoYXJkd2FyZSBtZWNoYW5pc20KLWFsbG93aW5nIHRoZSBkZXZpY2UgdG8gcmVxdWVzdCBhIGNoYW5nZSBvZiBpdHMgcG93ZXIgc3RhdGUsIHN1Y2ggYXMgUENJIFBNRSkKLXdpbGwgYmUgZW5hYmxlZCBmb3IgdGhlIGRldmljZS4gIEdlbmVyYWxseSwgcmVtb3RlIHdha2UtdXAgc2hvdWxkIGJlIGVuYWJsZWQKLWZvciBhbGwgaW5wdXQgZGV2aWNlcyBwdXQgaW50byBhIGxvdyBwb3dlciBzdGF0ZSBhdCBydW4gdGltZS4KK0luIHBhcnRpY3VsYXIsIGlmIHRoZSBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2UtdXAgY2FwYWJpbGl0eSAoaS5lLiBoYXJkd2FyZQorbWVjaGFuaXNtIGFsbG93aW5nIHRoZSBkZXZpY2UgdG8gcmVxdWVzdCBhIGNoYW5nZSBvZiBpdHMgcG93ZXIgc3RhdGUsIHN1Y2ggYXMKK1BDSSBQTUUpIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgYW5kIGRldmljZV9ydW5fd2FrZSgpIHJldHVybnMgJ2ZhbHNlJyBmb3IgdGhlCitkZXZpY2UsIHRoZW4gLT5ydW50aW1lX3N1c3BlbmQoKSBzaG91bGQgcmV0dXJuIC1FQlVTWS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZgorZGV2aWNlX3J1bl93YWtlKCkgcmV0dXJucyAndHJ1ZScgZm9yIHRoZSBkZXZpY2UgYW5kIHRoZSBkZXZpY2UgaXMgcHV0IGludG8gYSBsb3cKK3Bvd2VyIHN0YXRlIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjaywgaXQgaXMKK2V4cGVjdGVkIHRoYXQgcmVtb3RlIHdha2UtdXAgd2lsbCBiZSBlbmFibGVkIGZvciB0aGUgZGV2aWNlLiAgR2VuZXJhbGx5LCByZW1vdGUKK3dha2UtdXAgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGFsbCBpbnB1dCBkZXZpY2VzIHB1dCBpbnRvIGEgbG93IHBvd2VyIHN0YXRlIGF0CitydW4gdGltZS4KIAotVGhlIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCi10aGUgZGV2aWNlIGJlaW5nIHdva2VuIHVwLiAgVGhlIGJ1cyB0eXBlJ3MgY2FsbGJhY2sgaXMgdGhlbiBfZW50aXJlbHlfCi1fcmVzcG9uc2libGVfIGZvciBoYW5kbGluZyB0aGUgZGV2aWNlIGFzIGFwcHJvcHJpYXRlLCB3aGljaCBtYXksIGJ1dCBuZWVkIG5vdAotaW5jbHVkZSBleGVjdXRpbmcgdGhlIGRldmljZSBkcml2ZXIncyBvd24gLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIChmcm9tIHRoZQotUE0gY29yZSdzIHBvaW50IG9mIHZpZXcgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgYSAtPnJ1bnRpbWVfcmVzdW1lKCkKLWNhbGxiYWNrIGluIGEgZGV2aWNlIGRyaXZlciBhcyBsb25nIGFzIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9yZXN1bWUoKSBrbm93cwotd2hhdCB0byBkbyB0byBoYW5kbGUgdGhlIGRldmljZSkuCitUaGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBpcyBfZW50aXJlbHlfIF9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nIHRoZQorcmVzdW1lIG9mIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHdoaWNoIG1heSwgYnV0IG5lZWQgbm90IGluY2x1ZGUgZXhlY3V0aW5nCit0aGUgZGV2aWNlIGRyaXZlcidzIG93biAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgKGZyb20gdGhlIFBNIGNvcmUncyBwb2ludCBvZgordmlldyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBhIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBpbiBhIGRldmljZQorZHJpdmVyIGFzIGxvbmcgYXMgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUgY2FsbGJhY2sga25vd3Mgd2hhdCB0byBkbyB0byBoYW5kbGUKK3RoZSBkZXZpY2UpLgogCi0gICogT25jZSB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksCi0gICAgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGUgZGV2aWNlIGFzIGZ1bGx5IG9wZXJhdGlvbmFsLCB3aGljaCBtZWFucyB0aGF0IHRoZQotICAgIGRldmljZSBfbXVzdF8gYmUgYWJsZSB0byBjb21wbGV0ZSBJL08gb3BlcmF0aW9ucyBhcyBuZWVkZWQuICBUaGUgcnVuLXRpbWUKLSAgICBQTSBzdGF0dXMgb2YgdGhlIGRldmljZSBpcyB0aGVuICdhY3RpdmUnLgorICAqIE9uY2UgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRoZSBQTQorICAgIGNvcmUgcmVnYXJkcyB0aGUgZGV2aWNlIGFzIGZ1bGx5IG9wZXJhdGlvbmFsLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkZXZpY2UKKyAgICBfbXVzdF8gYmUgYWJsZSB0byBjb21wbGV0ZSBJL08gb3BlcmF0aW9ucyBhcyBuZWVkZWQuICBUaGUgcnVuLXRpbWUgUE0gc3RhdHVzCisgICAgb2YgdGhlIGRldmljZSBpcyB0aGVuICdhY3RpdmUnLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIFBNCi0gICAgY29yZSByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIKLSAgICBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNCBmb3IgdGhlIGRldmljZSwgdW50aWwgaXRzIHN0YXR1cyBpcwotICAgIGRpcmVjdGx5IHNldCBlaXRoZXIgdG8gJ2FjdGl2ZScgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzCi0gICAgc3BlY2lhbCBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGlzIHB1cnBvc2UpLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgcmVzdW1lIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIFBNIGNvcmUKKyAgICByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zCisgICAgZGVzY3JpYmVkIGluIFNlY3Rpb24gNCBmb3IgdGhlIGRldmljZSwgdW50aWwgaXRzIHN0YXR1cyBpcyBkaXJlY3RseSBzZXQKKyAgICBlaXRoZXIgdG8gJ2FjdGl2ZScgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzIHNwZWNpYWwgaGVscGVyCisgICAgZnVuY3Rpb25zIGZvciB0aGlzIHB1cnBvc2UpLgogCi1UaGUgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCi1naXZlbiBkZXZpY2Ugd2hlbmV2ZXIgdGhlIGRldmljZSBhcHBlYXJzIHRvIGJlIGlkbGUsIHdoaWNoIGlzIGluZGljYXRlZCB0byB0aGUKLVBNIGNvcmUgYnkgdHdvIGNvdW50ZXJzLCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlciBhbmQgdGhlIGNvdW50ZXIgb2YgJ2FjdGl2ZScKLWNoaWxkcmVuIG9mIHRoZSBkZXZpY2UuCitUaGUgc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgd2hlbmV2ZXIgdGhlIGRldmljZQorYXBwZWFycyB0byBiZSBpZGxlLCB3aGljaCBpcyBpbmRpY2F0ZWQgdG8gdGhlIFBNIGNvcmUgYnkgdHdvIGNvdW50ZXJzLCB0aGUKK2RldmljZSdzIHVzYWdlIGNvdW50ZXIgYW5kIHRoZSBjb3VudGVyIG9mICdhY3RpdmUnIGNoaWxkcmVuIG9mIHRoZSBkZXZpY2UuCiAKICAgKiBJZiBhbnkgb2YgdGhlc2UgY291bnRlcnMgaXMgZGVjcmVhc2VkIHVzaW5nIGEgaGVscGVyIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5CiAgICAgdGhlIFBNIGNvcmUgYW5kIGl0IHR1cm5zIG91dCB0byBiZSBlcXVhbCB0byB6ZXJvLCB0aGUgb3RoZXIgY291bnRlciBpcwogICAgIGNoZWNrZWQuICBJZiB0aGF0IGNvdW50ZXIgYWxzbyBpcyBlcXVhbCB0byB6ZXJvLCB0aGUgUE0gY29yZSBleGVjdXRlcyB0aGUKLSAgICBkZXZpY2UgYnVzIHR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrICh3aXRoIHRoZSBkZXZpY2UgYXMgYW4KLSAgICBhcmd1bWVudCkuCisgICAgc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgd2l0aCB0aGUgZGV2aWNlIGFzIGFuIGFyZ3VtZW50LgogCi1UaGUgYWN0aW9uIHBlcmZvcm1lZCBieSBhIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBpcyB0b3RhbGx5Ci1kZXBlbmRlbnQgb24gdGhlIGJ1cyB0eXBlIGluIHF1ZXN0aW9uLCBidXQgdGhlIGV4cGVjdGVkIGFuZCByZWNvbW1lbmRlZCBhY3Rpb24KLWlzIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZCAoaS5lLiBpZiBhbGwgb2YgdGhlIGNvbmRpdGlvbnMKLW5lY2Vzc2FyeSBmb3Igc3VzcGVuZGluZyB0aGUgZGV2aWNlIGFyZSBzYXRpc2ZpZWQpIGFuZCB0byBxdWV1ZSB1cCBhIHN1c3BlbmQKLXJlcXVlc3QgZm9yIHRoZSBkZXZpY2UgaW4gdGhhdCBjYXNlLiAgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgY2FsbGJhY2sgaXMKLWlnbm9yZWQgYnkgdGhlIFBNIGNvcmUuCitUaGUgYWN0aW9uIHBlcmZvcm1lZCBieSBhIHN1YnN5c3RlbS1sZXZlbCBpZGxlIGNhbGxiYWNrIGlzIHRvdGFsbHkgZGVwZW5kZW50IG9uCit0aGUgc3Vic3lzdGVtIGluIHF1ZXN0aW9uLCBidXQgdGhlIGV4cGVjdGVkIGFuZCByZWNvbW1lbmRlZCBhY3Rpb24gaXMgdG8gY2hlY2sKK2lmIHRoZSBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZCAoaS5lLiBpZiBhbGwgb2YgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvcgorc3VzcGVuZGluZyB0aGUgZGV2aWNlIGFyZSBzYXRpc2ZpZWQpIGFuZCB0byBxdWV1ZSB1cCBhIHN1c3BlbmQgcmVxdWVzdCBmb3IgdGhlCitkZXZpY2UgaW4gdGhhdCBjYXNlLiAgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgY2FsbGJhY2sgaXMgaWdub3JlZCBieSB0aGUgUE0KK2NvcmUuCiAKIFRoZSBoZWxwZXIgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBQTSBjb3JlLCBkZXNjcmliZWQgaW4gU2VjdGlvbiA0LCBndWFyYW50ZWUKIHRoYXQgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50cyBhcmUgbWV0IHdpdGggcmVzcGVjdCB0byB0aGUgYnVzIHR5cGUncyBydW4tdGltZQpAQCAtMjM4LDQxICsyMzksNDEgQEAKICAgICAgIHJlbW92aW5nIHRoZSBkZXZpY2UgZnJvbSBkZXZpY2UgaGllcmFyY2h5CiAKICAgaW50IHBtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gZXhlY3V0ZSAtPnJ1bnRpbWVfaWRsZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbiBzdWNjZXNzCi0gICAgICBvciBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIHdoZXJlIC1FSU5QUk9HUkVTUyBtZWFucyB0aGF0IC0+cnVudGltZV9pZGxlKCkKLSAgICAgIGlzIGFscmVhZHkgYmVpbmcgZXhlY3V0ZWQKKyAgICAtIGV4ZWN1dGUgdGhlIHN1YnN5c3RlbS1sZXZlbCBpZGxlIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlOyByZXR1cm5zIDAgb24KKyAgICAgIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUlOUFJPR1JFU1MgbWVhbnMgdGhhdAorICAgICAgLT5ydW50aW1lX2lkbGUoKSBpcyBhbHJlYWR5IGJlaW5nIGV4ZWN1dGVkCiAKICAgaW50IHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gZXhlY3V0ZSAtPnJ1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbgorICAgIC0gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2U7IHJldHVybnMgMCBvbgogICAgICAgc3VjY2VzcywgMSBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIHdhcyBhbHJlYWR5ICdzdXNwZW5kZWQnLCBvcgogICAgICAgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUFHQUlOIG9yIC1FQlVTWSBtZWFucyBpdCBpcyBzYWZlIHRvIGF0dGVtcHQKICAgICAgIHRvIHN1c3BlbmQgdGhlIGRldmljZSBhZ2FpbiBpbiBmdXR1cmUKIAogICBpbnQgcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKLSAgICAtIGV4ZWN1dGUgLT5ydW50aW1lX3Jlc3VtZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbgorICAgIC0gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmUgcmVzdW1lIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlOyByZXR1cm5zIDAgb24KICAgICAgIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyB3YXMgYWxyZWFkeSAnYWN0aXZlJyBvcgogICAgICAgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUFHQUlOIG1lYW5zIGl0IG1heSBiZSBzYWZlIHRvIGF0dGVtcHQgdG8KICAgICAgIHJlc3VtZSB0aGUgZGV2aWNlIGFnYWluIGluIGZ1dHVyZSwgYnV0ICdwb3dlci5ydW50aW1lX2Vycm9yJyBzaG91bGQgYmUKICAgICAgIGNoZWNrZWQgYWRkaXRpb25hbGx5CiAKICAgaW50IHBtX3JlcXVlc3RfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9pZGxlKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZQotICAgICAgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKLSAgICAgIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHF1ZXVlZCB1cAorICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgaWRsZSBjYWxsYmFjayBmb3IgdGhlCisgICAgICBkZXZpY2UgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uCisgICAgICBzdWNjZXNzIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHF1ZXVlZCB1cAogCiAgIGludCBwbV9zY2hlZHVsZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5KTsKLSAgICAtIHNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgLT5ydW50aW1lX3N1c3BlbmQoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCi0gICAgICBpbiBmdXR1cmUsIHdoZXJlICdkZWxheScgaXMgdGhlIHRpbWUgdG8gd2FpdCBiZWZvcmUgcXVldWluZyB1cCBhIHN1c3BlbmQKLSAgICAgIHdvcmsgaXRlbSBpbiBwbV93cSwgaW4gbWlsbGlzZWNvbmRzIChpZiAnZGVsYXknIGlzIHplcm8sIHRoZSB3b3JrIGl0ZW0gaXMKLSAgICAgIHF1ZXVlZCB1cCBpbW1lZGlhdGVseSk7IHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBQTQorICAgIC0gc2NoZWR1bGUgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgZm9yIHRoZQorICAgICAgZGV2aWNlIGluIGZ1dHVyZSwgd2hlcmUgJ2RlbGF5JyBpcyB0aGUgdGltZSB0byB3YWl0IGJlZm9yZSBxdWV1aW5nIHVwIGEKKyAgICAgIHN1c3BlbmQgd29yayBpdGVtIGluIHBtX3dxLCBpbiBtaWxsaXNlY29uZHMgKGlmICdkZWxheScgaXMgemVybywgdGhlIHdvcmsKKyAgICAgIGl0ZW0gaXMgcXVldWVkIHVwIGltbWVkaWF0ZWx5KTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIFBNCiAgICAgICBydW4tdGltZSBzdGF0dXMgd2FzIGFscmVhZHkgJ3N1c3BlbmRlZCcsIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QKICAgICAgIGhhc24ndCBiZWVuIHNjaGVkdWxlZCAob3IgcXVldWVkIHVwIGlmICdkZWxheScgaXMgMCk7IGlmIHRoZSBleGVjdXRpb24gb2YKICAgICAgIC0+cnVudGltZV9zdXNwZW5kKCkgaXMgYWxyZWFkeSBzY2hlZHVsZWQgYW5kIG5vdCB5ZXQgZXhwaXJlZCwgdGhlIG5ldwogICAgICAgdmFsdWUgb2YgJ2RlbGF5JyB3aWxsIGJlIHVzZWQgYXMgdGhlIHRpbWUgdG8gd2FpdAogCiAgIGludCBwbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9yZXN1bWUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCi0gICAgICAodGhlIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB3b3JrIGl0ZW0gaW4gcG1fd3EpOyByZXR1cm5zIDAgb24KKyAgICAtIHN1Ym1pdCBhIHJlcXVlc3QgdG8gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBmb3IgdGhlCisgICAgICBkZXZpY2UgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uCiAgICAgICBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgd2FzIGFscmVhZHkgJ2FjdGl2ZScsIG9yCiAgICAgICBlcnJvciBjb2RlIGlmIHRoZSByZXF1ZXN0IGhhc24ndCBiZWVuIHF1ZXVlZCB1cAogCkBAIC0zMDMsMTIgKzMwNCwxMiBAQAogICAgICAgcnVuLXRpbWUgUE0gY2FsbGJhY2tzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDIKIAogICBpbnQgcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0gICAgLSBwcmV2ZW50IHRoZSBydW4tdGltZSBQTSBoZWxwZXIgZnVuY3Rpb25zIGZyb20gcnVubmluZyB0aGUgZGV2aWNlIGJ1cwotICAgICAgdHlwZSdzIHJ1bi10aW1lIFBNIGNhbGxiYWNrcywgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBwZW5kaW5nIHJ1bi10aW1lCi0gICAgICBQTSBvcGVyYXRpb25zIG9uIHRoZSBkZXZpY2UgYXJlIGVpdGhlciBjb21wbGV0ZWQgb3IgY2FuY2VsZWQ7IHJldHVybnMKLSAgICAgIDEgaWYgdGhlcmUgd2FzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZyBhbmQgaXQgd2FzIG5lY2Vzc2FyeSB0byBleGVjdXRlCi0gICAgICAtPnJ1bnRpbWVfcmVzdW1lKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZSB0byBzYXRpc2Z5IHRoYXQgcmVxdWVzdCwKLSAgICAgIG90aGVyd2lzZSAwIGlzIHJldHVybmVkCisgICAgLSBwcmV2ZW50IHRoZSBydW4tdGltZSBQTSBoZWxwZXIgZnVuY3Rpb25zIGZyb20gcnVubmluZyBzdWJzeXN0ZW0tbGV2ZWwKKyAgICAgIHJ1bi10aW1lIFBNIGNhbGxiYWNrcyBmb3IgdGhlIGRldmljZSwgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBwZW5kaW5nCisgICAgICBydW4tdGltZSBQTSBvcGVyYXRpb25zIG9uIHRoZSBkZXZpY2UgYXJlIGVpdGhlciBjb21wbGV0ZWQgb3IgY2FuY2VsZWQ7CisgICAgICByZXR1cm5zIDEgaWYgdGhlcmUgd2FzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZyBhbmQgaXQgd2FzIG5lY2Vzc2FyeSB0bworICAgICAgZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBmb3IgdGhlIGRldmljZSB0byBzYXRpc2Z5IHRoYXQKKyAgICAgIHJlcXVlc3QsIG90aGVyd2lzZSAwIGlzIHJldHVybmVkCiAKICAgdm9pZCBwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKICAgICAtIHNldC91bnNldCB0aGUgcG93ZXIuaWdub3JlX2NoaWxkcmVuIGZsYWcgb2YgdGhlIGRldmljZQpAQCAtMzc4LDUgKzM3OSw1NSBAQAogdGhleSB3aWxsIGZhaWwgcmV0dXJuaW5nIC1FQUdBSU4sIGJlY2F1c2UgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXIgaXMKIGluY3JlbWVudGVkIGJ5IHRoZSBjb3JlIGJlZm9yZSBleGVjdXRpbmcgLT5wcm9iZSgpIGFuZCAtPnJlbW92ZSgpLiAgU3RpbGwsIGl0CiBtYXkgYmUgZGVzaXJhYmxlIHRvIHN1c3BlbmQgdGhlIGRldmljZSBhcyBzb29uIGFzIC0+cHJvYmUoKSBvciAtPnJlbW92ZSgpIGhhcwotZmluaXNoZWQsIHNvIHRoZSBQTSBjb3JlIHVzZXMgcG1fcnVudGltZV9pZGxlX3N5bmMoKSB0byBpbnZva2UgdGhlIGRldmljZSBidXMKLXR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrIGF0IHRoYXQgdGltZS4KK2ZpbmlzaGVkLCBzbyB0aGUgUE0gY29yZSB1c2VzIHBtX3J1bnRpbWVfaWRsZV9zeW5jKCkgdG8gaW52b2tlIHRoZQorc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2UgYXQgdGhhdCB0aW1lLgorCis2LiBSdW4tdGltZSBQTSBhbmQgU3lzdGVtIFNsZWVwCisKK1J1bi10aW1lIFBNIGFuZCBzeXN0ZW0gc2xlZXAgKGkuZS4sIHN5c3RlbSBzdXNwZW5kIGFuZCBoaWJlcm5hdGlvbiwgYWxzbyBrbm93bgorYXMgc3VzcGVuZC10by1SQU0gYW5kIHN1c3BlbmQtdG8tZGlzaykgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIGluIGEgY291cGxlIG9mCit3YXlzLiAgSWYgYSBkZXZpY2UgaXMgYWN0aXZlIHdoZW4gYSBzeXN0ZW0gc2xlZXAgc3RhcnRzLCBldmVyeXRoaW5nIGlzCitzdHJhaWdodGZvcndhcmQuICBCdXQgd2hhdCBzaG91bGQgaGFwcGVuIGlmIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBzdXNwZW5kZWQ/CisKK1RoZSBkZXZpY2UgbWF5IGhhdmUgZGlmZmVyZW50IHdha2UtdXAgc2V0dGluZ3MgZm9yIHJ1bi10aW1lIFBNIGFuZCBzeXN0ZW0gc2xlZXAuCitGb3IgZXhhbXBsZSwgcmVtb3RlIHdha2UtdXAgbWF5IGJlIGVuYWJsZWQgZm9yIHJ1bi10aW1lIHN1c3BlbmQgYnV0IGRpc2FsbG93ZWQKK2ZvciBzeXN0ZW0gc2xlZXAgKGRldmljZV9tYXlfd2FrZXVwKGRldikgcmV0dXJucyAnZmFsc2UnKS4gIFdoZW4gdGhpcyBoYXBwZW5zLAordGhlIHN1YnN5c3RlbS1sZXZlbCBzeXN0ZW0gc3VzcGVuZCBjYWxsYmFjayBpcyByZXNwb25zaWJsZSBmb3IgY2hhbmdpbmcgdGhlCitkZXZpY2UncyB3YWtlLXVwIHNldHRpbmcgKGl0IG1heSBsZWF2ZSB0aGF0IHRvIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgc3lzdGVtCitzdXNwZW5kIHJvdXRpbmUpLiAgSXQgbWF5IGJlIG5lY2Vzc2FyeSB0byByZXN1bWUgdGhlIGRldmljZSBhbmQgc3VzcGVuZCBpdCBhZ2FpbgoraW4gb3JkZXIgdG8gZG8gc28uICBUaGUgc2FtZSBpcyB0cnVlIGlmIHRoZSBkcml2ZXIgdXNlcyBkaWZmZXJlbnQgcG93ZXIgbGV2ZWxzCitvciBvdGhlciBzZXR0aW5ncyBmb3IgcnVuLXRpbWUgc3VzcGVuZCBhbmQgc3lzdGVtIHNsZWVwLgorCitEdXJpbmcgc3lzdGVtIHJlc3VtZSwgZGV2aWNlcyBnZW5lcmFsbHkgc2hvdWxkIGJlIGJyb3VnaHQgYmFjayB0byBmdWxsIHBvd2VyLAorZXZlbiBpZiB0aGV5IHdlcmUgc3VzcGVuZGVkIGJlZm9yZSB0aGUgc3lzdGVtIHNsZWVwIGJlZ2FuLiAgVGhlcmUgYXJlIHNldmVyYWwKK3JlYXNvbnMgZm9yIHRoaXMsIGluY2x1ZGluZzoKKworICAqIFRoZSBkZXZpY2UgbWlnaHQgbmVlZCB0byBzd2l0Y2ggcG93ZXIgbGV2ZWxzLCB3YWtlLXVwIHNldHRpbmdzLCBldGMuCisKKyAgKiBSZW1vdGUgd2FrZS11cCBldmVudHMgbWlnaHQgaGF2ZSBiZWVuIGxvc3QgYnkgdGhlIGZpcm13YXJlLgorCisgICogVGhlIGRldmljZSdzIGNoaWxkcmVuIG1heSBuZWVkIHRoZSBkZXZpY2UgdG8gYmUgYXQgZnVsbCBwb3dlciBpbiBvcmRlcgorICAgIHRvIHJlc3VtZSB0aGVtc2VsdmVzLgorCisgICogVGhlIGRyaXZlcidzIGlkZWEgb2YgdGhlIGRldmljZSBzdGF0ZSBtYXkgbm90IGFncmVlIHdpdGggdGhlIGRldmljZSdzCisgICAgcGh5c2ljYWwgc3RhdGUuICBUaGlzIGNhbiBoYXBwZW4gZHVyaW5nIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uLgorCisgICogVGhlIGRldmljZSBtaWdodCBuZWVkIHRvIGJlIHJlc2V0LgorCisgICogRXZlbiB0aG91Z2ggdGhlIGRldmljZSB3YXMgc3VzcGVuZGVkLCBpZiBpdHMgdXNhZ2UgY291bnRlciB3YXMgPiAwIHRoZW4gbW9zdAorICAgIGxpa2VseSBpdCB3b3VsZCBuZWVkIGEgcnVuLXRpbWUgcmVzdW1lIGluIHRoZSBuZWFyIGZ1dHVyZSBhbnl3YXkuCisKKyAgKiBBbHdheXMgZ29pbmcgYmFjayB0byBmdWxsIHBvd2VyIGlzIHNpbXBsZXN0LgorCitJZiB0aGUgZGV2aWNlIHdhcyBzdXNwZW5kZWQgYmVmb3JlIHRoZSBzbGVlcCBiZWdhbiwgdGhlbiBpdHMgcnVuLXRpbWUgUE0gc3RhdHVzCit3aWxsIGhhdmUgdG8gYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBhY3R1YWwgcG9zdC1zeXN0ZW0gc2xlZXAgc3RhdHVzLiAgVGhlIHdheQordG8gZG8gdGhpcyBpczoKKworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKK1RoZSBQTSBjb3JlIGFsd2F5cyBpbmNyZW1lbnRzIHRoZSBydW4tdGltZSB1c2FnZSBjb3VudGVyIGJlZm9yZSBjYWxsaW5nIHRoZQorLT5wcmVwYXJlKCkgY2FsbGJhY2sgYW5kIGRlY3JlbWVudHMgaXQgYWZ0ZXIgY2FsbGluZyB0aGUgLT5jb21wbGV0ZSgpIGNhbGxiYWNrLgorSGVuY2UgZGlzYWJsaW5nIHJ1bi10aW1lIFBNIHRlbXBvcmFyaWx5IGxpa2UgdGhpcyB3aWxsIG5vdCBjYXVzZSBhbnkgcnVuLXRpbWUKK3N1c3BlbmQgY2FsbGJhY2tzIHRvIGJlIGxvc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21waWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTM5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dApAQCAtMCwwICsxLDQyIEBACisqIE9wZW5QSUMgYW5kIGl0cyBpbnRlcnJ1cHQgbnVtYmVycyBvbiBGcmVlc2NhbGUncyBlNTAwL2U2MDAgY29yZXMKKworVGhlIE9wZW5QSUMgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoIGludGVycnVwdCBzb3VyY2UgaGFzIHRvCitiZWNvbWUgd2hpY2ggaW50ZXJydXB0IG51bWJlci4gVGhpcyBpcyB1cCB0byB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24KK29mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCBldmVyeQoraW50ZXJydXB0IHNvdXJjZSBoYXMgdG8gaGF2ZSBhbiB1bmlxdWUgaW50ZXJydXB0IG51bWJlciAvIHZlY3RvciBudW1iZXIuCitUbyBhY2NvbXBsaXNoIHRoaXMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYXNzaWducyB0aGUgbnVtYmVyIHplcm8gdG8KK3RoZSBmaXJzdCBzb3VyY2UsIHRoZSBudW1iZXIgb25lIHRvIHRoZSBzZWNvbmQgc291cmNlIGFuZCBzbyBvbiB1bnRpbAorYWxsIGludGVycnVwdCBzb3VyY2VzIGhhdmUgdGhlaXIgdW5pcXVlIG51bWJlci4KK1VzdWFsbHkgdGhlIGFzc2lnbmVkIHZlY3RvciBudW1iZXIgZXF1YWxzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG1lbnRpb25lZAoraW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGEgZ2l2ZW4gY29yZSAvIENQVS4gVGhpcyBpcyBob3dldmVyIG5vdCB0cnVlCitmb3IgdGhlIGU1MDAgY29yZXMgKE1QQzg1WFggQ1BVcykgd2hlcmUgdGhlIGRvY3VtZW50YXRpb24gZGlzdGluZ3Vpc2hlcworYmV0d2VlbiBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgYW5kIHN0YXJ0cyBjb3VudGluZyBhdAoremVybyBmb3IgYm90aCBvZiB0aGVtLgorCitTbyB3aGF0IHRvIHdyaXRlIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlIFggb3IgaW50ZXJuYWwgaW50ZXJydXB0Citzb3VyY2UgWSBpbnRvIHRoZSBkZXZpY2UgdHJlZT8gSGVyZSBpcyBhbiBleGFtcGxlOgorCitUaGUgbWVtb3J5IG1hcCBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluIHRoZSBNUEM4NTQ0WzBdIHNob3dzLAordGhhdCB0aGUgZmlyc3QgaW50ZXJydXB0IHNvdXJjZSBzdGFydHMgYXQgMHg1XzAwMDAgKFBJQyBSZWdpc3RlciBBZGRyZXNzCitNYXAtSW50ZXJydXB0IFNvdXJjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycykuIFRoaXMgc291cmNlIGJlY29tZXMgdGhlCitudW1iZXIgemVybyB0aGVyZWZvcmU6CisgRXh0ZXJuYWwgaW50ZXJydXB0IDAgPSBpbnRlcnJ1cHQgbnVtYmVyIDAKKyBFeHRlcm5hbCBpbnRlcnJ1cHQgMSA9IGludGVycnVwdCBudW1iZXIgMQorIEV4dGVybmFsIGludGVycnVwdCAyID0gaW50ZXJydXB0IG51bWJlciAyCisgLi4uCitFdmVyeSBpbnRlcnJ1cHQgbnVtYmVyIGFsbG9jYXRlcyAweDIwIGJ5dGVzIHJlZ2lzdGVyIHNwYWNlLiBTbyB0byBnZXQKK2l0cyBudW1iZXIgaXQgaXMgc3VmZmljaWVudCB0byBzaGlmdCB0aGUgbG93ZXIgMTZiaXRzIHRvIHJpZ2h0IGJ5IGZpdmUuCitTbyBmb3IgdGhlIGV4dGVybmFsIGludGVycnVwdCAxMCB3ZSBoYXZlOgorICAweDAxNDAgPj4gNSA9IDEwCisKK0FmdGVyIHRoZSBleHRlcm5hbCBzb3VyY2VzLCB0aGUgaW50ZXJuYWwgc291cmNlcyBmb2xsb3cuIFRoZSBpbiBjb3JlIEkyQworY29udHJvbGxlciBvbiB0aGUgTVBDODU0NCBmb3IgaW5zdGFuY2UgaGFzIHRoZSBpbnRlcm5hbCBzb3VyY2UgbnVtYmVyCisyNy4gT28gb2J0YWluIGl0cyBpbnRlcnJ1cHQgbnVtYmVyIHdlIHRha2UgdGhlIGxvd2VyIDE2Yml0cyBvZiBpdHMgbWVtb3J5CithZGRyZXNzICgweDVfMDU2MCkgYW5kIHNoaWZ0IGl0IHJpZ2h0OgorIDB4MDU2MCA+PiA1ID0gNDMKKworVGhlcmVmb3JlIHRoZSBJMkMgZGV2aWNlIG5vZGUgZm9yIHRoZSBNUEM4NTQ0IENQVSBoYXMgdG8gaGF2ZSB0aGUKK2ludGVycnVwdCBudW1iZXIgNDMgc3BlY2lmaWVkIGluIHRoZSBkZXZpY2UgdHJlZS4KKworWzBdIE1QQzg1NDRFIFBvd2VyUVVJQ0NUTSBJSUksIEludGVncmF0ZWQgSG9zdCBQcm9jZXNzb3IgRmFtaWx5IFJlZmVyZW5jZSBNYW51YWwKKyAgICBNUEM4NTQ0RVJNIFJldi4gMSAxMC8yMDA3CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGU5M2FmZmYuLmU3MmNlZTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC00MDMsNCArNDAzLDUgQEAKIENpcnJ1cyBMb2dpYyBDUzQyMDYvNDIwNwogPT09PT09PT09PT09PT09PT09PT09PT09CiAgIG1icDU1CQlNYWNCb29rIFBybyA1LDUKKyAgaW1hYzI3CUlNYWMgMjcgSW5jaAogICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1Byb2NmaWxlLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Qcm9jZmlsZS50eHQKaW5kZXggNzE5YTgxOS4uMDczMDFkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1Byb2NmaWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvUHJvY2ZpbGUudHh0CkBAIC05NSw3ICs5NSw3IEBACiAJSXQgdGFrZXMgYW4gaW50ZWdlciB2YWx1ZSwgY2FuIGJlIGNoYW5nZWQgYnkgd3JpdGluZyB0byB0aGlzCiAJZmlsZSwgc3VjaCBhcwogCi0JCSAjIGNhdCA1ID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL3hydW5fZGVidWcKKwkJICMgZWNobyA1ID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL3hydW5fZGVidWcKIAogCVRoZSB2YWx1ZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGJpdCBmbGFnczoKIAkgIGJpdCAwID0gRW5hYmxlIFhSVU4vamlmZmllcyBkZWJ1ZyBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vc3RhYmxlX2tlcm5lbF9ydWxlcy50eHQKaW5kZXggYTQ1MjIyNy4uNWVmZmE1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0CkBAIC0yNiwxMyArMjYsMzMgQEAKIAogIC0gU2VuZCB0aGUgcGF0Y2gsIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGZvbGxvd3MgdGhlIGFib3ZlIHJ1bGVzLCB0bwogICAgc3RhYmxlQGtlcm5lbC5vcmcuCisgLSBUbyBoYXZlIHRoZSBwYXRjaCBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGluIHRoZSBzdGFibGUgdHJlZSwgYWRkIHRoZQorICAgdGhlIHRhZworICAgICBDYzogc3RhYmxlQGtlcm5lbC5vcmcKKyAgIGluIHRoZSBzaWduLW9mZiBhcmVhLiBPbmNlIHRoZSBwYXRjaCBpcyBtZXJnZWQgaXQgd2lsbCBiZSBhcHBsaWVkIHRvCisgICB0aGUgc3RhYmxlIHRyZWUgd2l0aG91dCBhbnl0aGluZyBlbHNlIG5lZWRpbmcgdG8gYmUgZG9uZSBieSB0aGUgYXV0aG9yCisgICBvciBzdWJzeXN0ZW0gbWFpbnRhaW5lci4KKyAtIElmIHRoZSBwYXRjaCByZXF1aXJlcyBvdGhlciBwYXRjaGVzIGFzIHByZXJlcXVpc2l0ZXMgd2hpY2ggY2FuIGJlCisgICBjaGVycnktcGlja2VkIHRoYW4gdGhpcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGluCisgICB0aGUgc2lnbi1vZmYgYXJlYToKKworICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54OiBhMWY4NGEzOiBzY2hlZDogQ2hlY2sgZm9yIGlkbGUKKyAgICAgQ2M6IDxzdGFibGVAa2VybmVsLm9yZz4gIyAuMzIueDogMWI5NTA4Zjogc2NoZWQ6IFJhdGUtbGltaXQgbmV3aWRsZQorICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54OiBmZDIxMDczOiBzY2hlZDogRml4IGFmZmluaXR5IGxvZ2ljCisgICAgIENjOiA8c3RhYmxlQGtlcm5lbC5vcmc+ICMgLjMyLngKKyAgICBTaWduZWQtb2ZmLWJ5OiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KKworICAgVGhlIHRhZyBzZXF1ZW5jZSBoYXMgdGhlIG1lYW5pbmcgb2Y6CisgICAgIGdpdCBjaGVycnktcGljayBhMWY4NGEzCisgICAgIGdpdCBjaGVycnktcGljayAxYjk1MDhmCisgICAgIGdpdCBjaGVycnktcGljayBmZDIxMDczCisgICAgIGdpdCBjaGVycnktcGljayA8dGhpcyBjb21taXQ+CisKICAtIFRoZSBzZW5kZXIgd2lsbCByZWNlaXZlIGFuIEFDSyB3aGVuIHRoZSBwYXRjaCBoYXMgYmVlbiBhY2NlcHRlZCBpbnRvIHRoZQogICAgcXVldWUsIG9yIGEgTkFLIGlmIHRoZSBwYXRjaCBpcyByZWplY3RlZC4gIFRoaXMgcmVzcG9uc2UgbWlnaHQgdGFrZSBhIGZldwogICAgZGF5cywgYWNjb3JkaW5nIHRvIHRoZSBkZXZlbG9wZXIncyBzY2hlZHVsZXMuCiAgLSBJZiBhY2NlcHRlZCwgdGhlIHBhdGNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIC1zdGFibGUgcXVldWUsIGZvciByZXZpZXcgYnkKICAgIG90aGVyIGRldmVsb3BlcnMgYW5kIGJ5IHRoZSByZWxldmFudCBzdWJzeXN0ZW0gbWFpbnRhaW5lci4KLSAtIElmIHRoZSBzdGFibGVAa2VybmVsLm9yZyBhZGRyZXNzIGlzIGFkZGVkIHRvIGEgcGF0Y2gsIHdoZW4gaXQgZ29lcyBpbnRvCi0gICBMaW51cydzIHRyZWUgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGVtYWlsZWQgdG8gdGhlIHN0YWJsZSB0ZWFtLgogIC0gU2VjdXJpdHkgcGF0Y2hlcyBzaG91bGQgbm90IGJlIHNlbnQgdG8gdGhpcyBhbGlhcywgYnV0IGluc3RlYWQgdG8gdGhlCiAgICBkb2N1bWVudGVkIHNlY3VyaXR5QGtlcm5lbC5vcmcgYWRkcmVzcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMta21lbS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dAppbmRleCA2ZWYyYTg2Li5hYTgyZWU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dApAQCAtMSw3ICsxLDcgQEAKIAkJCVN1YnN5c3RlbSBUcmFjZSBQb2ludHM6IGttZW0KIAotVGhlIHRyYWNpbmcgc3lzdGVtIGttZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gb2JqZWN0IGFuZCBwYWdlIGFsbG9jYXRpb24KLXdpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSBmb3VyIG1ham9yIHN1YmhlYWRpbmdzLgorVGhlIGttZW0gdHJhY2luZyBzeXN0ZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gb2JqZWN0IGFuZCBwYWdlIGFsbG9jYXRpb24KK3dpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSBmaXZlIG1ham9yIHN1YmhlYWRpbmdzLgogCiAgIG8gU2xhYiBhbGxvY2F0aW9uIG9mIHNtYWxsIG9iamVjdHMgb2YgdW5rbm93biB0eXBlIChrbWFsbG9jKQogICBvIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIGtub3duIHR5cGUKQEAgLTksNyArOSw3IEBACiAgIG8gUGVyLUNQVSBBbGxvY2F0b3IgQWN0aXZpdHkKICAgbyBFeHRlcm5hbCBGcmFnbWVudGF0aW9uCiAKLVRoaXMgZG9jdW1lbnQgd2lsbCBkZXNjcmliZSB3aGF0IGVhY2ggb2YgdGhlIHRyYWNlcG9pbnRzIGFyZSBhbmQgd2h5IHRoZXkKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHdoYXQgZWFjaCBvZiB0aGUgdHJhY2Vwb2ludHMgaXMgYW5kIHdoeSB0aGV5CiBtaWdodCBiZSB1c2VmdWwuCiAKIDEuIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIHVua25vd24gdHlwZQpAQCAtMzQsNyArMzQsNyBAQAogVGhlc2UgZXZlbnRzIGFyZSBzaW1pbGFyIGluIHVzYWdlIHRvIHRoZSBrbWFsbG9jLXJlbGF0ZWQgZXZlbnRzIGV4Y2VwdCB0aGF0CiBpdCBpcyBsaWtlbHkgZWFzaWVyIHRvIHBpbiB0aGUgZXZlbnQgZG93biB0byBhIHNwZWNpZmljIGNhY2hlLiBBdCB0aGUgdGltZQogb2Ygd3JpdGluZywgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9uIHdoYXQgc2xhYiBpcyBiZWluZyBhbGxvY2F0ZWQgZnJvbSwKLWJ1dCB0aGUgY2FsbF9zaXRlIGNhbiB1c3VhbGx5IGJlIHVzZWQgdG8gZXh0cmFwb2xhdGUgdGhhdCBpbmZvcm1hdGlvbgorYnV0IHRoZSBjYWxsX3NpdGUgY2FuIHVzdWFsbHkgYmUgdXNlZCB0byBleHRyYXBvbGF0ZSB0aGF0IGluZm9ybWF0aW9uLgogCiAzLiBQYWdlIGFsbG9jYXRpb24KID09PT09PT09PT09PT09PT09PQpAQCAtODAsOSArODAsOSBAQAogV2hlbiB0aGUgcGVyLUNQVSBsaXN0IGlzIHRvbyBmdWxsLCBhIG51bWJlciBvZiBwYWdlcyBhcmUgZnJlZWQsIGVhY2ggb25lCiB3aGljaCB0cmlnZ2VycyBhIG1tX3BhZ2VfcGNwdV9kcmFpbiBldmVudC4KIAotVGhlIGluZGl2aWR1YWwgbmF0dXJlIG9mIHRoZSBldmVudHMgYXJlIHNvIHRoYXQgcGFnZXMgY2FuIGJlIHRyYWNrZWQKK1RoZSBpbmRpdmlkdWFsIG5hdHVyZSBvZiB0aGUgZXZlbnRzIGlzIHNvIHRoYXQgcGFnZXMgY2FuIGJlIHRyYWNrZWQKIGJldHdlZW4gYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4gQSBudW1iZXIgb2YgZHJhaW4gb3IgcmVmaWxsIHBhZ2VzIHRoYXQgb2NjdXIKLWNvbnNlY3V0aXZlbHkgaW1wbHkgdGhlIHpvbmUtPmxvY2sgYmVpbmcgdGFrZW4gb25jZS4gTGFyZ2UgYW1vdW50cyBvZiBQQ1AKK2NvbnNlY3V0aXZlbHkgaW1wbHkgdGhlIHpvbmUtPmxvY2sgYmVpbmcgdGFrZW4gb25jZS4gTGFyZ2UgYW1vdW50cyBvZiBwZXItQ1BVCiByZWZpbGxzIGFuZCBkcmFpbnMgY291bGQgaW1wbHkgYW4gaW1iYWxhbmNlIGJldHdlZW4gQ1BVcyB3aGVyZSB0b28gbXVjaCB3b3JrCiBpcyBiZWluZyBjb25jZW50cmF0ZWQgaW4gb25lIHBsYWNlLiBJdCBjb3VsZCBhbHNvIGluZGljYXRlIHRoYXQgdGhlIHBlci1DUFUKIGxpc3RzIHNob3VsZCBiZSBhIGxhcmdlciBzaXplLiBGaW5hbGx5LCBsYXJnZSBhbW91bnRzIG9mIHJlZmlsbHMgb24gb25lIENQVQpAQCAtMTAyLDYgKzEwMiw2IEBACiAKIExhcmdlIG51bWJlcnMgb2YgdGhpcyBldmVudCBpbXBsaWVzIHRoYXQgbWVtb3J5IGlzIGZyYWdtZW50aW5nIGFuZAogaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB3aWxsIHN0YXJ0IGZhaWxpbmcgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuIE9uZQotbWVhbnMgb2YgcmVkdWNpbmcgdGhlIG9jY3VyYW5nZSBvZiB0aGlzIGV2ZW50IGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCittZWFucyBvZiByZWR1Y2luZyB0aGUgb2NjdXJyZW5jZSBvZiB0aGlzIGV2ZW50IGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCiBtaW5fZnJlZV9rYnl0ZXMgaW4gaW5jcmVtZW50cyBvZiAzKnBhZ2VibG9ja19zaXplKm5yX29ubGluZV9ub2RlcyB3aGVyZQogcGFnZWJsb2NrX3NpemUgaXMgdXN1YWxseSB0aGUgc2l6ZSBvZiB0aGUgZGVmYXVsdCBodWdlcGFnZSBzaXplLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKaW5kZXggNjQxYTFlZi4uMjM5ZjE0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CkBAIC01MywxNCArNTMsMTQgQEAKIEZvciBleGFtcGxlLCBpZiB0aGUgZnVuY3Rpb24gZm9vKCkgY2FsbHMgYmFyKCksIHdoZW4gdGhlIGJhcigpIGZ1bmN0aW9uIGNhbGxzCiBtY291bnQoKSwgdGhlIGFyZ3VtZW50cyBtY291bnQoKSB3aWxsIHBhc3MgdG8gdGhlIHRyYWNlciBhcmU6CiAJImZyb21wYyIgLSB0aGUgYWRkcmVzcyBiYXIoKSB3aWxsIHVzZSB0byByZXR1cm4gdG8gZm9vKCkKLQkic2VsZnBjIiAtIHRoZSBhZGRyZXNzIGJhcigpICh3aXRoIF9tY291bnQoKSBzaXplIGFkanVzdG1lbnQpCisJInNlbGZwYyIgLSB0aGUgYWRkcmVzcyBiYXIoKSAod2l0aCBtY291bnQoKSBzaXplIGFkanVzdG1lbnQpCiAKIEFsc28ga2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBtY291bnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgKmEgbG90Kiwgc28KIG9wdGltaXppbmcgZm9yIHRoZSBkZWZhdWx0IGNhc2Ugb2Ygbm8gdHJhY2VyIHdpbGwgaGVscCB0aGUgc21vb3RoIHJ1bm5pbmcgb2YKIHlvdXIgc3lzdGVtIHdoZW4gdHJhY2luZyBpcyBkaXNhYmxlZC4gIFNvIHRoZSBzdGFydCBvZiB0aGUgbWNvdW50IGZ1bmN0aW9uIGlzCi10eXBpY2FsbHkgdGhlIGJhcmUgbWluIHdpdGggY2hlY2tpbmcgdGhpbmdzIGJlZm9yZSByZXR1cm5pbmcuICBUaGF0IGFsc28gbWVhbnMKLXRoZSBjb2RlIGZsb3cgc2hvdWxkIHVzdWFsbHkga2VwdCBsaW5lYXIgKGkuZS4gbm8gYnJhbmNoaW5nIGluIHRoZSBub3AgY2FzZSkuCi1UaGlzIGlzIG9mIGNvdXJzZSBhbiBvcHRpbWl6YXRpb24gYW5kIG5vdCBhIGhhcmQgcmVxdWlyZW1lbnQuCit0eXBpY2FsbHkgdGhlIGJhcmUgbWluaW11bSB3aXRoIGNoZWNraW5nIHRoaW5ncyBiZWZvcmUgcmV0dXJuaW5nLiAgVGhhdCBhbHNvCittZWFucyB0aGUgY29kZSBmbG93IHNob3VsZCB1c3VhbGx5IGJlIGtlcHQgbGluZWFyIChpLmUuIG5vIGJyYW5jaGluZyBpbiB0aGUgbm9wCitjYXNlKS4gIFRoaXMgaXMgb2YgY291cnNlIGFuIG9wdGltaXphdGlvbiBhbmQgbm90IGEgaGFyZCByZXF1aXJlbWVudC4KIAogSGVyZSBpcyBzb21lIHBzZXVkbyBjb2RlIHRoYXQgc2hvdWxkIGhlbHAgKHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYWN0dWFsbHkgYmUKIGltcGxlbWVudGVkIGluIGFzc2VtYmx5KToKQEAgLTEzMSwxMCArMTMxLDEwIEBACiAKIFRoZSBtY291bnQgZnVuY3Rpb24gc2hvdWxkIGNoZWNrIHRoZSBmdW5jdGlvbiBwb2ludGVycyBmdHJhY2VfZ3JhcGhfcmV0dXJuCiAoY29tcGFyZSB0byBmdHJhY2Vfc3R1YikgYW5kIGZ0cmFjZV9ncmFwaF9lbnRyeSAoY29tcGFyZSB0bwotZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIpLiAgSWYgZWl0aGVyIG9mIHRob3NlIGFyZSBub3Qgc2V0IHRvIHRoZSByZWxldmFudCBzdHViCitmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YikuICBJZiBlaXRoZXIgb2YgdGhvc2UgaXMgbm90IHNldCB0byB0aGUgcmVsZXZhbnQgc3R1YgogZnVuY3Rpb24sIGNhbGwgdGhlIGFyY2gtc3BlY2lmaWMgZnVuY3Rpb24gZnRyYWNlX2dyYXBoX2NhbGxlciB3aGljaCBpbiB0dXJuCiBjYWxscyB0aGUgYXJjaC1zcGVjaWZpYyBmdW5jdGlvbiBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4uICBOZWl0aGVyIG9mIHRoZXNlCi1mdW5jdGlvbiBuYW1lcyBhcmUgc3RyaWN0bHkgcmVxdWlyZWQsIGJ1dCB5b3Ugc2hvdWxkIHVzZSB0aGVtIGFueXdheXMgdG8gc3RheQorZnVuY3Rpb24gbmFtZXMgaXMgc3RyaWN0bHkgcmVxdWlyZWQsIGJ1dCB5b3Ugc2hvdWxkIHVzZSB0aGVtIGFueXdheSB0byBzdGF5CiBjb25zaXN0ZW50IGFjcm9zcyB0aGUgYXJjaGl0ZWN0dXJlIHBvcnRzIC0tIGVhc2llciB0byBjb21wYXJlICYgY29udHJhc3QKIHRoaW5ncy4KIApAQCAtMTQ0LDcgKzE0NCw3IEBACiBsb2NhdGVkIG9uIHRoZSBzdGFjay4gIFRoaXMgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byBoaWphY2sgdGhlIHJldHVybiBhZGRyZXNzCiB0ZW1wb3JhcmlseSB0byBoYXZlIGl0IHBvaW50IHRvIHRoZSBhcmNoLXNwZWNpZmljIGZ1bmN0aW9uIHJldHVybl90b19oYW5kbGVyLgogVGhhdCBmdW5jdGlvbiB3aWxsIHNpbXBseSBjYWxsIHRoZSBjb21tb24gZnRyYWNlX3JldHVybl90b19oYW5kbGVyIGZ1bmN0aW9uIGFuZAotdGhhdCB3aWxsIHJldHVybiB0aGUgb3JpZ2luYWwgcmV0dXJuIGFkZHJlc3Mgd2l0aCB3aGljaCwgeW91IGNhbiByZXR1cm4gdG8gdGhlCit0aGF0IHdpbGwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXR1cm4gYWRkcmVzcyB3aXRoIHdoaWNoIHlvdSBjYW4gcmV0dXJuIHRvIHRoZQogb3JpZ2luYWwgY2FsbCBzaXRlLgogCiBIZXJlIGlzIHRoZSB1cGRhdGVkIG1jb3VudCBwc2V1ZG8gY29kZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvbW1pb3RyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvbW1pb3RyYWNlLnR4dAppbmRleCAxNjJlZmZiLi42NjRlNzM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL21taW90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9tbWlvdHJhY2UudHh0CkBAIC00NCw3ICs0NCw4IEBACiBVc2FnZQogLS0tLS0KIAotTWFrZSBzdXJlIGRlYnVnZnMgaXMgbW91bnRlZCB0byAvc3lzL2tlcm5lbC9kZWJ1Zy4gSWYgbm90LCAocmVxdWlyZXMgcm9vdCBwcml2aWxlZ2VzKQorTWFrZSBzdXJlIGRlYnVnZnMgaXMgbW91bnRlZCB0byAvc3lzL2tlcm5lbC9kZWJ1Zy4KK0lmIG5vdCAocmVxdWlyZXMgcm9vdCBwcml2aWxlZ2VzKToKICQgbW91bnQgLXQgZGVidWdmcyBkZWJ1Z2ZzIC9zeXMva2VybmVsL2RlYnVnCiAKIENoZWNrIHRoYXQgdGhlIGRyaXZlciB5b3UgYXJlIGFib3V0IHRvIHRyYWNlIGlzIG5vdCBsb2FkZWQuCkBAIC05MSw3ICs5Miw3IEBACiAkIHRhciB6Y2YgcGNpaWQtbmljay1tbWlvdHJhY2UudGFyLmd6IG15ZHVtcC50eHQgbHNwY2kudHh0IGRtZXNnLnR4dAogYW5kIHRoZW4gc2VuZCB0aGUgLnRhci5neiBmaWxlLiBUaGUgdHJhY2UgY29tcHJlc3NlcyBjb25zaWRlcmFibHkuIFJlcGxhY2UKICJwY2lpZCIgYW5kICJuaWNrIiB3aXRoIHRoZSBQQ0kgSUQgb3IgbW9kZWwgbmFtZSBvZiB5b3VyIHBpZWNlIG9mIGhhcmR3YXJlCi11bmRlciBpbnZlc3RpZ2F0aW9uIGFuZCB5b3VyIG5pY2sgbmFtZS4KK3VuZGVyIGludmVzdGlnYXRpb24gYW5kIHlvdXIgbmlja25hbWUuCiAKIAogSG93IE1taW90cmFjZSBXb3JrcwpAQCAtMTAwLDcgKzEwMSw3IEBACiBBY2Nlc3MgdG8gaGFyZHdhcmUgSU8tbWVtb3J5IGlzIGdhaW5lZCBieSBtYXBwaW5nIGFkZHJlc3NlcyBmcm9tIFBDSSBidXMgYnkKIGNhbGxpbmcgb25lIG9mIHRoZSBpb3JlbWFwXyooKSBmdW5jdGlvbnMuIE1taW90cmFjZSBpcyBob29rZWQgaW50byB0aGUKIF9faW9yZW1hcCgpIGZ1bmN0aW9uIGFuZCBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIG1hcHBpbmcgaXMgY3JlYXRlZC4gTWFwcGluZyBpcwotYW4gZXZlbnQgdGhhdCBpcyByZWNvcmRlZCBpbnRvIHRoZSB0cmFjZSBsb2cuIE5vdGUsIHRoYXQgSVNBIHJhbmdlIG1hcHBpbmdzCithbiBldmVudCB0aGF0IGlzIHJlY29yZGVkIGludG8gdGhlIHRyYWNlIGxvZy4gTm90ZSB0aGF0IElTQSByYW5nZSBtYXBwaW5ncwogYXJlIG5vdCBjYXVnaHQsIHNpbmNlIHRoZSBtYXBwaW5nIGFsd2F5cyBleGlzdHMgYW5kIGlzIHJldHVybmVkIGRpcmVjdGx5LgogCiBNTUlPIGFjY2Vzc2VzIGFyZSByZWNvcmRlZCB2aWEgcGFnZSBmYXVsdHMuIEp1c3QgYmVmb3JlIF9faW9yZW1hcCgpIHJldHVybnMsCkBAIC0xMjIsMTEgKzEyMywxMSBAQAogLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgcmF3IGxvZyBpcyB0ZXh0IGFuZCBlYXNpbHkgZmlsdGVyZWQgd2l0aCBlLmcuIGdyZXAgYW5kIGF3ay4gT25lIHJlY29yZCBpcwotb25lIGxpbmUgaW4gdGhlIGxvZy4gQSByZWNvcmQgc3RhcnRzIHdpdGggYSBrZXl3b3JkLCBmb2xsb3dlZCBieSBrZXl3b3JkCi1kZXBlbmRhbnQgYXJndW1lbnRzLiBBcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBhIHNwYWNlLCBvciBjb250aW51ZSB1bnRpbCB0aGUKK29uZSBsaW5lIGluIHRoZSBsb2cuIEEgcmVjb3JkIHN0YXJ0cyB3aXRoIGEga2V5d29yZCwgZm9sbG93ZWQgYnkga2V5d29yZC0KK2RlcGVuZGVudCBhcmd1bWVudHMuIEFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGEgc3BhY2UsIG9yIGNvbnRpbnVlIHVudGlsIHRoZQogZW5kIG9mIGxpbmUuIFRoZSBmb3JtYXQgZm9yIHZlcnNpb24gMjAwNzA4MjQgaXMgYXMgZm9sbG93czoKIAotRXhwbGFuYXRpb24JS2V5d29yZAlTcGFjZSBzZXBhcmF0ZWQgYXJndW1lbnRzCitFeHBsYW5hdGlvbglLZXl3b3JkCVNwYWNlLXNlcGFyYXRlZCBhcmd1bWVudHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiByZWFkIGV2ZW50CVIJd2lkdGgsIHRpbWVzdGFtcCwgbWFwIGlkLCBwaHlzaWNhbCwgdmFsdWUsIFBDLCBQSUQKQEAgLTEzNiw3ICsxMzcsNyBAQAogbWFya2VyCQlNQVJLCXRpbWVzdGFtcCwgdGV4dAogdmVyc2lvbgkJVkVSU0lPTgl0aGUgc3RyaW5nICIyMDA3MDgyNCIKIGluZm8gZm9yIHJlYWRlcglMU1BDSQlvbmUgbGluZSBmcm9tIGxzcGNpIC12Ci1QQ0kgYWRkcmVzcyBtYXAJUENJREVWCXNwYWNlIHNlcGFyYXRlZCAvcHJvYy9idXMvcGNpL2RldmljZXMgZGF0YQorUENJIGFkZHJlc3MgbWFwCVBDSURFVglzcGFjZS1zZXBhcmF0ZWQgL3Byb2MvYnVzL3BjaS9kZXZpY2VzIGRhdGEKIHVuay4gb3Bjb2RlCVVOS05PV04JdGltZXN0YW1wLCBtYXAgaWQsIHBoeXNpY2FsLCBkYXRhLCBQQywgUElECiAKIFRpbWVzdGFtcCBpcyBpbiBzZWNvbmRzIHdpdGggZGVjaW1hbHMuIFBoeXNpY2FsIGlzIGEgUENJIGJ1cyBhZGRyZXNzLCB2aXJ0dWFsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3RyYWNlcG9pbnQtYW5hbHlzaXMudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS90cmFjZXBvaW50LWFuYWx5c2lzLnR4dAppbmRleCA1ZWI0ZTQ4Ny4uODdiZWUzYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS90cmFjZXBvaW50LWFuYWx5c2lzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL3RyYWNlcG9pbnQtYW5hbHlzaXMudHh0CkBAIC0xMCw4ICsxMCw4IEBACiBjcmVhdGluZyBjdXN0b20ga2VybmVsIG1vZHVsZXMgdG8gcmVnaXN0ZXIgcHJvYmUgZnVuY3Rpb25zIHVzaW5nIHRoZSBldmVudAogdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4KIAotU2ltcGxpc3RpY2FsbHksIHRyYWNlcG9pbnRzIHdpbGwgcmVwcmVzZW50IGFuIGltcG9ydGFudCBldmVudCB0aGF0IHdoZW4gY2FuCi1iZSB0YWtlbiBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIHRyYWNlcG9pbnRzIHRvIGJ1aWxkIGEgIkJpZyBQaWN0dXJlIiBvZgorU2ltcGxpc3RpY2FsbHksIHRyYWNlcG9pbnRzIHJlcHJlc2VudCBpbXBvcnRhbnQgZXZlbnRzIHRoYXQgY2FuIGJlCit0YWtlbiBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIHRyYWNlcG9pbnRzIHRvIGJ1aWxkIGEgIkJpZyBQaWN0dXJlIiBvZgogd2hhdCBpcyBnb2luZyBvbiB3aXRoaW4gdGhlIHN5c3RlbS4gVGhlcmUgYXJlIGEgbGFyZ2UgbnVtYmVyIG9mIG1ldGhvZHMgZm9yCiBnYXRoZXJpbmcgYW5kIGludGVycHJldGluZyB0aGVzZSBldmVudHMuIExhY2tpbmcgYW55IGN1cnJlbnQgQmVzdCBQcmFjdGlzZXMsCiB0aGlzIGRvY3VtZW50IGRlc2NyaWJlcyBzb21lIG9mIHRoZSBtZXRob2RzIHRoYXQgY2FuIGJlIHVzZWQuCkBAIC0zMywxMiArMzMsMTIgQEAKIAogd2lsbCBnaXZlIGEgZmFpciBpbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgZXZlbnRzIGF2YWlsYWJsZS4KIAotMi4yIFBDTAorMi4yIFBDTCAoUGVyZm9ybWFuY2UgQ291bnRlcnMgZm9yIExpbnV4KQogLS0tLS0tLQogCi1EaXNjb3ZlcnkgYW5kIGVudW1lcmF0aW9uIG9mIGFsbCBjb3VudGVycyBhbmQgZXZlbnRzLCBpbmNsdWRpbmcgdHJhY2Vwb2ludHMKK0Rpc2NvdmVyeSBhbmQgZW51bWVyYXRpb24gb2YgYWxsIGNvdW50ZXJzIGFuZCBldmVudHMsIGluY2x1ZGluZyB0cmFjZXBvaW50cywKIGFyZSBhdmFpbGFibGUgd2l0aCB0aGUgcGVyZiB0b29sLiBHZXR0aW5nIGEgbGlzdCBvZiBhdmFpbGFibGUgZXZlbnRzIGlzIGEKLXNpbXBsZSBjYXNlIG9mCitzaW1wbGUgY2FzZSBvZjoKIAogICAkIHBlcmYgbGlzdCAyPiYxIHwgZ3JlcCBUcmFjZXBvaW50CiAgIGV4dDQ6ZXh0NF9mcmVlX2lub2RlICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCkBAIC00OSwxOSArNDksMTkgQEAKICAgWyAuLi4uIHJlbWFpbmluZyBvdXRwdXQgc25pcHBlZCAuLi4uIF0KIAogCi0yLiBFbmFibGluZyBFdmVudHMKKzMuIEVuYWJsaW5nIEV2ZW50cwogPT09PT09PT09PT09PT09PT09CiAKLTIuMSBTeXN0ZW0tV2lkZSBFdmVudCBFbmFibGluZworMy4xIFN5c3RlbS1XaWRlIEV2ZW50IEVuYWJsaW5nCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dCBmb3IgYSBwcm9wZXIgZGVzY3JpcHRpb24gb24gaG93IGV2ZW50cwogY2FuIGJlIGVuYWJsZWQgc3lzdGVtLXdpZGUuIEEgc2hvcnQgZXhhbXBsZSBvZiBlbmFibGluZyBhbGwgZXZlbnRzIHJlbGF0ZWQKLXRvIHBhZ2UgYWxsb2NhdGlvbiB3b3VsZCBsb29rIHNvbWV0aGluZyBsaWtlCit0byBwYWdlIGFsbG9jYXRpb24gd291bGQgbG9vayBzb21ldGhpbmcgbGlrZToKIAogICAkIGZvciBpIGluIGBmaW5kIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzIC1uYW1lICJlbmFibGUiIHwgZ3JlcCBtbV9gOyBkbyBlY2hvIDEgPiAkaTsgZG9uZQogCi0yLjIgU3lzdGVtLVdpZGUgRXZlbnQgRW5hYmxpbmcgd2l0aCBTeXN0ZW1UYXAKKzMuMiBTeXN0ZW0tV2lkZSBFdmVudCBFbmFibGluZyB3aXRoIFN5c3RlbVRhcAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEluIFN5c3RlbVRhcCwgdHJhY2Vwb2ludHMgYXJlIGFjY2Vzc2libGUgdXNpbmcgdGhlIGtlcm5lbC50cmFjZSgpIGZ1bmN0aW9uCkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgICAgcHJpbnRfY291bnQoKQogICB9CiAKLTIuMyBTeXN0ZW0tV2lkZSBFdmVudCBFbmFibGluZyB3aXRoIFBDTAorMy4zIFN5c3RlbS1XaWRlIEV2ZW50IEVuYWJsaW5nIHdpdGggUENMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQnkgc3BlY2lmeWluZyB0aGUgLWEgc3dpdGNoIGFuZCBhbmFseXNpbmcgc2xlZXAsIHRoZSBzeXN0ZW0td2lkZSBldmVudHMKQEAgLTEwNywxNiArMTA3LDE2IEBACiBTaW1pbGFybHksIG9uZSBjb3VsZCBleGVjdXRlIGEgc2hlbGwgYW5kIGV4aXQgaXQgYXMgZGVzaXJlZCB0byBnZXQgYSByZXBvcnQKIGF0IHRoYXQgcG9pbnQuCiAKLTIuNCBMb2NhbCBFdmVudCBFbmFibGluZworMy40IExvY2FsIEV2ZW50IEVuYWJsaW5nCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGRlc2NyaWJlcyBob3cgdG8gZW5hYmxlIGV2ZW50cyBvbiBhIHBlci10aHJlYWQKIGJhc2lzIHVzaW5nIHNldF9mdHJhY2VfcGlkLgogCi0yLjUgTG9jYWwgRXZlbnQgRW5hYmxlbWVudCB3aXRoIFBDTAorMy41IExvY2FsIEV2ZW50IEVuYWJsZW1lbnQgd2l0aCBQQ0wKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUV2ZW50cyBjYW4gYmUgYWN0aXZhdGUgYW5kIHRyYWNrZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIHByb2Nlc3Mgb24gYSBsb2NhbAorRXZlbnRzIGNhbiBiZSBhY3RpdmF0ZWQgYW5kIHRyYWNrZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIHByb2Nlc3Mgb24gYSBsb2NhbAogYmFzaXMgdXNpbmcgUENMIHN1Y2ggYXMgZm9sbG93cy4KIAogICAkIHBlcmYgc3RhdCAtZSBrbWVtOm1tX3BhZ2VfYWxsb2MgLWUga21lbTptbV9wYWdlX2ZyZWVfZGlyZWN0IFwKQEAgLTEzMSwxOCArMTMxLDE4IEBACiAKICAgICAwLjk3MzkxMzM4NyAgc2Vjb25kcyB0aW1lIGVsYXBzZWQKIAotMy4gRXZlbnQgRmlsdGVyaW5nCis0LiBFdmVudCBGaWx0ZXJpbmcKID09PT09PT09PT09PT09PT09PQogCiBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQgY292ZXJzIGluLWRlcHRoIGhvdyB0byBmaWx0ZXIgZXZlbnRzIGluCiBmdHJhY2UuICBPYnZpb3VzbHkgdXNpbmcgZ3JlcCBhbmQgYXdrIG9mIHRyYWNlX3BpcGUgaXMgYW4gb3B0aW9uIGFzIHdlbGwKIGFzIGFueSBzY3JpcHQgcmVhZGluZyB0cmFjZV9waXBlLgogCi00LiBBbmFseXNpbmcgRXZlbnQgVmFyaWFuY2VzIHdpdGggUENMCis1LiBBbmFseXNpbmcgRXZlbnQgVmFyaWFuY2VzIHdpdGggUENMCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEFueSB3b3JrbG9hZCBjYW4gZXhoaWJpdCB2YXJpYW5jZXMgYmV0d2VlbiBydW5zIGFuZCBpdCBjYW4gYmUgaW1wb3J0YW50Ci10byBrbm93IHdoYXQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBpbi4gQnkgYW5kIGxhcmdlLCB0aGlzIGlzIGxlZnQgdG8gdGhlCit0byBrbm93IHdoYXQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBpcy4gQnkgYW5kIGxhcmdlLCB0aGlzIGlzIGxlZnQgdG8gdGhlCiBwZXJmb3JtYW5jZSBhbmFseXN0IHRvIGRvIGl0IGJ5IGhhbmQuIEluIHRoZSBldmVudCB0aGF0IHRoZSBkaXNjcmV0ZSBldmVudAogb2NjdXJyZW5jZXMgYXJlIHVzZWZ1bCB0byB0aGUgcGVyZm9ybWFuY2UgYW5hbHlzdCwgdGhlbiBwZXJmIGNhbiBiZSB1c2VkLgogCkBAIC0xNjYsNyArMTY2LDcgQEAKIGFnZ3JlZ2F0aW9uIG9mIGRpc2NyZXRlIGV2ZW50cywgdGhlbiBhIHNjcmlwdCB3b3VsZCBuZWVkIHRvIGJlIGRldmVsb3BlZC4KIAogVXNpbmcgLS1yZXBlYXQsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gdmlldyBob3cgZXZlbnRzIGFyZSBmbHVjdHVhdGluZyBvdmVyCi10aW1lIG9uIGEgc3lzdGVtIHdpZGUgYmFzaXMgdXNpbmcgLWEgYW5kIHNsZWVwLgordGltZSBvbiBhIHN5c3RlbS13aWRlIGJhc2lzIHVzaW5nIC1hIGFuZCBzbGVlcC4KIAogICAkIHBlcmYgc3RhdCAtZSBrbWVtOm1tX3BhZ2VfYWxsb2MgLWUga21lbTptbV9wYWdlX2ZyZWVfZGlyZWN0IFwKIAkJLWUga21lbTptbV9wYWdldmVjX2ZyZWUgXApAQCAtMTgwLDcgKzE4MCw3IEBACiAKICAgICAxLjAwMjI1MTc1NyAgc2Vjb25kcyB0aW1lIGVsYXBzZWQgICAoICstICAgMC4wMDUlICkKIAotNS4gSGlnaGVyLUxldmVsIEFuYWx5c2lzIHdpdGggSGVscGVyIFNjcmlwdHMKKzYuIEhpZ2hlci1MZXZlbCBBbmFseXNpcyB3aXRoIEhlbHBlciBTY3JpcHRzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBXaGVuIGV2ZW50cyBhcmUgZW5hYmxlZCB0aGUgZXZlbnRzIHRoYXQgYXJlIHRyaWdnZXJpbmcgY2FuIGJlIHJlYWQgZnJvbQpAQCAtMTkwLDExICsxOTAsMTEgQEAKIAogICBvIFJlYWRpbmcgaW5mb3JtYXRpb24gZnJvbSAvcHJvYyBmb3IgdGhlIFBJRCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQKICAgbyBEZXJpdmluZyBhIGhpZ2hlci1sZXZlbCBldmVudCBmcm9tIGEgc2VyaWVzIG9mIGxvd2VyLWxldmVsIGV2ZW50cy4KLSAgbyBDYWxjdWxhdGUgbGF0ZW5jaWVzIGJldHdlZW4gdHdvIGV2ZW50cworICBvIENhbGN1bGF0aW5nIGxhdGVuY2llcyBiZXR3ZWVuIHR3byBldmVudHMKIAogRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS1wYWdlYWxsb2MtcG9zdHByb2Nlc3MucGwgaXMgYW4gZXhhbXBsZQogc2NyaXB0IHRoYXQgY2FuIHJlYWQgdHJhY2VfcGlwZSBmcm9tIFNURElOIG9yIGEgY29weSBvZiBhIHRyYWNlLiBXaGVuIHVzZWQKLW9uLWxpbmUsIGl0IGNhbiBiZSBpbnRlcnJ1cHRlZCBvbmNlIHRvIGdlbmVyYXRlIGEgcmVwb3J0IHdpdGhvdXQgZXhpc3RpbmcKK29uLWxpbmUsIGl0IGNhbiBiZSBpbnRlcnJ1cHRlZCBvbmNlIHRvIGdlbmVyYXRlIGEgcmVwb3J0IHdpdGhvdXQgZXhpdGluZwogYW5kIHR3aWNlIHRvIGV4aXQuCiAKIFNpbXBsaXN0aWNhbGx5LCB0aGUgc2NyaXB0IGp1c3QgcmVhZHMgU1RESU4gYW5kIGNvdW50cyB1cCBldmVudHMgYnV0IGl0CkBAIC0yMTIsMTIgKzIxMiwxMiBAQAogICAgIHByb2Nlc3NlcywgdGhlIHBhcmVudCBwcm9jZXNzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbGwgdGhlIGhlbHBlcnMKICAgICBjYW4gYmUgaWRlbnRpZmllZAogCi02LiBMb3dlci1MZXZlbCBBbmFseXNpcyB3aXRoIFBDTAorNy4gTG93ZXItTGV2ZWwgQW5hbHlzaXMgd2l0aCBQQ0wKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZXJlIG1heSBhbHNvIGJlIGEgcmVxdWlyZW1lbnQgdG8gaWRlbnRpZnkgd2hhdCBmdW5jdGlvbnMgd2l0aCBhIHByb2dyYW0KK1RoZXJlIG1heSBhbHNvIGJlIGEgcmVxdWlyZW1lbnQgdG8gaWRlbnRpZnkgd2hhdCBmdW5jdGlvbnMgd2l0aGluIGEgcHJvZ3JhbQogd2VyZSBnZW5lcmF0aW5nIGV2ZW50cyB3aXRoaW4gdGhlIGtlcm5lbC4gVG8gYmVnaW4gdGhpcyBzb3J0IG9mIGFuYWx5c2lzLCB0aGUKLWRhdGEgbXVzdCBiZSByZWNvcmRlZC4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhpcyByZXF1aXJlZCByb290CitkYXRhIG11c3QgYmUgcmVjb3JkZWQuIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgcmVxdWlyZWQgcm9vdDoKIAogICAkIHBlcmYgcmVjb3JkIC1jIDEgXAogCS1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXApAQCAtMjUzLDExICsyNTMsMTEgQEAKICAgIyAoRm9yIG1vcmUgZGV0YWlscywgdHJ5OiBwZXJmIHJlcG9ydCAtLXNvcnQgY29tbSxkc28sc3ltYm9sKQogICAjCiAKLUFjY29yZGluZyB0byB0aGlzLCB0aGUgdmFzdCBtYWpvcml0eSBvZiBldmVudHMgb2NjdXJlZCB0cmlnZ2VyZWQgb24gZXZlbnRzCi13aXRoaW4gdGhlIFZEU08uIFdpdGggc2ltcGxlIGJpbmFyaWVzLCB0aGlzIHdpbGwgb2Z0ZW4gYmUgdGhlIGNhc2Ugc28gbGV0cworQWNjb3JkaW5nIHRvIHRoaXMsIHRoZSB2YXN0IG1ham9yaXR5IG9mIGV2ZW50cyB0cmlnZ2VyZWQgb24gZXZlbnRzCit3aXRoaW4gdGhlIFZEU08uIFdpdGggc2ltcGxlIGJpbmFyaWVzLCB0aGlzIHdpbGwgb2Z0ZW4gYmUgdGhlIGNhc2Ugc28gbGV0J3MKIHRha2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZXhhbXBsZS4gSW4gdGhlIGNvdXJzZSBvZiB3cml0aW5nIHRoaXMsIGl0IHdhcwotbm90aWNlZCB0aGF0IFggd2FzIGdlbmVyYXRpbmcgYW4gaW5zYW5lIGFtb3VudCBvZiBwYWdlIGFsbG9jYXRpb25zIHNvIGxldHMgbG9vawotYXQgaXQKK25vdGljZWQgdGhhdCBYIHdhcyBnZW5lcmF0aW5nIGFuIGluc2FuZSBhbW91bnQgb2YgcGFnZSBhbGxvY2F0aW9ucyBzbyBsZXQncyBsb29rCithdCBpdDoKIAogICAkIHBlcmYgcmVjb3JkIC1jIDEgLWYgXAogCQktZSBrbWVtOm1tX3BhZ2VfYWxsb2MgLWUga21lbTptbV9wYWdlX2ZyZWVfZGlyZWN0IFwKQEAgLTI4MCw4ICsyODAsOCBAQAogICAjIChGb3IgbW9yZSBkZXRhaWxzLCB0cnk6IHBlcmYgcmVwb3J0IC0tc29ydCBjb21tLGRzbyxzeW1ib2wpCiAgICMKIAotU28sIGFsbW9zdCBoYWxmIG9mIHRoZSBldmVudHMgYXJlIG9jY3VyaW5nIGluIGEgbGlicmFyeS4gVG8gZ2V0IGFuIGlkZWEgd2hpY2gKLXN5bWJvbC4KK1NvLCBhbG1vc3QgaGFsZiBvZiB0aGUgZXZlbnRzIGFyZSBvY2N1cnJpbmcgaW4gYSBsaWJyYXJ5LiBUbyBnZXQgYW4gaWRlYSB3aGljaAorc3ltYm9sOgogCiAgICQgcGVyZiByZXBvcnQgLS1zb3J0IGNvbW0sZHNvLHN5bWJvbAogICAjIFNhbXBsZXM6IDI3NjY2CkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgICAwLjAxJSAgICAgWG9yZyAgL29wdC9nZngtdGVzdC9saWIvbGlicGl4bWFuLTEuc28uMC4xMy4xICBbLl0gZ2V0X2Zhc3RfcGF0aAogICAgICAgIDAuMDAlICAgICBYb3JnICBba2VybmVsXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrXSBmdHJhY2VfdHJhY2VfdXNlcnN0YWNrCiAKLVRvIHNlZSB3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIHBpeG1hbkZpbGxzc2UyIHRoaW5ncyBhcmUgZ29pbmcgd3JvbmcKK1RvIHNlZSB3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIHBpeG1hbkZpbGxzc2UyIHRoaW5ncyBhcmUgZ29pbmcgd3Jvbmc6CiAKICAgJCBwZXJmIGFubm90YXRlIHBpeG1hbkZpbGxzc2UyCiAgIFsgLi4uIF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKaW5kZXggYzdjMWRjMi4uM2JmNjgxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKQEAgLTcxLDEyICs3MSwxMCBAQAogCUZvcm1zIG9mIGR5bmFtaWMgUE0KIAktLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUR5bmFtaWMgc3VzcGVuZHMgY2FuIG9jY3VyIGluIHR3byB3YXlzOiBtYW51YWwgYW5kIGF1dG9tYXRpYy4KLSJNYW51YWwiIG1lYW5zIHRoYXQgdGhlIHVzZXIgaGFzIHRvbGQgdGhlIGtlcm5lbCB0byBzdXNwZW5kIGEgZGV2aWNlLAotd2hlcmVhcyAiYXV0b21hdGljIiBtZWFucyB0aGF0IHRoZSBrZXJuZWwgaGFzIGRlY2lkZWQgYWxsIGJ5IGl0c2VsZiB0bwotc3VzcGVuZCBhIGRldmljZS4gIEF1dG9tYXRpYyBzdXNwZW5kIGlzIGNhbGxlZCAiYXV0b3N1c3BlbmQiIGZvcgotc2hvcnQuICBJbiBnZW5lcmFsLCBhIGRldmljZSB3b24ndCBiZSBhdXRvc3VzcGVuZGVkIHVubGVzcyBpdCBoYXMgYmVlbgotaWRsZSBmb3Igc29tZSBtaW5pbXVtIHBlcmlvZCBvZiB0aW1lLCB0aGUgc28tY2FsbGVkIGlkbGUtZGVsYXkgdGltZS4KK0R5bmFtaWMgc3VzcGVuZHMgb2NjdXIgd2hlbiB0aGUga2VybmVsIGRlY2lkZXMgdG8gc3VzcGVuZCBhbiBpZGxlCitkZXZpY2UuICBUaGlzIGlzIGNhbGxlZCAiYXV0b3N1c3BlbmQiIGZvciBzaG9ydC4gIEluIGdlbmVyYWwsIGEgZGV2aWNlCit3b24ndCBiZSBhdXRvc3VzcGVuZGVkIHVubGVzcyBpdCBoYXMgYmVlbiBpZGxlIGZvciBzb21lIG1pbmltdW0gcGVyaW9kCitvZiB0aW1lLCB0aGUgc28tY2FsbGVkIGlkbGUtZGVsYXkgdGltZS4KIAogT2YgY291cnNlLCBub3RoaW5nIHRoZSBrZXJuZWwgZG9lcyBvbiBpdHMgb3duIGluaXRpYXRpdmUgc2hvdWxkCiBwcmV2ZW50IHRoZSBjb21wdXRlciBvciBpdHMgZGV2aWNlcyBmcm9tIHdvcmtpbmcgcHJvcGVybHkuICBJZiBhCkBAIC05NiwxMCArOTQsMTEgQEAKIFdlIGNhbiBjYXRlZ29yaXplIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGluIHR3byBicm9hZCBjbGFzc2VzOgogZXh0ZXJuYWwgYW5kIGludGVybmFsLiAgRXh0ZXJuYWwgZXZlbnRzIGFyZSB0aG9zZSB0cmlnZ2VyZWQgYnkgc29tZQogYWdlbnQgb3V0c2lkZSB0aGUgVVNCIHN0YWNrOiBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgKHRyaWdnZXJlZCBieQotdXNlcnNwYWNlKSwgbWFudWFsIGR5bmFtaWMgc3VzcGVuZC9yZXN1bWUgKGFsc28gdHJpZ2dlcmVkIGJ5Ci11c2Vyc3BhY2UpLCBhbmQgcmVtb3RlIHdha2V1cCAodHJpZ2dlcmVkIGJ5IHRoZSBkZXZpY2UpLiAgSW50ZXJuYWwKLWV2ZW50cyBhcmUgdGhvc2UgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgVVNCIHN0YWNrOiBhdXRvc3VzcGVuZCBhbmQKLWF1dG9yZXN1bWUuCit1c2Vyc3BhY2UpLCBtYW51YWwgZHluYW1pYyByZXN1bWUgKGFsc28gdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSksIGFuZAorcmVtb3RlIHdha2V1cCAodHJpZ2dlcmVkIGJ5IHRoZSBkZXZpY2UpLiAgSW50ZXJuYWwgZXZlbnRzIGFyZSB0aG9zZQordHJpZ2dlcmVkIHdpdGhpbiB0aGUgVVNCIHN0YWNrOiBhdXRvc3VzcGVuZCBhbmQgYXV0b3Jlc3VtZS4gIE5vdGUgdGhhdAorYWxsIGR5bmFtaWMgc3VzcGVuZCBldmVudHMgYXJlIGludGVybmFsOyBleHRlcm5hbCBhZ2VudHMgYXJlIG5vdAorYWxsb3dlZCB0byBpc3N1ZSBkeW5hbWljIHN1c3BlbmRzLgogCiAKIAlUaGUgdXNlciBpbnRlcmZhY2UgZm9yIGR5bmFtaWMgUE0KQEAgLTE0NSw5ICsxNDQsOSBAQAogCQludW1iZXIgb2Ygc2Vjb25kcyB0aGUgZGV2aWNlIHNob3VsZCByZW1haW4gaWRsZSBiZWZvcmUKIAkJdGhlIGtlcm5lbCB3aWxsIGF1dG9zdXNwZW5kIGl0ICh0aGUgaWRsZS1kZWxheSB0aW1lKS4KIAkJVGhlIGRlZmF1bHQgaXMgMi4gIDAgbWVhbnMgdG8gYXV0b3N1c3BlbmQgYXMgc29vbiBhcwotCQl0aGUgZGV2aWNlIGJlY29tZXMgaWRsZSwgYW5kIC0xIG1lYW5zIG5ldmVyIHRvCi0JCWF1dG9zdXNwZW5kLiAgWW91IGNhbiB3cml0ZSBhIG51bWJlciB0byB0aGUgZmlsZSB0bwotCQljaGFuZ2UgdGhlIGF1dG9zdXNwZW5kIGlkbGUtZGVsYXkgdGltZS4KKwkJdGhlIGRldmljZSBiZWNvbWVzIGlkbGUsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgbWVhbgorCQluZXZlciB0byBhdXRvc3VzcGVuZC4gIFlvdSBjYW4gd3JpdGUgYSBudW1iZXIgdG8gdGhlCisJCWZpbGUgdG8gY2hhbmdlIHRoZSBhdXRvc3VzcGVuZCBpZGxlLWRlbGF5IHRpbWUuCiAKIFdyaXRpbmcgIi0xIiB0byBwb3dlci9hdXRvc3VzcGVuZCBhbmQgd3JpdGluZyAib24iIHRvIHBvd2VyL2xldmVsIGRvCiBlc3NlbnRpYWxseSB0aGUgc2FtZSB0aGluZyAtLSB0aGV5IGJvdGggcHJldmVudCB0aGUgZGV2aWNlIGZyb20gYmVpbmcKQEAgLTM3Nyw5ICszNzYsOSBAQAogcm91dGluZSBpcyBhdXRvbWF0aWNhbGx5IHNldCB1cCB0byBjYXJyeSBvdXQgdGhlIG9wZXJhdGlvbiB3aGVuIHRoZQogYXV0b3N1c3BlbmQgaWRsZS1kZWxheSBoYXMgZXhwaXJlZC4KIAotQXV0b3Jlc3VtZSBhdHRlbXB0cyBhbHNvIGNhbiBmYWlsLiAgVGhpcyB3aWxsIGhhcHBlbiBpZiBwb3dlci9sZXZlbCBpcwotc2V0IHRvICJzdXNwZW5kIiBvciBpZiB0aGUgZGV2aWNlIGRvZXNuJ3QgbWFuYWdlIHRvIHJlc3VtZSBwcm9wZXJseS4KLVVubGlrZSBhdXRvc3VzcGVuZCwgdGhlcmUncyBubyBkZWxheSBmb3IgYW4gYXV0b3Jlc3VtZS4KK0F1dG9yZXN1bWUgYXR0ZW1wdHMgYWxzbyBjYW4gZmFpbCwgYWx0aG91Z2ggZmFpbHVyZSB3b3VsZCBtZWFuIHRoYXQKK3RoZSBkZXZpY2UgaXMgbm8gbG9uZ2VyIHByZXNlbnQgb3Igb3BlcmF0aW5nIHByb3Blcmx5LiAgVW5saWtlCithdXRvc3VzcGVuZCwgdGhlcmUncyBubyBkZWxheSBmb3IgYW4gYXV0b3Jlc3VtZS4KIAogCiAJT3RoZXIgcGFydHMgb2YgdGhlIGRyaXZlciBpbnRlcmZhY2UKQEAgLTUyNywxMyArNTI2LDMgQEAKIHJlc3VtZSBhcyBzb29uIGFzIHRoZSBzeXN0ZW0gc3VzcGVuZCBpcyBjb21wbGV0ZS4gIE9yIHRoZSByZW1vdGUKIHdha2V1cCBtYXkgZmFpbCBhbmQgZ2V0IGxvc3QuICBXaGljaCBvdXRjb21lIG9jY3VycyBkZXBlbmRzIG9uIHRpbWluZwogYW5kIG9uIHRoZSBoYXJkd2FyZSBhbmQgZmlybXdhcmUgZGVzaWduLgotCi1Nb3JlIGludGVyZXN0aW5nbHksIGEgZGV2aWNlIG1pZ2h0IHVuZGVyZ28gYSBtYW51YWwgcmVzdW1lIG9yCi1hdXRvcmVzdW1lIGR1cmluZyBzeXN0ZW0gc3VzcGVuZC4gIFdpdGggY3VycmVudCBrZXJuZWxzIHRoaXMgc2hvdWxkbid0Ci1oYXBwZW4sIGJlY2F1c2UgbWFudWFsIHJlc3VtZXMgbXVzdCBiZSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGFuZAotYXV0b3Jlc3VtZXMgaGFwcGVuIGluIHJlc3BvbnNlIHRvIEkvTyByZXF1ZXN0cywgYnV0IGFsbCB1c2VyIHByb2Nlc3NlcwotYW5kIEkvTyBzaG91bGQgYmUgcXVpZXNjZW50IGR1cmluZyBhIHN5c3RlbSBzdXNwZW5kIC0tIHRoYW5rcyB0byB0aGUKLWZyZWV6ZXIuICBIb3dldmVyIHRoZXJlIGFyZSBwbGFucyB0byBkbyBhd2F5IHdpdGggdGhlIGZyZWV6ZXIsIHdoaWNoCi13b3VsZCBtZWFuIHRoZXNlIHRoaW5ncyB3b3VsZCBiZWNvbWUgcG9zc2libGUuICBJZiBhbmQgd2hlbiB0aGlzIGNvbWVzCi1hYm91dCwgdGhlIFVTQiBjb3JlIHdpbGwgY2FyZWZ1bGx5IGFycmFuZ2UgbWF0dGVycyBzbyB0aGF0IGVpdGhlciB0eXBlCi1vZiByZXN1bWUgd2lsbCBibG9jayB1bnRpbCB0aGUgZW50aXJlIHN5c3RlbSBoYXMgcmVzdW1lZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmdhYXJiaXRlci50eHQgYi9Eb2N1bWVudGF0aW9uL3ZnYWFyYml0ZXIudHh0CmluZGV4IDk4N2Y5YjAuLjQzYTliMDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmdhYXJiaXRlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92Z2FhcmJpdGVyLnR4dApAQCAtMTAzLDcgKzEwMyw3IEBACiAtLS0tLS0tLS0tLS0tLS0tCiAKIFRvIHVzZSB0aGUgdmdhIGFyYml0ZXIgY2hhciBkZXZpY2UgaXQgd2FzIGltcGxlbWVudGVkIGFuIEFQSSBpbnNpZGUgdGhlCi1saWJwY2lhY2Nlc3MgbGlicmFyeS4gT25lIGZpZWxkZCB3YXMgYWRkZWQgdG8gc3RydWN0IHBjaV9kZXZpY2UgKGVhY2ggZGV2aWNlCitsaWJwY2lhY2Nlc3MgbGlicmFyeS4gT25lIGZpZWxkIHdhcyBhZGRlZCB0byBzdHJ1Y3QgcGNpX2RldmljZSAoZWFjaCBkZXZpY2UKIG9uIHRoZSBzeXN0ZW0pOgogCiAgICAgLyogdGhlIHR5cGUgb2YgcmVzb3VyY2UgZGVjb2RlZCBieSB0aGUgZGV2aWNlICovCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGVmZDJlZjIuLjY5MTQ1ODggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNDAyLDYgKzE0MDIsOCBAQAogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL3VzYi9XVVNCLURlc2lnbi1vdmVydmlldy50eHQKIEY6CURvY3VtZW50YXRpb24vdXNiL3d1c2ItY2JhZgorRjoJZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYworRjoJZHJpdmVycy91c2IvaG9zdC93aGNpLwogRjoJZHJpdmVycy91c2Ivd3VzYmNvcmUvCiBGOglpbmNsdWRlL2xpbnV4L3VzYi93dXNiKgogCkBAIC0xNDcwLDYgKzE0NzIsMTIgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9zY3NpL2ZuaWMvCiAKK0NNUEMgQUNQSSBEUklWRVIKK006CVRoYWRldSBMaW1hIGRlIFNvdXphIENhc2NhcmRvIDxjYXNjYXJkb0Bob2xvc2NvcGlvLmNvbT4KK006CURhbmllbCBPbGl2ZWlyYSBOYXNjaW1lbnRvIDxkb25Ac3lzdC5jb20uYnI+CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYworCiBDT0RBIEZJTEUgU1lTVEVNCiBNOglKYW4gSGFya2VzIDxqYWhhcmtlc0Bjcy5jbXUuZWR1PgogTToJY29kYUBjcy5jbXUuZWR1CkBAIC0yMTYxLDEwICsyMTY5LDkgQEAKIEY6CWluY2x1ZGUvbGludXgvZjc1Mzc1cy5oCiAKIEZJUkVXSVJFIFNVQlNZU1RFTQotTToJS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KIE06CVN0ZWZhbiBSaWNodGVyIDxzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlPgogTDoJbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL3d3dy5saW51eDEzOTQub3JnLworVzoJaHR0cDovL2llZWUxMzk0Lndpa2kua2VybmVsLm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZmlyZXdpcmUvCkBAIC0yNjk3LDIyICsyNzA0LDE0IEBACiBGOglkcml2ZXJzL2lkbGUvaTczMDBfaWRsZS5jCiAKIElFRUUgMTM5NCBTVUJTWVNURU0KLU06CUJlbiBDb2xsaW5zIDxiZW4uY29sbGluc0B1YnVudHUuY29tPgogTToJU3RlZmFuIFJpY2h0ZXIgPHN0ZWZhbnJAczVyNi5pbi1iZXJsaW4uZGU+CiBMOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1XOglodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCitXOglodHRwOi8vaWVlZTEzOTQud2lraS5rZXJuZWwub3JnLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9pZWVlMTM5NC9saW51eDEzOTQtMi42LmdpdAotUzoJTWFpbnRhaW5lZAorUzoJT2Jzb2xldGUKIEY6CURvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKIEY6CWRyaXZlcnMvaWVlZTEzOTQvCiAKLUlFRUUgMTM5NCBSQVcgSS9PIERSSVZFUgotTToJRGFuIERlbm5lZHkgPGRhbkBkZW5uZWR5Lm9yZz4KLU06CVN0ZWZhbiBSaWNodGVyIDxzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlPgotTDoJbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0KgotCiBJRUVFIDgwMi4xNS40IFNVQlNZU1RFTQogTToJRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgogTToJU2VyZ2V5IExhcGluIDxzbGFwaW5Ab3NzZmFucy5vcmc+CkBAIC0zNjQ0LDYgKzM2NDMsMTEgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L21zaS1sYXB0b3AuYwogCitNU0kgV01JIFNVUFBPUlQKK006CUFuaXNzZSBBc3RpZXIgPGFuaXNzZUBhc3RpZXIuZXU+CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYworCiBNVUxUSUZVTkNUSU9OIERFVklDRVMgKE1GRCkKIE06CVNhbXVlbCBPcnRpeiA8c2FtZW9AbGludXguaW50ZWwuY29tPgogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zYW1lby9tZmQtMi42LmdpdApAQCAtMzY3Nyw3ICszNjgxLDcgQEAKIE1VU0IgTVVMVElQT0lOVCBISUdIIFNQRUVEIERVQUwtUk9MRSBDT05UUk9MTEVSCiBNOglGZWxpcGUgQmFsYmkgPGZlbGlwZS5iYWxiaUBub2tpYS5jb20+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCi1UOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9tdXNiL21haW5saW5lLmdpdAorVDoJZ2l0IGdpdDovL2dpdG9yaW91cy5vcmcvdXNiL3VzYi5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdXNiL211c2IvCiAKQEAgLTM4NjksNyArMzg3Myw3IEBACiAKIE5JTEZTMiBGSUxFU1lTVEVNCiBNOglLT05JU0hJIFJ5dXN1a2UgPGtvbmlzaGkucnl1c3VrZUBsYWIubnR0LmNvLmpwPgotTDoJdXNlcnNAbmlsZnMub3JnCitMOglsaW51eC1uaWxmc0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubmlsZnMub3JnL2VuLwogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25pbGZzMi50eHQKQEAgLTU0MzAsNyArNTQzNCwxMCBAQAogTToJRGF2aWQgVnJhYmVsIDxkYXZpZC52cmFiZWxAY3NyLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAotRjoJZHJpdmVycy91d2IvKgorRjoJZHJpdmVycy91d2IvCitYOglkcml2ZXJzL3V3Yi93bHAvCitYOglkcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwLworWDoJZHJpdmVycy91d2IvaTE0ODAvaTE0ODAtd2xwLmgKIEY6CWluY2x1ZGUvbGludXgvdXdiLmgKIEY6CWluY2x1ZGUvbGludXgvdXdiLwogCkBAIC01OTQzLDkgKzU5NTAsMTIgQEAKIAogV0lNRURJQSBMTEMgUFJPVE9DT0wgKFdMUCkgU1VCU1lTVEVNCiBNOglEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJaW5jbHVkZS9saW51eC93bHAuaAogRjoJZHJpdmVycy91d2Ivd2xwLworRjoJZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC8KK0Y6CWRyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLXdscC5oCiAKIFdJU1RST04gTEFQVE9QIEJVVFRPTiBEUklWRVIKIE06CU1pbG9zbGF2IFRybWFjIDxtaXRyQHZvbG55LmN6PgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBlNmIwNmNiLi4xMjMxMDk0IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAzMwotRVhUUkFWRVJTSU9OID0gLXJjMQorRVhUUkFWRVJTSU9OID0gLXJjMwogTkFNRSA9IE1hbi1FYXRpbmcgU2VhbHMgb2YgQW50aXF1aXR5CiAKICMgKkRPQ1VNRU5UQVRJT04qCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggZDgyODc1OC4uOWQwNTViNCAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCisrKyBiL2FyY2gvS2NvbmZpZwpAQCAtMTM1LDkgKzEzNSw3IEBACiAKIGNvbmZpZyBIQVZFX0hXX0JSRUFLUE9JTlQKIAlib29sCi0JZGVwZW5kcyBvbiBIQVZFX1BFUkZfRVZFTlRTCi0Jc2VsZWN0IEFOT05fSU5PREVTCi0Jc2VsZWN0IFBFUkZfRVZFTlRTCisJZGVwZW5kcyBvbiBQRVJGX0VWRU5UUwogCiBjb25maWcgSEFWRV9VU0VSX1JFVFVSTl9OT1RJRklFUgogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCA0NDM0NDgxLi5iZDcyNjFlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC05LDYgKzksNyBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9XUkFQUEVSUworCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJaGVscAogCSAgVGhlIEFscGhhIGlzIGEgNjQtYml0IGdlbmVyYWwtcHVycG9zZSBwcm9jZXNzb3IgZGVzaWduZWQgYW5kCiAJICBtYXJrZXRlZCBieSB0aGUgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gb2YgYmxlc3NlZCBtZW1vcnksCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2J1Zy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9idWcuaAppbmRleCAxNzIwYzhhLi5mMDkxNjgyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2J1Zy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYnVnLmgKQEAgLTEzLDcgKzEzLDggQEAKIAkJImNhbGxfcGFsICUwICAjIGJ1Z2Noa1xuXHQiCQkJCVwKIAkJIi5sb25nICUxXG5cdC44Ynl0ZSAlMiIJCQkJCVwKIAkJOiA6ICJpIihQQUxfYnVnY2hrKSwgImkiKF9fTElORV9fKSwgImkiKF9fRklMRV9fKSk7CVwKLQlmb3IgKCA7IDsgKTsgfSB3aGlsZSAoMCkKKwl1bnJlYWNoYWJsZSgpOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgSEFWRV9BUkNIX0JVRwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZWY4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX19BU01fQUxQSEFfUEVSRl9FVkVOVF9ICisjZGVmaW5lIF9fQVNNX0FMUEhBX1BFUkZfRVZFTlRfSAorCisvKiBBbHBoYSBvbmx5IHN1cHBvcnRzIHNvZnR3YXJlIGV2ZW50cyB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlLiAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkgeyB9CisKKyNkZWZpbmUgUEVSRl9FVkVOVF9JTkRFWF9PRkZTRVQgMAorCisjZW5kaWYgLyogX19BU01fQUxQSEFfUEVSRl9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA3ZjIzNjY1Li44MDRlNTMxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTI0Nyw2ICsyNDcsNyBAQAogI2RlZmluZSBfX0lHTk9SRV9wYXVzZQogI2RlZmluZSBfX0lHTk9SRV90aW1lCiAjZGVmaW5lIF9fSUdOT1JFX3V0aW1lCisjZGVmaW5lIF9fSUdOT1JFX3Vtb3VudDIKIAogLyoKICAqIExpbnV4LXNwZWNpZmljIHN5c3RlbSBjYWxscyBiZWdpbiBhdCAzMDAKQEAgLTQzNCwxMCArNDM1LDI0IEBACiAjZGVmaW5lIF9fTlJfdGltZXJmZAkJCTQ3NwogI2RlZmluZSBfX05SX2V2ZW50ZmQJCQk0NzgKICNkZWZpbmUgX19OUl9yZWN2bW1zZwkJCTQ3OQorI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJCTQ4MAorI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCQk0ODEKKyNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJCTQ4MgorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkJNDgzCisjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkJNDg0CisjZGVmaW5lIF9fTlJfZXZlbnRmZDIJCQk0ODUKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxCQk0ODYKKyNkZWZpbmUgX19OUl9kdXAzCQkJNDg3CisjZGVmaW5lIF9fTlJfcGlwZTIJCQk0ODgKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCQk0ODkKKyNkZWZpbmUgX19OUl9wcmVhZHYJCQk0OTAKKyNkZWZpbmUgX19OUl9wd3JpdGV2CQkJNDkxCisjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JCTQ5MgorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkJNDkzCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfU1lTQ0FMTFMJCQk0ODAKKyNkZWZpbmUgTlJfU1lTQ0FMTFMJCQk0OTQKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCmluZGV4IGNkYTZiOGIuLjA5YWNiNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKQEAgLTQ5NSw5ICs0OTUsMjMgQEAKIAkucXVhZCBzeXNfZXBvbGxfcHdhaXQKIAkucXVhZCBzeXNfdXRpbWVuc2F0CQkJLyogNDc1ICovCiAJLnF1YWQgc3lzX3NpZ25hbGZkCi0JLnF1YWQgc3lzX25pX3N5c2NhbGwKKwkucXVhZCBzeXNfbmlfc3lzY2FsbAkJCS8qIHN5c190aW1lcmZkICovCiAJLnF1YWQgc3lzX2V2ZW50ZmQKIAkucXVhZCBzeXNfcmVjdm1tc2cKKwkucXVhZCBzeXNfZmFsbG9jYXRlCQkJCS8qIDQ4MCAqLworCS5xdWFkIHN5c190aW1lcmZkX2NyZWF0ZQorCS5xdWFkIHN5c190aW1lcmZkX3NldHRpbWUKKwkucXVhZCBzeXNfdGltZXJmZF9nZXR0aW1lCisJLnF1YWQgc3lzX3NpZ25hbGZkNAorCS5xdWFkIHN5c19ldmVudGZkMgkJCQkvKiA0ODUgKi8KKwkucXVhZCBzeXNfZXBvbGxfY3JlYXRlMQorCS5xdWFkIHN5c19kdXAzCisJLnF1YWQgc3lzX3BpcGUyCisJLnF1YWQgc3lzX2lub3RpZnlfaW5pdDEKKwkucXVhZCBzeXNfcHJlYWR2CQkJCS8qIDQ5MCAqLworCS5xdWFkIHN5c19wd3JpdGV2CisJLnF1YWQgc3lzX3J0X3Rnc2lncXVldWVpbmZvCisJLnF1YWQgc3lzX3BlcmZfZXZlbnRfb3BlbgogCiAJLnNpemUgc3lzX2NhbGxfdGFibGUsIC4gLSBzeXNfY2FsbF90YWJsZQogCS50eXBlIHN5c19jYWxsX3RhYmxlLCBAb2JqZWN0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCAyMzNhMjIyLi40Zjg3NjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTY4OCw2ICs2ODgsNyBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBDT01NT05fQ0xLREVWCiAJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCisJc2VsZWN0IEFSQ0hfSEFTX0hPTEVTX01FTU9SWU1PREVMCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVEkncyBEYVZpbmNpIHBsYXRmb3JtLgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKaW5kZXggYmM5MDM2NC4uY2MzMmMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJCQkgKiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHdpbGwgYmUgY29oZXJlbnQKIAkJCSAqIHdpdGggdXNlciBtYXBwaW5ncy4KIAkJCSAqLwotCQkJX19jcHVjX2ZsdXNoX2tlcm5lbF9kY2FjaGVfYXJlYShwdHIsIHNpemUpOworCQkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKHB0ciwgc2l6ZSk7CiAJCX0KIAkJZnJlZV9zYWZlX2J1ZmZlcihkZXYtPmFyY2hkYXRhLmRtYWJvdW5jZSwgYnVmKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCmluZGV4IDFjYWI0ZTcuLjZlMzJhODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCkBAIC0xODcsNyArMTg3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfdGlueV9kZWZjb25maWcKaW5kZXggOGUzZDA4NC4uYjM0YjFlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX3RpbnlfZGVmY29uZmlnCkBAIC0xODYsNyArMTg2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hZmViOTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZwppbmRleCBmN2EyNzJjLi42NGZlN2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZwpAQCAtMjI3LDcgKzIyNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYW0yMDBlcGRraXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKaW5kZXggNWU2ODQyMC4uMzA5MjdjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKQEAgLTE4OSw3ICsxODksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYW0zNTE3X2V2bV9kZWZjb25maWcKaW5kZXggYWQ1NGU5Mi4uYWJlOTk2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnCkBAIC0yMzMsNyArMjMzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKaW5kZXggZThmNzM4MGIuLjNiM2EzNzc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCkBAIC0yMTAsNyArMjEwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKaW5kZXggYzY2ZGQzOS4uZGFhNzViYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCkBAIC0xMDEsNyArMTAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMDA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxY2FwOWFka19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZwppbmRleCBiYzZiZDlmLi5iMWFiNTBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZwpAQCAtMTgxLDcgKzE4MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZwppbmRleCBjOTdlMTAyLi4xZmZmZWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCkBAIC0xMzAsNyArMTMwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKaW5kZXggOWY3YTk5YS4uYzg0NmE3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZwpAQCAtMTI5LDcgKzEyOSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcKaW5kZXggOThlMmYzZC4uNDcyZWExMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwZWtfZGVmY29uZmlnCkBAIC0xODgsNyArMTg4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcKaW5kZXggMTQ5NDU2MS4uNGVjZGU0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxZWtfZGVmY29uZmlnCkBAIC0xODEsNyArMTgxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNla19kZWZjb25maWcKaW5kZXggMjE1OTlmMy4uOWI3OTJiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzZWtfZGVmY29uZmlnCkBAIC0xODEsNyArMTgxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWcyMGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnMjBla19kZWZjb25maWcKaW5kZXggN2UwMThhMC4uNjRjZTEwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWcyMGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05ZzIwZWtfZGVmY29uZmlnCkBAIC0xODcsNyArMTg3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnCmluZGV4IGUyZGY4MWEuLjkwZTQ4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxla19kZWZjb25maWcKQEAgLTE3OSw3ICsxNzksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0ZWI5MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCmluZGV4IGExOWU4MjQuLjYzMTU1MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCkBAIC0xMzIsNyArMTMyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKaW5kZXggZjI2NDg0Ni4uYjE3NWI2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwpAQCAtMTAzLDcgKzEwMyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCmluZGV4IGJjYzBiYWMuLjFlMTIxNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iY21yaW5nX2RlZmNvbmZpZwpAQCAtMTgxLDcgKzE4MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jYW02MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwppbmRleCA4NDQ4MTA4Li5lZWYzM2RlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwpAQCAtMTk2LDcgKzE5Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Nhcm1ldmFfZGVmY29uZmlnCmluZGV4IGQzOTI4MzMuLmI2YTcwNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jYXJtZXZhX2RlZmNvbmZpZwpAQCAtOTcsNyArOTcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKaW5kZXggMmI0YzA2Ni4uZDY2MmNhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKQEAgLTEwNSw3ICsxMDUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NtX3QzNV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NtX3QzNV9kZWZjb25maWcKaW5kZXggZTQyYzVjOC4uODkzY2QyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jbV90MzVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21fdDM1X2RlZmNvbmZpZwpAQCAtMjM2LDcgKzIzNiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21feDJ4eF9kZWZjb25maWcKaW5kZXggNzk3Yjc5MC4uNDdkMjJkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCkBAIC0yMDUsNyArMjA1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NtX3gzMDBfZGVmY29uZmlnCmluZGV4IGEwMTcwODYuLmEzMzQwNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jbV94MzAwX2RlZmNvbmZpZwpAQCAtMjQ3LDcgKzI0Nyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDMz15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwppbmRleCA0Y2YzYmRlLi5jOTYyODcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwpAQCAtMjA0LDcgKzIwNCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCmluZGV4IDQ3NzRhMzZmLi4xMWZkYjVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZwpAQCAtMjEyLDcgKzIxMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDMz15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCmluZGV4IDFhYTYyMjQuLjI2ZTQ1OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKQEAgLTEyNSw3ICsxMjUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvcmdpX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCmluZGV4IGQ2Y2QxNjUuLjVlNDA2OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnCkBAIC0yMTQsNyArMjE0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NwdTkyNjBfZGVmY29uZmlnCmluZGV4IDYwMWU3ZjMuLmM5MTM3YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZwpAQCAtMjI5LDcgKzIyOSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OWcyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NwdTlnMjBfZGVmY29uZmlnCmluZGV4IGI1YjljYmIuLmQyMzQ0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OWcyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jcHU5ZzIwX2RlZmNvbmZpZwpAQCAtMjE5LDcgKzIxOSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NwdWF0OTFfZGVmY29uZmlnCmluZGV4IDQ5MDE4MjcuLjFmOGRkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jcHVhdDkxX2RlZmNvbmZpZwpAQCAtMjMwLDcgKzIzMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZwppbmRleCAyOWY2OGMyLi5mMDk1MDQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCkBAIC0xOTMsNyArMTkzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnCmluZGV4IGY3YjYwY2UuLjUwNzE1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcKQEAgLTIxNSw3ICsyMTUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2RhOHh4X29tYXBsX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGE4eHhfb21hcGxfZGVmY29uZmlnCmluZGV4IDUwYmQyNWEuLmUxNGM5OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZGE4eHhfb21hcGxfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGE4eHhfb21hcGxfZGVmY29uZmlnCkBAIC0yMjUsNyArMjI1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2RhdmluY2lfYWxsX2RlZmNvbmZpZwppbmRleCBiZDY1NmU4Li42MjUwMzVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2RhdmluY2lfYWxsX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2RhdmluY2lfYWxsX2RlZmNvbmZpZwpAQCAtMjIzLDcgKzIyMyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2RvdmVfZGVmY29uZmlnCmluZGV4IGIzYTQ5MTYuLmI3YjJhYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kb3ZlX2RlZmNvbmZpZwpAQCAtMTg2LDcgKzE4Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKaW5kZXggYWZjZmZmNi4uZDVlODI3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnCkBAIC04Myw3ICs4Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lY2JhdDkxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWNiYXQ5MV9kZWZjb25maWcKaW5kZXggY2E1MjA3My4uMjVkZDUzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lY2JhdDkxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VjYmF0OTFfZGVmY29uZmlnCkBAIC0xODYsNyArMTg2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcKaW5kZXggNmJhNzM1NS4uZTNhNmNkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnCkBAIC05MCw3ICs5MCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNNzIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcKaW5kZXggZTk5NTViNy4uMmJlZTkzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCkBAIC0yMDIsNyArMjAyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZwppbmRleCAzZmIwODNiLi4zNWQ3MzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCkBAIC0xOTgsNyArMTk4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lc2VyaWVzX3B4YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VzZXJpZXNfcHhhX2RlZmNvbmZpZwppbmRleCBiNmM1Y2JiLi43NGJhZjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VzZXJpZXNfcHhhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VzZXJpZXNfcHhhX2RlZmNvbmZpZwpAQCAtMjAzLDcgKzIwMyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcKaW5kZXggNDkyZjI5YS4uOWU5MDU3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lenhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXp4X2RlZmNvbmZpZwpAQCAtMjQwLDcgKzI0MCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZwppbmRleCA2YWNlNTEyLi4wNGQ5NzkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcKQEAgLTk1LDcgKzk1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2ZvcnR1bmV0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnCmluZGV4IDY1ZGM3M2EuLmQ1ODE0MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnCkBAIC04OCw3ICs4OCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNNzIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwppbmRleCBlZmE3OGUxLi5hOGFkOGZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwpAQCAtMjA1LDcgKzIwNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDUwMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oNTAwMF9kZWZjb25maWcKaW5kZXggNjQ5YmFhMy4uNWJiNzM3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oNTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oNTAwMF9kZWZjb25maWcKQEAgLTIwNiw3ICsyMDYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZwppbmRleCAxMTY5MjBhLi4wOWE2YzZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZwpAQCAtODcsNyArODcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTcyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9MVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcKaW5kZXggMGU3MzlhZi4uZmVkYzUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcKQEAgLTkxLDcgKzkxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk03MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfTFY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZwppbmRleCBkYjA3MDhkLi4yZGExYWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKQEAgLTEwMyw3ICsxMDMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2h0Y2hlcmFsZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2h0Y2hlcmFsZF9kZWZjb25maWcKaW5kZXggMWIzOTY5MS4uZTBlZjBkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9odGNoZXJhbGRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZwpAQCAtMjQxLDcgKzI0MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI1VD15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lnZXAwMDIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaWdlcDAwMjBfZGVmY29uZmlnCmluZGV4IGM5N2Y4ZDAuLmExOTIyNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaWdlcDAwMjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaWdlcDAwMjBfZGVmY29uZmlnCkBAIC0yMzgsNyArMjM4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwppbmRleCAzY2U5NmU2Li42YjBkMDQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKQEAgLTkyLDcgKzkyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk03MjBUPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiAjIENPTkZJR19DUFVfQVJNOTIyVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lvcDEzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AxM3h4X2RlZmNvbmZpZwppbmRleCA4OWMxNzc2Li4zYzA0MGNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lvcDEzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMTN4eF9kZWZjb25maWcKQEAgLTE2Myw3ICsxNjMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQzM9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZwppbmRleCBkNzAxNzdiLi42MmE4NTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lvcDMyeF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnCkBAIC0xNjgsNyArMTY4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZwppbmRleCBlZDJkNTlkLi4wYmMyM2VjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCkBAIC0xOTgsNyArMTk4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCmluZGV4IDU3NTI2YzEuLjhiNWI1NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZwpAQCAtMTUxLDcgKzE1MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZwppbmRleCBlZjk3NTYxLi41OWMxMWM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKQEAgLTE0NSw3ICsxNDUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQzM9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZwppbmRleCA5NWNkOGRmLi5hOTA3YWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCkBAIC0xODksNyArMTg5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCmluZGV4IGRmOWJmYmUuLmQxZjE2NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZwpAQCAtMjAyLDcgKzIwMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnCmluZGV4IDlmOTJmYzUuLmY2NjFlNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZwpAQCAtMTMyLDcgKzEzMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnCmluZGV4IDYwNWE4NDYuLjY2OGJhNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2I5MjAyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tiOTIwMl9kZWZjb25maWcKQEAgLTIzMCw3ICsyMzAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCmluZGV4IGJjZmFkZTMuLjVmYzQ0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCkBAIC0yMDEsNyArMjAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9GRVJPQ0VPTj15CiAjIENPTkZJR19DUFVfRkVST0NFT05fT0xEX0lEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2NT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcKaW5kZXggZDI1YzQxYi4uZTZmMjI3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rczg2OTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva3M4Njk1X2RlZmNvbmZpZwpAQCAtMTg2LDcgKzE4Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIyVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCmluZGV4IDU2YWU1NjguLmFmNzU5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZwpAQCAtOTksNyArOTksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sb2tpX2RlZmNvbmZpZwppbmRleCBiNzIwZmNmLi42ZGY3YjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbG9raV9kZWZjb25maWcKQEAgLTE3NCw3ICsxNzQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0ZFUk9DRU9OPXkKICMgQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY1PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkMjcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkMjcwX2RlZmNvbmZpZwppbmRleCAxYTM4ZDhlLi5hZWI3Njg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDI3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9scGQyNzBfZGVmY29uZmlnCkBAIC0xNDMsNyArMTQzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKaW5kZXggZjhhYzI5ZC4uNjExNmZlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcKQEAgLTk1LDcgKzk1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCmluZGV4IDdhMmU5MzIuLjE0MmNjY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCkBAIC0xMTcsNyArMTE3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZwppbmRleCBlNTQ0YmZiLi43NWM2MjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHViYm9ja19kZWZjb25maWcKQEAgLTkyLDcgKzkyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHVzbDcyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKaW5kZXggNDJmNmE3Ny4uYzFhMWZiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcKQEAgLTgyLDcgKzgyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk03MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfTFY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCmluZGV4IDk1N2ZkNWYuLjhlOWE3MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnCkBAIC0yMDQsNyArMjA0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFpbnN0b25lX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWFpbnN0b25lX2RlZmNvbmZpZwppbmRleCBjYzhjOTViLi4xY2RkYjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnCkBAIC05Myw3ICs5Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWluaTI0NDBfZGVmY29uZmlnCmluZGV4IGU0OWVkNDAuLmQyYTkwZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbWluaTI0NDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbWluaTI0NDBfZGVmY29uZmlnCkBAIC0yNTYsNyArMjU2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnCmluZGV4IGNjM2IwNmUuLmZlMjVlM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXNtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21zbV9kZWZjb25maWcKQEAgLTE1NSw3ICsxNTUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKaW5kZXggMzk4Mjc0Yi4uNmFmYTJjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCkBAIC0xODEsNyArMTgxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRD15CiBDT05GSUdfQ1BVXzMydjU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDFfZGVmY29uZmlnCmluZGV4IDAyMDBkNjcuLmY1NzUwNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL214MV9kZWZjb25maWcKQEAgLTE5MCw3ICsxOTAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214MWFkc19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MWFkc19kZWZjb25maWcKaW5kZXggNTc3ZDdlMS4uM2NhYmJiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teDFhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZwpAQCAtODgsNyArODgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MjFfZGVmY29uZmlnCmluZGV4IDRiMDQyOTAuLjFlY2Q2MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDIxX2RlZmNvbmZpZwpAQCAtMTg1LDcgKzE4NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnCmluZGV4IDc1MjYzYTguLmVkZmRkNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDI3X2RlZmNvbmZpZwpAQCAtMjA3LDcgKzIwNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzMXBka19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MzFwZGtfZGVmY29uZmlnCmluZGV4IDk1ZmZjMGQuLmQ0MDk1MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzMXBka19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDMxcGRrX2RlZmNvbmZpZwpAQCAtMTczLDcgKzE3Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214M19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214M19kZWZjb25maWcKaW5kZXggNzczNGNjYS4uOGEwNmJjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teDNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZwpAQCAtMjE4LDcgKzIxOCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL243NzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZwppbmRleCBhMTY1N2I3Li43NWNhZTE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL243NzBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcKQEAgLTIxMCw3ICsyMTAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwppbmRleCAyNjRmNTJiLi5lNmY2NjdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKQEAgLTIzMiw3ICsyMzIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZW9jb3JlOTI2X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVvY29yZTkyNl9kZWZjb25maWcKaW5kZXggZTBlNGU5OC4uZDE2NWM3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZW9jb3JlOTI2X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25lb2NvcmU5MjZfZGVmY29uZmlnCkBAIC0yMTgsNyArMjE4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZwppbmRleCAzNmNkNjJlLi4xNzEyNjVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZwpAQCAtMTAzLDcgKzEwMyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmV0d2luZGVyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0d2luZGVyX2RlZmNvbmZpZwppbmRleCBjMWE2M2EzLi43OGY1OGE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnCkBAIC04OSw3ICs4OSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcKaW5kZXggNjFkMGZjNS4uMmE5N2UzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnCkBAIC0xMjIsNyArMTIyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKaW5kZXggNjAwY2IyNy4uOTJkOTA4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCkBAIC0xOTEsNyArMTkxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9udWM5MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9udWM5MTBfZGVmY29uZmlnCmluZGV4IDUyNDU2NTUuLmY4MDg0OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL251YzkxMF9kZWZjb25maWcKQEAgLTE4MCw3ICsxODAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL251Yzk1MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL251Yzk1MF9kZWZjb25maWcKaW5kZXggZGYxZGU5Yi4uOTczMDBlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9udWM5NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTUwX2RlZmNvbmZpZwpAQCAtMjAxLDcgKzIwMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTYwX2RlZmNvbmZpZwppbmRleCA0YjJjZDllLi5hYTdlMTI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL251Yzk2MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9udWM5NjBfZGVmY29uZmlnCkBAIC0yMDEsNyArMjAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCmluZGV4IDljZmFlMzcuLmM3OTk5ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKQEAgLTIxMyw3ICsyMTMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19kZWZjb25maWcKaW5kZXggMmFmMjhlYS4uMzY3YmU5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19kZWZjb25maWcKQEAgLTI0NSw3ICsyNDUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZwppbmRleCBlMTkwZmM4Li44NmNjNGJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2V2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnCkBAIC0yMjAsNyArMjIwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZwppbmRleCBiN2E4ZDlmLi5mNzRlYjlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKQEAgLTIxMSw3ICsyMTEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfdG91Y2hib29rX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfdG91Y2hib29rX2RlZmNvbmZpZwppbmRleCA3Yzg1MTVlLi43NGZlNmJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3RvdWNoYm9va19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM190b3VjaGJvb2tfZGVmY29uZmlnCkBAIC0yNDYsNyArMjQ2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfMjQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMjQzMHNkcF9kZWZjb25maWcKaW5kZXggNjQwZTlhZi4uNDViNGViYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzI0MzBzZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8yNDMwc2RwX2RlZmNvbmZpZwpAQCAtMTk3LDcgKzE5Nyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKaW5kZXggNTkyNDU3Yy4uYmIyOTE3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwpAQCAtMjMyLDcgKzIzMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM2MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM2MzBzZHBfZGVmY29uZmlnCmluZGV4IGU4MzZjOGEuLmQyNWMzZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNjMwc2RwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzYzMHNkcF9kZWZjb25maWcKQEAgLTIzNiw3ICsyMzYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZwppbmRleCAyMzE5MTEzLi4zZGU2NDBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCkBAIC0yMjAsNyArMjIwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfYXBvbGxvbl8yNDIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9hcG9sbG9uXzI0MjBfZGVmY29uZmlnCmluZGV4IGFjN2FkZjMuLmNjODYzNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9hcG9sbG9uXzI0MjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9hcG9sbG9uXzI0MjBfZGVmY29uZmlnCkBAIC0xOTYsNyArMTk2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiAjIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE1MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcKaW5kZXggY2NkYzY2MS4uNjE3NDRlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcKQEAgLTIwNSw3ICsyMDUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNVQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE2MTBfZGVmY29uZmlnCmluZGV4IDBjNDJjODkuLmQ3NzM4NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE2MTBfZGVmY29uZmlnCkBAIC0yMDcsNyArMjA3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTcxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNzEwX2RlZmNvbmZpZwppbmRleCAwYTAwYTcwLi42ZWM0ODdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNzEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNzEwX2RlZmNvbmZpZwpAQCAtMjAxLDcgKzIwMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzI0MjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMjQyMF9kZWZjb25maWcKaW5kZXggY2Y0MDczYi4uNzIxOGI5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMjQyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMjQyMF9kZWZjb25maWcKQEAgLTE5MSw3ICsxOTEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCmluZGV4IDc0ZGJkYzYuLjUyMzE4OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKQEAgLTIzMSw3ICsyMzEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDRfMjQyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDRfMjQyMF9kZWZjb25maWcKaW5kZXggYTRhYWI4ZS4uYjEyYjQwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2g0XzI0MjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oNF8yNDIwX2RlZmNvbmZpZwpAQCAtMjAxLDcgKzIwMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE1MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNTEwX2RlZmNvbmZpZwppbmRleCAwY2ZlMzYzLi5lOWMxNDA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE1MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTUxMF9kZWZjb25maWcKQEAgLTIwNSw3ICsyMDUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNVQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE2MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNjEwX2RlZmNvbmZpZwppbmRleCA5NWQ5ZjJiLi5mZWE5MzE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTYxMF9kZWZjb25maWcKQEAgLTIwNiw3ICsyMDYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCmluZGV4IDkxMzk1MzIuLjBlZmI0YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCkBAIC0yMTQsNyArMjE0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfb3NrXzU5MTJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX29za181OTEyX2RlZmNvbmZpZwppbmRleCA2YjNiNWM2Li41NTZmY2NhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfb3NrXzU5MTJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9vc2tfNTkxMl9kZWZjb25maWcKQEAgLTIxMiw3ICsyMTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfcGVyc2V1czJfNzMwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9wZXJzZXVzMl83MzBfZGVmY29uZmlnCmluZGV4IGI5NDgwMGMuLjlhMTVkNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9wZXJzZXVzMl83MzBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9wZXJzZXVzMl83MzBfZGVmY29uZmlnCkBAIC0xOTksNyArMTk5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tMl9kZWZjb25maWcKaW5kZXggNGIwMGE0My4uYTgyZTgxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTJfZGVmY29uZmlnCkBAIC0yMjIsNyArMjIyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZwppbmRleCAwZDdlMzdhLi5hM2UzYzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tM19kZWZjb25maWcKQEAgLTIzNiw3ICsyMzYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZwppbmRleCBmODcwMWZhLi4xOWI5MWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnCkBAIC0xNjEsNyArMTYxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKaW5kZXggNTM4M2NkMC4uODViMDVkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCkBAIC0yMTAsNyArMjEwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRD15CiBDT05GSUdfQ1BVXzMydjU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZwppbmRleCBiM2VhMmM0Li5iZjA2ZDM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZwpAQCAtMjE3LDcgKzIxNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wYWxtdGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtdGVfZGVmY29uZmlnCmluZGV4IDQwZmM2YTcuLmZlZmZhYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXRlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BhbG10ZV9kZWZjb25maWcKQEAgLTE5Niw3ICsxOTYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNVQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BhbG10dF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BhbG10dF9kZWZjb25maWcKaW5kZXggZTU0Y2VkNC4uNTVkNWI3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtdHRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXR0X2RlZmNvbmZpZwpAQCAtMTc2LDcgKzE3Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI1VD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BhbG16NzFfZGVmY29uZmlnCmluZGV4IDA4ZTE0MDYuLjZlZmM3NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3MV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZwpAQCAtMjAwLDcgKzIwMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI1VD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3Ml9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BhbG16NzJfZGVmY29uZmlnCmluZGV4IGEwZGMzN2MuLjZkMTYyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3Ml9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtejcyX2RlZmNvbmZpZwpAQCAtMjA5LDcgKzIwOSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BjbTAyN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BjbTAyN19kZWZjb25maWcKaW5kZXggMDVhZDk2YS4uZmExNTNmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wY20wMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZwpAQCAtMTY4LDcgKzE2OCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BpY290dXgyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9waWNvdHV4MjAwX2RlZmNvbmZpZwppbmRleCA5MDE4ZjBmLi42ZTcxNTVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BpY290dXgyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcKQEAgLTE2OCw3ICsxNjgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwppbmRleCBmMmQyZGRhLi5kYmZhYmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKQEAgLTEwMCw3ICsxMDAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BueDQwMDhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZwppbmRleCA2N2I1ZjFlLi4yZjdiOWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BueDQwMDhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKQEAgLTEyMSw3ICsxMjEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcKaW5kZXggZGI1ZmFlYS4uNzkxYjhjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9weGExNjhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZwpAQCAtMTg0LDcgKzE4NCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfTU9IQVdLPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEyNTUtaWRwX2RlZmNvbmZpZwppbmRleCA0NmU1MDg5Li4zMzY1YzVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcKQEAgLTkyLDcgKzkyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhM3h4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhM3h4X2RlZmNvbmZpZwppbmRleCA3MzNiODUxLi44MmNhNmM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnCkBAIC0yNDAsNyArMjQwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0MzPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcKaW5kZXggOGM3ZTI5OS4uOTRlMjBmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhOTEwX2RlZmNvbmZpZwpAQCAtMTg0LDcgKzE4NCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfTU9IQVdLPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3FpbC1hOTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3FpbC1hOTI2MF9kZWZjb25maWcKaW5kZXggOWIzMmQwZS4uMTJkMGQ2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9xaWwtYTkyNjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcWlsLWE5MjYwX2RlZmNvbmZpZwpAQCAtMTk1LDcgKzE5NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZwppbmRleCAyMWRiNGIzLi4xMjM3MDE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCkBAIC0xODYsNyArMTg2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogIyBDT05GSUdfQ1BVX0FSTTkyNlQgaXMgbm90IHNldAogQ09ORklHX0NQVV9WNj15CiBDT05GSUdfQ1BVXzMydjZLPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKaW5kZXggOWE3NWMzMC4uYTUwOWE1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcKQEAgLTE4NCw3ICsxODQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiAjIENPTkZJR19DUFVfQVJNOTI2VCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcKaW5kZXggYTI5ZDYxZi4uZTkxMjRhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZwpAQCAtMTUwLDcgKzE1MCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNNjEwPXkKIENPTkZJR19DUFVfQVJNNzEwPXkKIENPTkZJR19DUFVfU0ExMTA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcKaW5kZXggMTU1OTczNC4uYjZlZWViYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCkBAIC0yMTIsNyArMjEyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwppbmRleCBiNDk4MTA0Li4yZjEwZGFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKQEAgLTI3Nyw3ICsyNzcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zM2M2NDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjNjQwMF9kZWZjb25maWcKaW5kZXggMzI4NjA2MC4uZjU2ZTUwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zM2M2NDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnCkBAIC0xOTIsNyArMTkyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3M1cGMxMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zNXBjMTAwX2RlZmNvbmZpZwppbmRleCBiMGQ3ZDNkLi5kYzEwOGFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3M1cGMxMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcKQEAgLTIwMiw3ICsyMDIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtOV9sOTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NhbTlfbDkyNjBfZGVmY29uZmlnCmluZGV4IDExNzRlMjcuLjgxYjI5MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtOV9sOTI2MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zYW05X2w5MjYwX2RlZmNvbmZpZwpAQCAtMTc1LDcgKzE3NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCmluZGV4IDk4NGY3MDk2Li43YzQ5YmMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKQEAgLTk5LDcgKzk5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMDA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaGFya19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZwppbmRleCA5MDIzNWJmLi40NmRlMTI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZwpAQCAtMTczLDcgKzE3Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCmluZGV4IDY4NWQyYjUuLmVlMjVlNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKQEAgLTEwMSw3ICsxMDEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NwaXR6X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCmluZGV4IDc0NWM2OGYuLjdkODk0ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnCkBAIC0yMTIsNyArMjEyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3RtcDM3OHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcKaW5kZXggNDQ0NjFmMS4uYjFhM2E5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcKQEAgLTE5Myw3ICsxOTMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3N0bXAzN3h4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3RtcDM3eHhfZGVmY29uZmlnCmluZGV4IDQwMTI3OWQuLmEzNzUxYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3RtcDM3eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3RtcDM3eHhfZGVmY29uZmlnCkBAIC0xODIsNyArMTgyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zeDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zeDFfZGVmY29uZmlnCmluZGV4IDI1YjAwN2YuLjhhOWU3ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3gxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N4MV9kZWZjb25maWcKQEAgLTIxMCw3ICsyMTAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNVQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy90Y3RfaGFtbWVyX2RlZmNvbmZpZwppbmRleCA5ZDMyZmFlLi5kY2NmMTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcKQEAgLTIxNSw3ICsyMTUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3RyaXplcHM0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCmluZGV4IGI2ZjgzODEuLjFlOGY1YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnCkBAIC0xNTYsNyArMTU2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCmluZGV4IDk1M2JhMDIuLjYxMGFjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwpAQCAtMjA3LDcgKzIwNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdTg1MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy91ODUwMF9kZWZjb25maWcKaW5kZXggMTVmZGUyMi4uNzI3YWZmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy91ODUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91ODUwMF9kZWZjb25maWcKQEAgLTIwMSw3ICsyMDEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYwX2RlZmNvbmZpZwppbmRleCBmZDc3NzQwLi44N2I3MDBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjBfZGVmY29uZmlnCkBAIC0xOTUsNyArMTk1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjNfZGVmY29uZmlnCmluZGV4IGU3YzE5ZGQuLjdmMDE4ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2M19kZWZjb25maWcKQEAgLTE4Nyw3ICsxODcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKaW5kZXggYjExYzVkYS4uYTFhZjBiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZwpAQCAtMTE3LDcgKzExNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKaW5kZXggNmFiNWRkNS4uOTA5ODg3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy92aXBlcl9kZWZjb25maWcKQEAgLTIwNCw3ICsyMDQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKaW5kZXggMzNiYjcyNS4uODRhNzJhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCkBAIC0yMDgsNyArMjA4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MveWw5MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveWw5MjAwX2RlZmNvbmZpZwppbmRleCA5MTkyZTU5Li4zYjYyN2FhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3lsOTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy95bDkyMDBfZGVmY29uZmlnCkBAIC0xODMsNyArMTgzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKaW5kZXggODIzYjExZS4uZmNhNWZmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3pldXNfZGVmY29uZmlnCkBAIC0yNzEsNyArMjcxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCmluZGV4IDM5NzY0MTIuLjhmZGFlOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaApAQCAtMjQsMjA2ICsyNCwyMjggQEAKICAqIENQVV9OQU1FIC0gdGhlIHByZWZpeCBmb3IgQ1BVIHJlbGF0ZWQgZnVuY3Rpb25zCiAgKi8KIAotI2lmZGVmIENPTkZJR19DUFVfMzIKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk02MTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTYKLSMgIGVuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9BUk02MTAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm02CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNN1RETUkKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTd0ZG1pCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTdURE1JCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtN3RkbWkKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk03MTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNNzEwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNwogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTcyMFQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcyMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk03MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNNzQwVAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzQwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTc0MFQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03NDAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk05VERNSQotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOXRkbWkKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOVRETUkKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05dGRtaQogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMFQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNOTIyVAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIyCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMlQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjIKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9GQTUyNgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmE1MjYKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfRkE1MjYKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9mYTUyNgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNVQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNQotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjVUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI1CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNOTI2VAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI2Ci0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNlQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjYKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk05NDBUCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05NDAKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTQwVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0MAogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTk0NkUKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0NgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05NDZFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQ2CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfU0ExMTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfc2ExMTAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMDAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIwCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNMTAyMEUKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTEwMjBlCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjBFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMGUKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIyCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjIKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNMTAyNgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyNgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk0xMDI2CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyNgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjYWxlCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzY2FsZQogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1hTQzMKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfWFNDMworIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X21vaGF3awotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9tb2hhd2sKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9GRVJPQ0VPTgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmVyb2Nlb24KLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfRkVST0NFT04KKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9mZXJvY2VvbgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1Y2Ci0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV92NgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9WNgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y2CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfVjcKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y3Ci0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1Y3CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfdjcKICMgZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmgKaW5kZXggZjI3Mzc5ZC4uYzQzOTFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX25vdGlmeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9ub3RpZnkuaApAQCAtNDEsNyArNDEsNyBAQAogICogVGhlc2UgYXJlIHRoZSByZWFzb24gY29kZXMgZm9yIHRoZSB0aHJlYWQgbm90aWZpZXIuCiAgKi8KICNkZWZpbmUgVEhSRUFEX05PVElGWV9GTFVTSAkwCi0jZGVmaW5lIFRIUkVBRF9OT1RJRllfUkVMRUFTRQkxCisjZGVmaW5lIFRIUkVBRF9OT1RJRllfRVhJVAkxCiAjZGVmaW5lIFRIUkVBRF9OT1RJRllfU1dJVENICTIKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMgYi9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMKaW5kZXggNzY5YWJlMS4uMjVlZjIyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NydW5jaC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYwpAQCAtNTEsNyArNTEsNyBAQAogCQkgKiBpbml0aWFsaXNlZCBzdGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgZmF1bHQuCiAJCSAqLwogCi0JY2FzZSBUSFJFQURfTk9USUZZX1JFTEVBU0U6CisJY2FzZSBUSFJFQURfTk9USUZZX0VYSVQ6CiAJCWNydW5jaF90YXNrX3JlbGVhc2UodGhyZWFkKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMgYi9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jCmluZGV4IDBlODhlNDYuLjM2MGJiNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYwpAQCAtMjA3LDggKzIwNyw2IEBACiAJCW91dGIoMHgzMiwgMHg0ZDYpOwogCQlvdXRiKDB4MzMsIDB4NGQ2KTsKIAotCQlyZXF1ZXN0X2RtYShETUFfSVNBX0NBU0NBREUsICJjYXNjYWRlIik7Ci0KIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1hX3Jlc291cmNlcyk7IGkrKykKIAkJCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgZG1hX3Jlc291cmNlcyArIGkpOwogCkBAIC0yMTgsNSArMjE2LDcgQEAKIAkJCQlwcmludGsoS0VSTl9FUlIgIklTQURNQSV1OiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLAogCQkJCQljaGFuLCByZXQpOwogCQl9CisKKwkJcmVxdWVzdF9kbWEoRE1BX0lTQV9DQVNDQURFLCAiY2FzY2FkZSIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDBkOTZkMDEuLjY3MzA0MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMjc0LDE3ICsyNzQsMTggQEAKIAlfX2JhY2t0cmFjZSgpOwogfQogCitBVE9NSUNfTk9USUZJRVJfSEVBRCh0aHJlYWRfbm90aWZ5X2hlYWQpOworCitFWFBPUlRfU1lNQk9MX0dQTCh0aHJlYWRfbm90aWZ5X2hlYWQpOworCiAvKgogICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KICAqLwogdm9pZCBleGl0X3RocmVhZCh2b2lkKQogeworCXRocmVhZF9ub3RpZnkoVEhSRUFEX05PVElGWV9FWElULCBjdXJyZW50X3RocmVhZF9pbmZvKCkpOwogfQogCi1BVE9NSUNfTk9USUZJRVJfSEVBRCh0aHJlYWRfbm90aWZ5X2hlYWQpOwotCi1FWFBPUlRfU1lNQk9MX0dQTCh0aHJlYWRfbm90aWZ5X2hlYWQpOwotCiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gY3VycmVudF90aHJlYWRfaW5mbygpOwpAQCAtMjk5LDkgKzMwMCw2IEBACiAKIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCiB7Ci0Jc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB0YXNrX3RocmVhZF9pbmZvKGRlYWRfdGFzayk7Ci0KLQl0aHJlYWRfbm90aWZ5KFRIUkVBRF9OT1RJRllfUkVMRUFTRSwgdGhyZWFkKTsKIH0KIAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgX19hc21fXygicmV0X2Zyb21fZm9yayIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3hzY2FsZS1jcDAuYyBiL2FyY2gvYXJtL2tlcm5lbC94c2NhbGUtY3AwLmMKaW5kZXggMTcxMjdkYi4uMTc5NjE1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3hzY2FsZS1jcDAuYworKysgYi9hcmNoL2FybS9rZXJuZWwveHNjYWxlLWNwMC5jCkBAIC03MCw3ICs3MCw3IEBACiAJCSAqIGluaXRpYWxpc2VkIHN0YXRlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCBmYXVsdC4KIAkJICovCiAKLQljYXNlIFRIUkVBRF9OT1RJRllfUkVMRUFTRToKKwljYXNlIFRIUkVBRF9OT1RJRllfRVhJVDoKIAkJaXdtbXh0X3Rhc2tfcmVsZWFzZSh0aHJlYWQpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzU1LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzU1LWV2bS5jCmluZGV4IGE5YjY1MGQuLjA3N2VjZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM1NS1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNTUtZXZtLmMKQEAgLTIzNiw2ICsyMzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IHZwZmVfY29uZmlnIHZwZmVfY2ZnID0gewogCS5udW1fc3ViZGV2cyA9IEFSUkFZX1NJWkUodnBmZV9zdWJfZGV2cyksCisJLmkyY19hZGFwdGVyX2lkID0gMSwKIAkuc3ViX2RldnMgPSB2cGZlX3N1Yl9kZXZzLAogCS5jYXJkX25hbWUgPSAiRE0zNTUgRVZNIiwKIAkuY2NkYyA9ICJETTM1NSBDQ0RDIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYwppbmRleCAyODlmZTFiLi5iNDc2Mzk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCkBAIC0xOTIsNyArMTkyLDExIEBACiAJLmJ1c19kZWxheQk9IDAJLyogdXNlYyAqLywKIH07CiAKLSNpZmRlZiBDT05GSUdfS0VZQk9BUkRfREFWSU5DSQorc3RhdGljIGludCBkbTM2NWV2bV9rZXlzY2FuX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRhdmluY2lfY2ZnX3JlZyhETTM2NV9LRVlTQ0FOKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGRtMzY1ZXZtX2tleW1hcFtdID0gewogCUtFWV9LUDIsCiAJS0VZX0xFRlQsCkBAIC0yMTQsNiArMjE4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9rc19wbGF0Zm9ybV9kYXRhIGRtMzY1ZXZtX2tzX2RhdGEgPSB7CisJLmRldmljZV9lbmFibGUJPSBkbTM2NWV2bV9rZXlzY2FuX2VuYWJsZSwKIAkua2V5bWFwCQk9IGRtMzY1ZXZtX2tleW1hcCwKIAkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUoZG0zNjVldm1fa2V5bWFwKSwKIAkucmVwCQk9IDEsCkBAIC0yMjIsNyArMjI3LDYgQEAKIAkuaW50ZXJ2YWwJPSAweDIsCiAJLm1hdHJpeF90eXBlCT0gREFWSU5DSV9LRVlTQ0FOX01BVFJJWF80WDQsCiB9OwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgY3BsZF9tbWNfZ2V0X2NkKGludCBtb2R1bGUpCiB7CkBAIC01MTEsMTAgKzUxNSw3IEBACiAKIAlkbTM2NV9pbml0X2FzcCgmZG0zNjVfZXZtX3NuZF9kYXRhKTsKIAlkbTM2NV9pbml0X3J0YygpOwotCi0jaWZkZWYgQ09ORklHX0tFWUJPQVJEX0RBVklOQ0kKIAlkbTM2NV9pbml0X2tzKCZkbTM2NWV2bV9rc19kYXRhKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgX19pbml0IHZvaWQgZG0zNjVfZXZtX2lycV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ0eC1ldm0uYwppbmRleCBmZDAzOThiLi5lOTYxMmNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NHgtZXZtLmMKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHZwZmVfY29uZmlnIHZwZmVfY2ZnID0gewogCS5udW1fc3ViZGV2cyA9IEFSUkFZX1NJWkUodnBmZV9zdWJfZGV2cyksCisJLmkyY19hZGFwdGVyX2lkID0gMSwKIAkuc3ViX2RldnMgPSB2cGZlX3N1Yl9kZXZzLAogCS5jYXJkX25hbWUgPSAiRE02NDQ2IEVWTSIsCiAJLmNjZGMgPSAiRE02NDQ2IENDREMiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwX2ludGMuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcF9pbnRjLmMKaW5kZXggNTJiMjg3Yy4uMzczMTFkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwX2ludGMuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3BfaW50Yy5jCkBAIC04MSwxMiArODEsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEZha2luZyB0aGlzIGFsbG93cyB1cyB0byB0byB3b3JrIHdpdGggc3VzcGVuZCBmdW5jdGlvbnMgb2YKKyAqIGdlbmVyaWMgZHJpdmVycyB3aGljaCBjYWxsIHtlbmFibGV8ZGlzYWJsZX1faXJxX3dha2UgZm9yCisgKiB3YWtlIHVwIGludGVycnVwdCBzb3VyY2VzIChlZyBSVEMgb24gREE4NTApLgorICovCitzdGF0aWMgaW50IGNwX2ludGNfc2V0X3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwX2ludGNfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCT0gImNwX2ludGMiLAogCS5hY2sJCT0gY3BfaW50Y19hY2tfaXJxLAogCS5tYXNrCQk9IGNwX2ludGNfbWFza19pcnEsCiAJLnVubWFzawkJPSBjcF9pbnRjX3VubWFza19pcnEsCiAJLnNldF90eXBlCT0gY3BfaW50Y19zZXRfaXJxX3R5cGUsCisJLnNldF93YWtlCT0gY3BfaW50Y19zZXRfd2FrZSwKIH07CiAKIHZvaWQgX19pbml0IGNwX2ludGNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIHNob3J0IG51bV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwppbmRleCBkZDJkMzJjLi5hNTEwNWYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKQEAgLTQ4MSwxMSArNDgxLDE4IEBACiAKIGludCBkYTh4eF9yZWdpc3Rlcl9ydGModm9pZCkKIHsKKwlpbnQgcmV0OworCiAJLyogVW5sb2NrIHRoZSBydGMncyByZWdpc3RlcnMgKi8KIAlfX3Jhd193cml0ZWwoMHg4M2U3MGIxMywgSU9fQUREUkVTUyhEQThYWF9SVENfQkFTRSArIDB4NmMpKTsKIAlfX3Jhd193cml0ZWwoMHg5NWE0ZjFlMCwgSU9fQUREUkVTUyhEQThYWF9SVENfQkFTRSArIDB4NzApKTsKIAotCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRhOHh4X3J0Y19kZXZpY2UpOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGE4eHhfcnRjX2RldmljZSk7CisJaWYgKCFyZXQpCisJCS8qIEF0bGVhc3Qgb24gREE4NTAsIFJUQyBpcyBhIHdha2V1cCBzb3VyY2UgKi8KKwkJZGV2aWNlX2luaXRfd2FrZXVwKCZkYTh4eF9ydGNfZGV2aWNlLmRldiwgdHJ1ZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRhOHh4X2NwdWlkbGVfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCmluZGV4IDJlYzYxOWUuLmY1MzczNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCkBAIC05OTMsNyArOTkzLDYgQEAKIAogdm9pZCBfX2luaXQgZG0zNjVfaW5pdF9rcyhzdHJ1Y3QgZGF2aW5jaV9rc19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfS0VZU0NBTik7CiAJZG0zNjVfa3NfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM2NV9rc19kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL01ha2VmaWxlCmluZGV4IDMyZjg2MDkuLjNhZmIxYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKLW9iai15CQkJOj0gY29tbW9uLm8gZGMyMTI4NS5vIGRtYS5vIGlzYS1pcnEubyB0aW1lLm8KK29iai15CQkJOj0gY29tbW9uLm8gZGMyMTI4NS5vIGRtYS5vIGlzYS1pcnEubwogb2JqLW0JCQk6PQogb2JqLW4JCQk6PQogb2JqLQkJCTo9CkBAIC0yNSw0ICsyNSw0IEBACiBvYmotJChDT05GSUdfUENJKQkrPSQocGNpLXkpCiBvYmotJChDT05GSUdfTEVEUykJKz0kKGxlZHMteSkKIAotb2JqLSQoQ09ORklHX0lTQSkJKz0gaXNhLm8KK29iai0kKENPTkZJR19JU0EpCSs9IGlzYS5vIGlzYS1ydGMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKaW5kZXggZGEzNWJjNS4uYmM1ZTgzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCkBAIC01Niw4ICs1Niw2IEBACiAJKkNTUl9USU1FUjFfQ05UTCA9IFRJTUVSX0NOVExfRU5BQkxFIHwgVElNRVJfQ05UTF9BVVRPUkVMT0FEIHwgVElNRVJfQ05UTF9ESVYxNjsKIAogCXNldHVwX2lycShJUlFfVElNRVIxLCAmZm9vdGJyaWRnZV90aW1lcl9pcnEpOwotCi0JaXNhX3J0Y19pbml0KCk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgZm9vdGJyaWRnZV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtcnRjLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXJ0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZmRlNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXJ0Yy5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS1ydGMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUnVzc2VsbCBLaW5nLgorICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsIEJsdW5kZWxsCisgKgorICogQ0FUUyBoYXMgYSByZWFsLXRpbWUgY2xvY2ssIHRob3VnaCB0aGUgZXZhbHVhdGlvbiBib2FyZCBkb2Vzbid0LgorICoKKyAqIENoYW5nZWxvZzoKKyAqICAyMS1NYXItMTk5OAlSTUsJQ3JlYXRlZAorICogIDI3LUF1Zy0xOTk4CVBKQglDQVRTIHN1cHBvcnQKKyAqICAyOC1EZWMtMTk5OAlBUEgJTWFkZSBsZWRzIG9wdGlvbmFsCisgKiAgMjAtSmFuLTE5OTkJUk1LCVN0YXJ0ZWQgbWVyZ2Ugb2YgRUJTQTI4NSwgQ0FUUyBhbmQgTmV0V2luZGVyCisgKiAgMTYtTWFyLTE5OTkJUk1LCU1vcmUgc3VwcG9ydCBmb3IgRUJTQTI4NS1saWtlIG1hY2hpbmVzIHdpdGggUlRDcyBpbgorICovCisKKyNkZWZpbmUgUlRDX1BPUlQoeCkJCSgweDcwKyh4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJCTAKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKwordm9pZCBfX2luaXQgaXNhX3J0Y19pbml0KHZvaWQpCit7CisJaW50IHJlZ19kLCByZWdfYjsKKworCS8qCisJICogUHJvYmUgZm9yIHRoZSBSVEMuCisJICovCisJcmVnX2QgPSBDTU9TX1JFQUQoUlRDX1JFR19EKTsKKworCS8qCisJICogbWFrZSBzdXJlIHRoZSBkaXZpZGVyIGlzIHNldAorCSAqLworCUNNT1NfV1JJVEUoUlRDX1JFRl9DTENLXzMyS0haLCBSVENfUkVHX0EpOworCisJLyoKKwkgKiBTZXQgY29udHJvbCByZWcgQgorCSAqICAgKDI0IGhvdXIgbW9kZSwgdXBkYXRlIGVuYWJsZWQpCisJICovCisJcmVnX2IgPSBDTU9TX1JFQUQoUlRDX1JFR19CKSAmIDB4N2Y7CisJcmVnX2IgfD0gMjsKKwlDTU9TX1dSSVRFKHJlZ19iLCBSVENfUkVHX0IpOworCisJaWYgKChDTU9TX1JFQUQoUlRDX1JFR19BKSAmIDB4N2YpID09IFJUQ19SRUZfQ0xDS18zMktIWiAmJgorCSAgICBDTU9TX1JFQUQoUlRDX1JFR19CKSA9PSByZWdfYikgeworCQkvKgorCQkgKiBXZSBoYXZlIGEgUlRDLiAgQ2hlY2sgdGhlIGJhdHRlcnkKKwkJICovCisJCWlmICgocmVnX2QgJiAweDgwKSA9PSAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUlRDOiAqKiogd2FybmluZzogQ01PUyBiYXR0ZXJ5IGJhZFxuIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCmluZGV4IDBjODM5MDAuLmY0ODhmYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKQEAgLTc2LDggKzc2LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGlzYV90aW1lcl9pbml0KHZvaWQpCiB7Ci0JaXNhX3J0Y19pbml0KCk7Ci0KIAkvKiBlbmFibGUgUElUIHRpbWVyICovCiAJLyogc2V0IGZvciBwZXJpb2RpYyAoNCkgYW5kIExTQi9NU0Igd3JpdGUgKDB4MzApICovCiAJb3V0YigweDM0LCAweDQzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EuYwppbmRleCA3MjVhMjE5Li40ZDkyNzZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS5jCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC03NywxMSArODAsMTggQEAKIAogc3RhdGljIGludCBfX2luaXQgZm9vdGJyaWRnZV9pc2FfaW5pdCh2b2lkKQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKLQllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIFJUQyBkZXZpY2U6ICVkXG4iLCBlcnIpOworCWlmICghZm9vdGJyaWRnZV9jZm5fbW9kZSgpKQorCQlyZXR1cm4gMDsKKworCS8qIFBlcnNvbmFsIHNlcnZlciBkb2Vzbid0IGhhdmUgUlRDICovCisJaWYgKCFtYWNoaW5lX2lzX3BlcnNvbmFsX3NlcnZlcigpKSB7CisJCWlzYV9ydGNfaW5pdCgpOworCQllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOworCQlpZiAoZXJyKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgUlRDIGRldmljZTogJWRcbiIsIGVycik7CisJfQogCWVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7CiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgc2VyaWFsIGRldmljZTogJWRcbiIsIGVycik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3RpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QxYjU0Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC90aW1lLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZy4KLSAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbCBCbHVuZGVsbAotICoKLSAqIENBVFMgaGFzIGEgcmVhbC10aW1lIGNsb2NrLCB0aG91Z2ggdGhlIGV2YWx1YXRpb24gYm9hcmQgZG9lc24ndC4KLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKiAgMjEtTWFyLTE5OTgJUk1LCUNyZWF0ZWQKLSAqICAyNy1BdWctMTk5OAlQSkIJQ0FUUyBzdXBwb3J0Ci0gKiAgMjgtRGVjLTE5OTgJQVBICU1hZGUgbGVkcyBvcHRpb25hbAotICogIDIwLUphbi0xOTk5CVJNSwlTdGFydGVkIG1lcmdlIG9mIEVCU0EyODUsIENBVFMgYW5kIE5ldFdpbmRlcgotICogIDE2LU1hci0xOTk5CVJNSwlNb3JlIHN1cHBvcnQgZm9yIEVCU0EyODUtbGlrZSBtYWNoaW5lcyB3aXRoIFJUQ3MgaW4KLSAqLwotCi0jZGVmaW5lIFJUQ19QT1JUKHgpCQkocnRjX2Jhc2UrKHgpKQotI2RlZmluZSBSVENfQUxXQVlTX0JDRAkJMAotCi0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLXN0YXRpYyBpbnQgcnRjX2Jhc2U7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBnZXRfaXNhX2Ntb3NfdGltZSh2b2lkKQotewotCXVuc2lnbmVkIGludCB5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWM7Ci0KLQkvLyBjaGVjayB0byBzZWUgaWYgdGhlIFJUQyBtYWtlcyBzZW5zZS4uLi4uCi0JaWYgKChDTU9TX1JFQUQoUlRDX1ZBTElEKSAmIFJUQ19WUlQpID09IDApCi0JCXJldHVybiBta3RpbWUoMTk3MCwgMSwgMSwgMCwgMCwgMCk7Ci0KLQlkbyB7Ci0JCXNlYyAgPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpOwotCQltaW4gID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKLQkJaG91ciA9IENNT1NfUkVBRChSVENfSE9VUlMpOwotCQlkYXkgID0gQ01PU19SRUFEKFJUQ19EQVlfT0ZfTU9OVEgpOwotCQltb24gID0gQ01PU19SRUFEKFJUQ19NT05USCk7Ci0JCXllYXIgPSBDTU9TX1JFQUQoUlRDX1lFQVIpOwotCX0gd2hpbGUgKHNlYyAhPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpKTsKLQotCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlzZWMgPSBiY2QyYmluKHNlYyk7Ci0JCW1pbiA9IGJjZDJiaW4obWluKTsKLQkJaG91ciA9IGJjZDJiaW4oaG91cik7Ci0JCWRheSA9IGJjZDJiaW4oZGF5KTsKLQkJbW9uID0gYmNkMmJpbihtb24pOwotCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKLQl9Ci0JaWYgKCh5ZWFyICs9IDE5MDApIDwgMTk3MCkKLQkJeWVhciArPSAxMDA7Ci0JcmV0dXJuIG1rdGltZSh5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMpOwotfQotCi1zdGF0aWMgaW50IHNldF9pc2FfY21vc190aW1lKHZvaWQpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0JaW50IHJlYWxfc2Vjb25kcywgcmVhbF9taW51dGVzLCBjbW9zX21pbnV0ZXM7Ci0JdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7Ci0JdW5zaWduZWQgbG9uZyBub3d0aW1lID0geHRpbWUudHZfc2VjOwotCi0Jc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsgLyogdGVsbCB0aGUgY2xvY2sgaXQncyBiZWluZyBzZXQgKi8KLQlDTU9TX1dSSVRFKChzYXZlX2NvbnRyb2x8UlRDX1NFVCksIFJUQ19DT05UUk9MKTsKLQotCXNhdmVfZnJlcV9zZWxlY3QgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKTsgLyogc3RvcCBhbmQgcmVzZXQgcHJlc2NhbGVyICovCi0JQ01PU19XUklURSgoc2F2ZV9mcmVxX3NlbGVjdHxSVENfRElWX1JFU0VUMiksIFJUQ19GUkVRX1NFTEVDVCk7Ci0KLQljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwotCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7Ci0KLQkvKgotCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCi0JICogZG9uJ3QgaW50ZXJmZXJlIHdpdGggaG91ciBvdmVyZmxvdy4gVGhpcyBhdm9pZHMKLQkgKiBtZXNzaW5nIHdpdGggdW5rbm93biB0aW1lIHpvbmVzIGJ1dCByZXF1aXJlcyB5b3VyCi0JICogUlRDIG5vdCB0byBiZSBvZmYgYnkgbW9yZSB0aGFuIDE1IG1pbnV0ZXMKLQkgKi8KLQlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7Ci0JcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOwotCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCi0JCXJlYWxfbWludXRlcyArPSAzMDsJCS8qIGNvcnJlY3QgZm9yIGhhbGYgaG91ciB0aW1lIHpvbmUgKi8KLQlyZWFsX21pbnV0ZXMgJT0gNjA7Ci0KLQlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewotCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOwotCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwotCQl9Ci0JCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKLQkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwotCX0gZWxzZQotCQlyZXR2YWwgPSAtMTsKLQotCS8qIFRoZSBmb2xsb3dpbmcgZmxhZ3MgaGF2ZSB0byBiZSByZWxlYXNlZCBleGFjdGx5IGluIHRoaXMgb3JkZXIsCi0JICogb3RoZXJ3aXNlIHRoZSBEUzEyODg3IChwb3B1bGFyIE1DMTQ2ODE4QSBjbG9uZSB3aXRoIGludGVncmF0ZWQKLQkgKiBiYXR0ZXJ5IGFuZCBxdWFydHopIHdpbGwgbm90IHJlc2V0IHRoZSBvc2NpbGxhdG9yIGFuZCB3aWxsIG5vdAotCSAqIHVwZGF0ZSBwcmVjaXNlbHkgNTAwIG1zIGxhdGVyLiBZb3Ugd29uJ3QgZmluZCB0aGlzIG1lbnRpb25lZCBpbgotCSAqIHRoZSBEYWxsYXMgU2VtaWNvbmR1Y3RvciBkYXRhIHNoZWV0cywgYnV0IHdobyBiZWxpZXZlcyBkYXRhCi0JICogc2hlZXRzIGFueXdheSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBNYXJrdXMgS3VobgotCSAqLwotCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7Ci0JQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCBfX2luaXQgaXNhX3J0Y19pbml0KHZvaWQpCi17Ci0JaWYgKG1hY2hpbmVfaXNfcGVyc29uYWxfc2VydmVyKCkpCi0JCS8qCi0JCSAqIEFkZC1pbiAyMTI4NXMgc2hvdWxkbid0IGFjY2VzcyB0aGUgUlRDCi0JCSAqLwotCQlydGNfYmFzZSA9IDA7Ci0JZWxzZQotCQlydGNfYmFzZSA9IDB4NzA7Ci0KLQlpZiAocnRjX2Jhc2UpIHsKLQkJaW50IHJlZ19kLCByZWdfYjsKLQotCQkvKgotCQkgKiBQcm9iZSBmb3IgdGhlIFJUQy4KLQkJICovCi0JCXJlZ19kID0gQ01PU19SRUFEKFJUQ19SRUdfRCk7Ci0KLQkJLyoKLQkJICogbWFrZSBzdXJlIHRoZSBkaXZpZGVyIGlzIHNldAotCQkgKi8KLQkJQ01PU19XUklURShSVENfUkVGX0NMQ0tfMzJLSFosIFJUQ19SRUdfQSk7Ci0KLQkJLyoKLQkJICogU2V0IGNvbnRyb2wgcmVnIEIKLQkJICogICAoMjQgaG91ciBtb2RlLCB1cGRhdGUgZW5hYmxlZCkKLQkJICovCi0JCXJlZ19iID0gQ01PU19SRUFEKFJUQ19SRUdfQikgJiAweDdmOwotCQlyZWdfYiB8PSAyOwotCQlDTU9TX1dSSVRFKHJlZ19iLCBSVENfUkVHX0IpOwotCi0JCWlmICgoQ01PU19SRUFEKFJUQ19SRUdfQSkgJiAweDdmKSA9PSBSVENfUkVGX0NMQ0tfMzJLSFogJiYKLQkJICAgIENNT1NfUkVBRChSVENfUkVHX0IpID09IHJlZ19iKSB7Ci0JCQlzdHJ1Y3QgdGltZXNwZWMgdHY7Ci0KLQkJCS8qCi0JCQkgKiBXZSBoYXZlIGEgUlRDLiAgQ2hlY2sgdGhlIGJhdHRlcnkKLQkJCSAqLwotCQkJaWYgKChyZWdfZCAmIDB4ODApID09IDApCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUlRDOiAqKiogd2FybmluZzogQ01PUyBiYXR0ZXJ5IGJhZFxuIik7Ci0KLQkJCXR2LnR2X25zZWMgPSAwOwotCQkJdHYudHZfc2VjID0gZ2V0X2lzYV9jbW9zX3RpbWUoKTsKLQkJCWRvX3NldHRpbWVvZmRheSgmdHYpOwotCQkJc2V0X3J0YyA9IHNldF9pc2FfY21vc190aW1lOwotCQl9IGVsc2UKLQkJCXJ0Y19iYXNlID0gMDsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC90dGNfZGtiLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90dGNfZGtiLmMKaW5kZXggOGY0OWIyYi4uYjIyZGVjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvdHRjX2RrYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYwpAQCAtMjQsOCArMjQsNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLSNkZWZpbmUgQVJSQVlfQU5EX1NJWkUoeCkgICAgICAgKHgpLCBBUlJBWV9TSVpFKHgpCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHR0Y19ka2JfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJLyogVUFSVDIgKi8KIAlHUElPNDdfVUFSVDJfUlhELApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXh0X3RkNjAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL214dF90ZDYwLmMKaW5kZXggMDNkYmJkYy4uOGJjYzFhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbXh0X3RkNjAuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teHRfdGQ2MC5jCkBAIC01OCwyMSArNTgsNiBAQAogCVBFOV9QRl9VQVJUM19SWEQsCiAJUEUxMF9QRl9VQVJUM19DVFMsCiAJUEUxMV9QRl9VQVJUM19SVFMsCi0JLyogVUFSVDMgKi8KLQlQQjI2X0FGX1VBUlQ0X1JUUywKLQlQQjI4X0FGX1VBUlQ0X1RYRCwKLQlQQjI5X0FGX1VBUlQ0X0NUUywKLQlQQjMxX0FGX1VBUlQ0X1JYRCwKLQkvKiBVQVJUNCAqLwotCVBCMThfQUZfVUFSVDVfVFhELAotCVBCMTlfQUZfVUFSVDVfUlhELAotCVBCMjBfQUZfVUFSVDVfQ1RTLAotCVBCMjFfQUZfVUFSVDVfUlRTLAotCS8qIFVBUlQ1ICovCi0JUEIxMF9BRl9VQVJUNl9UWEQsCi0JUEIxMl9BRl9VQVJUNl9DVFMsCi0JUEIxMV9BRl9VQVJUNl9SWEQsCi0JUEIxM19BRl9VQVJUNl9SVFMsCiAJLyogRkVDICovCiAJUEQwX0FJTl9GRUNfVFhEMCwKIAlQRDFfQUlOX0ZFQ19UWEQxLApAQCAtMjYxLDEyICsyNDYsNiBAQAogCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogCX0sIHsKIAkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwgewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIAl9LAogfTsKIApAQCAtMjc4LDkgKzI1Nyw2IEBACiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGFbMF0pOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzFdKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsyXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMywgJnVhcnRfcGRhdGFbM10pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTQsICZ1YXJ0X3BkYXRhWzRdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2U1LCAmdWFydF9wZGF0YVs1XSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbXh0X3RkNjBfbmFuZF9ib2FyZF9pbmZvKTsKIAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG14dF90ZDYwX2kyY19kZXZpY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwppbmRleCBlZjI2OTUxLi42ZTgzOGI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwpAQCAtMTczLDYgKzE3Myw3IEBACiBERUZJTkVfQ0xPQ0soa3BwX2NsaywJIDAsIENDTV9DR0NSMSwgMjgsIGdldF9yYXRlX2lwZywgTlVMTCk7CiBERUZJTkVfQ0xPQ0sodHNjX2NsaywJIDAsIENDTV9DR0NSMiwgMTMsIGdldF9yYXRlX2lwZywgTlVMTCk7CiBERUZJTkVfQ0xPQ0soaTJjX2NsaywJIDAsIENDTV9DR0NSMCwgIDYsIGdldF9yYXRlX2kyYywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZmVjX2NsaywJIDAsIENDTV9DR0NSMCwgMjMsIGdldF9yYXRlX2lwZywgTlVMTCk7CiAKICNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpCVwKIAl7CQkJCVwKQEAgLTIwNCw2ICsyMDUsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjIiLCBOVUxMLCBpMmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQogfTsKIAogaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCmluZGV4IDYzNTExZGUuLjlmZGVlYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwpAQCAtNDE5LDMgKzQxOSwyMiBAQAogCXJldHVybiBteGNfZ3Bpb19pbml0KGlteF9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteF9ncGlvX3BvcnRzKSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyNV9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWDI1X0ZFQ19CQVNFX0FERFIsCisJCS5lbmQJPSBNWDI1X0ZFQ19CQVNFX0FERFIgKyAweGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IE1YMjVfSU5UX0ZFQywKKwkJLmVuZAk9IE1YMjVfSU5UX0ZFQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyNV9mZWNfZGV2aWNlID0geworCS5uYW1lCT0gImZlYyIsCisJLmlkCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXgyNV9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBteDI1X2ZlY19yZXNvdXJjZXMsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmgKaW5kZXggZmU2YmY4OC4uZmU1NDIwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5oCkBAIC0xNywzICsxNyw0IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI1X2ZlY19kZXZpY2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYwppbmRleCBkMjNhZTU3Li45MjFiYzk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKQEAgLTE4LDEwICsxOCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9mZWMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM1LDE2ICszNiw1NyBAQAogI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KICNpbmNsdWRlICJkZXZpY2VzLmgiCi0jaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KIAogc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIAorc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDI1cGRrX3BhZHNbXSA9IHsKKwlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDLAorCU1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKKwlNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwLAorCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEsCisJTVgyNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCisJTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMCwKKwlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExLAorCU1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAorCU1YMjVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCisJTVgyNV9QQURfQTE3X19HUElPXzJfMywgLyogRkVDX0VOLCBHUElPIDM1ICovCisJTVgyNV9QQURfRDEyX19HUElPXzRfOCwgLyogRkVDX1JFU0VUX0IsIEdQSU8gMTA0ICovCit9OworCitzdGF0aWMgc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhIG14MjVfZmVjX3BkYXRhID0geworICAgICAgICAucGh5ICAgID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksCit9OworCisjZGVmaW5lIEZFQ19FTkFCTEVfR1BJTwkJMzUKKyNkZWZpbmUgRkVDX1JFU0VUX0JfR1BJTwkxMDQKKworc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfZmVjX3Jlc2V0KHZvaWQpCit7CisJZ3Bpb19yZXF1ZXN0KEZFQ19FTkFCTEVfR1BJTywgIkZFQyBQSFkgZW5hYmxlIik7CisJZ3Bpb19yZXF1ZXN0KEZFQ19SRVNFVF9CX0dQSU8sICJGRUMgUEhZIHJlc2V0Iik7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX0VOQUJMRV9HUElPLCAwKTsgIC8qIGRyb3AgUEhZIHBvd2VyICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEZFQ19SRVNFVF9CX0dQSU8sIDApOyAvKiBhc3NlcnQgcmVzZXQgKi8KKwl1ZGVsYXkoMik7CisKKwkvKiB0dXJuIG9uIFBIWSBwb3dlciBhbmQgbGlmdCByZXNldCAqLworCWdwaW9fc2V0X3ZhbHVlKEZFQ19FTkFCTEVfR1BJTywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoRkVDX1JFU0VUX0JfR1BJTywgMSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX2luaXQodm9pZCkKIHsKKwlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDI1cGRrX3BhZHMsCisJCQlBUlJBWV9TSVpFKG14MjVwZGtfcGFkcykpOworCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7CisKKwlteDI1cGRrX2ZlY19yZXNldCgpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfZmVjX2RldmljZSwgJm14MjVfZmVjX3BkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKaW5kZXggZWE4ZWQxMC4uMjgyOTQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCkBAIC00OSw2ICs0OSw3IEBACiBjb25maWcgTUFDSF9NWDMxTElURQogCWJvb2wgIlN1cHBvcnQgTVgzMSBMSVRFS0lUIChMb2dpY1BEKSIKIAlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDMxIExJVEVLSVQgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKIAkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KQEAgLTYzLDcgKzY0LDcgQEAKIGNvbmZpZyBNQUNIX01YMzFNT0JPQVJECiAJYm9vbCAiU3VwcG9ydCBteDMxbW9ib2FyZCBwbGF0Zm9ybXMgKEVQRkwgTW9ib3RzIGdyb3VwKSIKIAlzZWxlY3QgQVJDSF9NWDMxCi0Jc2VsZWN0IE1YQ19VTFBJCisJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBteDMxbW9ib2FyZCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggYmVkZjViOC4uNjg1OGE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC02NSw2ICs2NSwxMSBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKIAkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbCA9IFNQQkEwX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gU1BCQTBfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYwppbmRleCAwNDk3YzE1Li4zZTdiYWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCkBAIC00OTQsMTEgKzQ5NCw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMWFkc19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7Ci0JCS52aXJ0dWFsCT0gU1BCQTBfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IFNQQkEwX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LCB7CiAJCS52aXJ0dWFsCT0gQ1M0X0JBU0VfQUREUl9WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1M0X0JBU0VfQUREUiksCiAJCS5sZW5ndGgJCT0gQ1M0X1NJWkUgLyAyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMKaW5kZXggZGVmNmI2Ny4uNzg5YjIwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jCkBAIC0xMzUsNiArMTM1LDcgQEAKICAqIFVTQgogICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKICNkZWZpbmUgVVNCX1BBRF9DRkcgKFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX0hZU19DTU9TIHwgXAogCQkJUEFEX0NUTF9PREVfQ01PUyB8IFBBRF9DVExfMTAwS19QVSkKIApAQCAtMTgwLDYgKzE4MSw3IEBACiAJLnBvcnRzYyA9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKIAkuZmxhZ3MgID0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAogfTsKKyNlbmRpZgogCiAvKgogICogTk9SIGZsYXNoCkBAIC0yMTIsMTEgKzIxNCw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMWxpdGVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewotCQkudmlydHVhbCA9IFNQQkEwX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gU1BCQTBfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewogCQkudmlydHVhbCA9IENTNF9CQVNFX0FERFJfVklSVCwKIAkJLnBmbiA9IF9fcGh5c190b19wZm4oQ1M0X0JBU0VfQUREUiksCiAJCS5sZW5ndGggPSBDUzRfU0laRSwKQEAgLTI2MSwxMSArMjU4LDEzIEBACiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UxLCAmc3BpMV9wZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oJm1jMTM3ODNfc3BpX2RldiwgMSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAkvKiBVU0IgKi8KIAl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCiAJCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKKyNlbmRpZgogCiAJLyogU01TQzkxMTcgSVJRIHBpbiAqLwogCXJldCA9IGdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX1NGUzYpLCAic21zOTExNy1pcnEiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCmluZGV4IDhmYzYyNGYuLjQzODQyOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAKIAl1c2JoMV9wZGF0YS5vdGcgPSBvdGc7CiAKLQlyZXR1cm4gbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzMV91c2JoMSwgJnVzYmgxX3BkYXRhKTsKKwlyZXR1cm4gbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgxLCAmdXNiaDFfcGRhdGEpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCmluZGV4IDg1MTg0YTMuLjFmNDRiOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCiAJdXNiaDFfcGRhdGEub3RnID0gb3RnOwogCi0JcmV0dXJuIG14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MzFfdXNiaDEsICZ1c2JoMV9wZGF0YSk7CisJcmV0dXJuIG14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMSwgJnVzYmgxX3BkYXRhKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jCmluZGV4IGI3MDUyOTEuLmNmZDYwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYwpAQCAtMzQ2LDYgKzM0Niw4IEBACiAJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VMUEksCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCisKICNkZWZpbmUgVVNCSDJfRU5fQiBJT01VWF9UT19HUElPKE1YMzFfUElOX1NDSzYpCiAKIHN0YXRpYyBpbnQgbW9ib2FyZF91c2JoMl9od19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0zOTIsOCArMzk0LDExIEBACiAJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKIAotCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDMxX3VzYmgyLCAmdXNiaDJfcGRhdGEpOworCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbW9ib2FyZF91c2JoMl9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgbXgzMW1vYm9hcmRfbGVkc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCmluZGV4IDBmN2EyZjAuLjE4NzE1ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMKQEAgLTIxMSwxMSArMjExLDYgQEAKICAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxcGRrX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLnZpcnR1YWwgPSBTUEJBMF9CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oU1BCQTBfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IFNQQkEwX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFX05PTlNIQVJFRCwKLQl9LCB7CiAJCS52aXJ0dWFsID0gQ1M1X0JBU0VfQUREUl9WSVJULAogCQkucGZuID0gX19waHlzX3RvX3BmbihDUzVfQkFTRV9BRERSKSwKIAkJLmxlbmd0aCA9IENTNV9TSVpFLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwppbmRleCA2Y2JhYWJlLi41YmUzOTY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwpAQCAtMzIyLDE2ICszMjIsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzdfaTJjXzJfZGV2aWNlc1tdID0geworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzdfaTJjX2NhbWVyYVtdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oIm10OXQwMzEiLCAweDVkKSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJtdDl2MDIyIiwgMHg0OCksCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua19tdDl2MDIyID0geworCS5idXNfaWQJCT0gMCwJCS8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEICovCisJLmJvYXJkX2luZm8JPSAmcGNtMDM3X2kyY19jYW1lcmFbMV0sCisJLmkyY19hZGFwdGVyX2lkCT0gMiwKKwkubW9kdWxlX25hbWUJPSAibXQ5djAyMiIsCit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmtfbXQ5dDAzMSA9IHsKIAkuYnVzX2lkCQk9IDAsCQkvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCAqLwogCS5wb3dlcgkJPSBwY20wMzdfY2FtZXJhX3Bvd2VyLAotCS5ib2FyZF9pbmZvCT0gJnBjbTAzN19pMmNfMl9kZXZpY2VzWzBdLAorCS5ib2FyZF9pbmZvCT0gJnBjbTAzN19pMmNfY2FtZXJhWzBdLAogCS5pMmNfYWRhcHRlcl9pZAk9IDIsCiAJLm1vZHVsZV9uYW1lCT0gIm10OXQwMzEiLAogfTsKQEAgLTM0NSwxMSArMzU0LDE5IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM3X2NhbWVyYSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19tdDl0MDMxID0gewogCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCiAJLmlkCT0gMCwKIAkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssCisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua19tdDl0MDMxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY20wMzdfbXQ5djAyMiA9IHsKKwkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCS5pZAk9IDEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rX210OXYwMjIsCiAJfSwKIH07CiAKQEAgLTQ0OSw3ICs0NjYsOCBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwY20wMzdfZmxhc2gsCiAJJnBjbTAzN19zcmFtX2RldmljZSwKLQkmcGNtMDM3X2NhbWVyYSwKKwkmcGNtMDM3X210OXQwMzEsCisJJnBjbTAzN19tdDl2MDIyLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcHVfcGxhdGZvcm1fZGF0YSBteDNfaXB1X2RhdGEgPSB7CkBAIC01OTksNyArNjE3LDcgQEAKIAlpZiAoIXJldCkKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQ1NJX0Q1KSwgMSk7CiAJZWxzZQotCQlpY2xpbmsucG93ZXIgPSBOVUxMOworCQlpY2xpbmtfbXQ5dDAzMS5wb3dlciA9IE5VTEw7CiAKIAlpZiAoIXBjbTAzN19jYW1lcmFfYWxsb2NfZG1hKDQgKiAxMDI0ICogMTAyNCkpCiAJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19jYW1lcmEsICZjYW1lcmFfcGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggOGEwODM3ZS4uZGVlOTIxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC0zNyw2ICszNyw4IEBACiBjb25maWcgTUFDSF9MSVRUTEVUT04KIAlib29sICJQWEEzeHggRm9ybSBGYWN0b3IgUGxhdGZvcm0gKGFrYSBMaXR0bGV0b24pIgogCXNlbGVjdCBQWEEzeHgKKwlzZWxlY3QgQ1BVX1BYQTMwMAorCXNlbGVjdCBDUFVfUFhBMzEwCiAJc2VsZWN0IFBYQV9TU1AKIAogY29uZmlnIE1BQ0hfVEFWT1JFVkIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC96eWxvbml0ZS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3p5bG9uaXRlLmgKaW5kZXggYmY2Nzg1YS4uOWVkZjY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3p5bG9uaXRlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3p5bG9uaXRlLmgKQEAgLTgsMTMgKzgsNiBAQAogLyogdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHByb2Nlc3NvciBzcGVjaWZpYyBhbmQgaW5pdGlhbGl6ZWQKICAqIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHp5bG9uaXRlX3B4YTN4eF9pbml0KCkKICAqLwotc3RydWN0IHBsYXRmb3JtX21tY19zbG90IHsKLQlpbnQgZ3Bpb19jZDsKLQlpbnQgZ3Bpb193cDsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fbW1jX3Nsb3Qgenlsb25pdGVfbW1jX3Nsb3RbXTsKLQogZXh0ZXJuIGludCBncGlvX2V0aF9pcnE7CiBleHRlcm4gaW50IGdwaW9fZGVidWdfbGVkMTsKIGV4dGVybiBpbnQgZ3Bpb19kZWJ1Z19sZWQyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCBmMjhjMTcxLi5mYTUyN2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMTEwLDYgKzExMCwxMiBAQAogCUdQSU83X01NQzFfQ0xLLAogCUdQSU84X01NQzFfQ01ELAogCUdQSU8xNV9HUElPLCAvKiBjYXJkIGRldGVjdCAqLworCisJLyogVUFSVDMgKi8KKwlHUElPMTA3X1VBUlQzX0NUUywKKwlHUElPMTA4X1VBUlQzX1JUUywKKwlHUElPMTA5X1VBUlQzX1RYRCwKKwlHUElPMTEwX1VBUlQzX1JYRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwppbmRleCBlNWVlYjNhLi5jMmI5MzhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJLmluaXQgCQkJPSBwb29kbGVfbWNpX2luaXQsCiAJLnNldHBvd2VyIAkJPSBwb29kbGVfbWNpX3NldHBvd2VyLAogCS5leGl0CQkJPSBwb29kbGVfbWNpX2V4aXQsCi0JLmdwaW9fY2FyZF9kZXRlY3QJPSBQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IFBPT0RMRV9HUElPX25TRF9ERVRFQ1QsCiAJLmdwaW9fY2FyZF9ybwkJPSBQT09ETEVfR1BJT19uU0RfV1AsCiAJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCmluZGV4IDViOTg2YTguLjc1ZjJhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CisjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC02MjYsOCArNjI3LDI3IEBACiAJcHhhMjd4X2NwdV9zdXNwZW5kKFBXUk1PREVfREVFUFNMRUVQKTsKIH0KIAotaW50IHpldXNfZ2V0X3BjYl9pbmZvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGdwaW8sCi0JCSAgICAgIHVuc2lnbmVkIG5ncGlvLCB2b2lkICpjb250ZXh0KQorI2lmZGVmIENPTkZJR19BUE1fRU1VTEFUSU9OCitzdGF0aWMgdm9pZCB6ZXVzX2dldF9wb3dlcl9zdGF0dXMoc3RydWN0IGFwbV9wb3dlcl9pbmZvICppbmZvKQoreworCS8qIFBvd2VyIHN1cHBseSBpcyBhbHdheXMgcHJlc2VudCAqLworCWluZm8tPmFjX2xpbmVfc3RhdHVzCT0gQVBNX0FDX09OTElORTsKKwlpbmZvLT5iYXR0ZXJ5X3N0YXR1cwk9IEFQTV9CQVRURVJZX1NUQVRVU19OT1RfUFJFU0VOVDsKKwlpbmZvLT5iYXR0ZXJ5X2ZsYWcJPSBBUE1fQkFUVEVSWV9GTEFHX05PVF9QUkVTRU5UOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgemV1c19zZXR1cF9hcG0odm9pZCkKK3sKKwlhcG1fZ2V0X3Bvd2VyX3N0YXR1cyA9IHpldXNfZ2V0X3Bvd2VyX3N0YXR1czsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgemV1c19zZXR1cF9hcG0odm9pZCkKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHpldXNfZ2V0X3BjYl9pbmZvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGdwaW8sCisJCQkgICAgIHVuc2lnbmVkIG5ncGlvLCB2b2lkICpjb250ZXh0KQogewogCWludCBpOwogCXU4IHBjYl9pbmZvID0gMDsKQEAgLTcyNiw5ICs3NDYsMTggQEAKIAlHUElPOTlfR1BJTywJCS8qIENGIFJEWSAqLwogfTsKIAorLyoKKyAqIERNOWsgTVNDeCBzZXR0aW5nczoJU1JBTSwgMTYgYml0cworICoJCQkxNyBjeWNsZXMgZGVsYXkgZmlyc3QgYWNjZXNzCisgKgkJCSA1IGN5Y2xlcyBkZWxheSBuZXh0IGFjY2VzcworICoJCQkxMyBjeWNsZXMgcmVjb3ZlcnkgdGltZQorICoJCQlmYXN0ZXIgZGV2aWNlCisgKi8KKyNkZWZpbmUgRE05S19NU0NfVkFMVUUJCTB4ZTRjOQorCiBzdGF0aWMgdm9pZCBfX2luaXQgemV1c19pbml0KHZvaWQpCiB7Ci0JdTE2IGRtOTAwMF9tc2MgPSAweGUyNzk7CisJdTE2IGRtOTAwMF9tc2MgPSBETTlLX01TQ19WQUxVRTsKIAogCXN5c3RlbV9yZXYgPSBfX3Jhd19yZWFkdyhaRVVTX0NQTERfVkVSU0lPTik7CiAJcHJfaW5mbygiWmV1cyBDUExEIFYlZEklZFxuIiwgKHN5c3RlbV9yZXYgJiAweGYwKSA+PiA0LCAoc3lzdGVtX3JldiAmIDB4MGYpKTsKQEAgLTczOCw2ICs3NjcsNyBAQAogCU1TQzEgPSAoTVNDMSAmIDB4ZmZmZjAwMDApIHwgZG05MDAwX21zYzsKIAogCXBtX3Bvd2VyX29mZiA9IHpldXNfcG93ZXJfb2ZmOworCXpldXNfc2V0dXBfYXBtKCk7CiAKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRSh6ZXVzX3Bpbl9jb25maWcpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKaW5kZXggYjY2ZTllMi4uMmI0MDQzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCkBAIC0zNiw5ICszNiw2IEBACiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotI2RlZmluZSBNQVhfU0xPVFMJMwotc3RydWN0IHBsYXRmb3JtX21tY19zbG90IHp5bG9uaXRlX21tY19zbG90W01BWF9TTE9UU107Ci0KIGludCBncGlvX2V0aF9pcnE7CiBpbnQgZ3Bpb19kZWJ1Z19sZWQxOwogaW50IGdwaW9fZGVidWdfbGVkMjsKQEAgLTIyMCw4NCArMjE3LDI4IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01NQykKLXN0YXRpYyBpbnQgenlsb25pdGVfbWNpX3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0KLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoenlsb25pdGVfbW1jX3Nsb3RbcGRldi0+aWRdLmdwaW9fd3ApOwotfQotCi1zdGF0aWMgaW50IHp5bG9uaXRlX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgaXJxX2hhbmRsZXJfdCB6eWxvbml0ZV9kZXRlY3RfaW50LAotCQkJICAgICB2b2lkICpkYXRhKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlpbnQgZXJyLCBjZF9pcnEsIGdwaW9fY2QsIGdwaW9fd3A7Ci0KLQljZF9pcnEgPSBncGlvX3RvX2lycSh6eWxvbml0ZV9tbWNfc2xvdFtwZGV2LT5pZF0uZ3Bpb19jZCk7Ci0JZ3Bpb19jZCA9IHp5bG9uaXRlX21tY19zbG90W3BkZXYtPmlkXS5ncGlvX2NkOwotCWdwaW9fd3AgPSB6eWxvbml0ZV9tbWNfc2xvdFtwZGV2LT5pZF0uZ3Bpb193cDsKLQotCS8qCi0JICogc2V0dXAgR1BJTyBmb3IgWnlsb25pdGUgTU1DIGNvbnRyb2xsZXIKLQkgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19jZCwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19jZCk7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb193cCwgIm1tYyB3cml0ZSBwcm90ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF93cDsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3dwKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKGNkX2lycSwgenlsb25pdGVfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBNTUMvU0QvU0RJTzogIgotCQkJCSJjYW4ndCByZXF1ZXN0IGNhcmQgZGV0ZWN0IElSUVxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3JlcXVlc3RfaXJxOgotCWdwaW9fZnJlZShncGlvX3dwKTsKLWVycl9yZXF1ZXN0X3dwOgotCWdwaW9fZnJlZShncGlvX2NkKTsKLWVycl9yZXF1ZXN0X2NkOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHp5bG9uaXRlX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0JaW50IGNkX2lycSwgZ3Bpb19jZCwgZ3Bpb193cDsKLQotCWNkX2lycSA9IGdwaW9fdG9faXJxKHp5bG9uaXRlX21tY19zbG90W3BkZXYtPmlkXS5ncGlvX2NkKTsKLQlncGlvX2NkID0genlsb25pdGVfbW1jX3Nsb3RbcGRldi0+aWRdLmdwaW9fY2Q7Ci0JZ3Bpb193cCA9IHp5bG9uaXRlX21tY19zbG90W3BkZXYtPmlkXS5ncGlvX3dwOwotCi0JZnJlZV9pcnEoY2RfaXJxLCBkYXRhKTsKLQlncGlvX2ZyZWUoZ3Bpb19jZCk7Ci0JZ3Bpb19mcmVlKGdwaW9fd3ApOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaV9wbGF0Zm9ybV9kYXRhID0gewogCS5kZXRlY3RfZGVsYXkJPSAyMCwKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHp5bG9uaXRlX21jaV9pbml0LAotCS5leGl0CQk9IHp5bG9uaXRlX21jaV9leGl0LAotCS5nZXRfcm8JCT0genlsb25pdGVfbWNpX3JvLAotCS5ncGlvX2NhcmRfZGV0ZWN0ID0gLTEsCi0JLmdwaW9fY2FyZF9ybwk9IC0xLAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gRVhUX0dQSU8oMCksCisJLmdwaW9fY2FyZF9ybwk9IEVYVF9HUElPKDIpLAogCS5ncGlvX3Bvd2VyCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKIAkuZGV0ZWN0X2RlbGF5CT0gMjAsCiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gRVhUX0dQSU8oMSksCisJLmdwaW9fY2FyZF9ybwk9IEVYVF9HUElPKDMpLAorCS5ncGlvX3Bvd2VyCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaTNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZGV0ZWN0X2RlbGF5CT0gMjAsCisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gRVhUX0dQSU8oMzApLAorCS5ncGlvX2NhcmRfcm8JPSBFWFRfR1BJTygzMSksCisJLmdwaW9fcG93ZXIJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB6eWxvbml0ZV9pbml0X21tYyh2b2lkKQpAQCAtMzA1LDcgKzI0Niw3IEBACiAJcHhhX3NldF9tY2lfaW5mbygmenlsb25pdGVfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YTN4eF9zZXRfbWNpMl9pbmZvKCZ6eWxvbml0ZV9tY2kyX3BsYXRmb3JtX2RhdGEpOwogCWlmIChjcHVfaXNfcHhhMzEwKCkpCi0JCXB4YTN4eF9zZXRfbWNpM19pbmZvKCZ6eWxvbml0ZV9tY2lfcGxhdGZvcm1fZGF0YSk7CisJCXB4YTN4eF9zZXRfbWNpM19pbmZvKCZ6eWxvbml0ZV9tY2kzX3BsYXRmb3JtX2RhdGEpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB6eWxvbml0ZV9pbml0X21tYyh2b2lkKSB7fQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYwppbmRleCA4NDA5NTQ0Li4zYWE3M2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYwpAQCAtMTI5LDggKzEyOSw4IEBACiAJR1BJTzIyX0kyQ19TREEsCiAKIAkvKiBHUElPICovCi0JR1BJTzE4X0dQSU8sCS8qIEdQSU8gRXhwYW5kZXIgIzAgSU5UX04gKi8KLQlHUElPMTlfR1BJTywJLyogR1BJTyBFeHBhbmRlciAjMSBJTlRfTiAqLworCUdQSU8xOF9HUElPIHwgTUZQX1BVTExfSElHSCwJLyogR1BJTyBFeHBhbmRlciAjMCBJTlRfTiAqLworCUdQSU8xOV9HUElPIHwgTUZQX1BVTExfSElHSCwJLyogR1BJTyBFeHBhbmRlciAjMSBJTlRfTiAqLwogfTsKIAogc3RhdGljIG1mcF9jZmdfdCBweGEzMDBfbWZwX2NmZ1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yNTgsMTAgKzI1OCw2IEBACiAJCS8qIGRldGVjdCBMQ0QgcGFuZWwgKi8KIAkJenlsb25pdGVfZGV0ZWN0X2xjZF9wYW5lbCgpOwogCi0JCS8qIE1NQyBjYXJkIGRldGVjdCAmIHdyaXRlIHByb3RlY3QgZm9yIGNvbnRyb2xsZXIgMCAqLwotCQl6eWxvbml0ZV9tbWNfc2xvdFswXS5ncGlvX2NkICA9IEVYVF9HUElPKDApOwotCQl6eWxvbml0ZV9tbWNfc2xvdFswXS5ncGlvX3dwICA9IEVYVF9HUElPKDIpOwotCiAJCS8qIFdNOTcxMyBJUlEgKi8KIAkJd205NzEzX2lycSA9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzI2KTsKIApAQCAtMjc2LDEwICsyNzIsNiBAQAogCWlmIChjcHVfaXNfcHhhMzEwKCkpIHsKIAkJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUocHhhMzEwX21mcF9jZmcpKTsKIAkJZ3Bpb19ldGhfaXJxID0gbWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPMTAyKTsKLQotCQkvKiBNTUMgY2FyZCBkZXRlY3QgJiB3cml0ZSBwcm90ZWN0IGZvciBjb250cm9sbGVyIDIgKi8KLQkJenlsb25pdGVfbW1jX3Nsb3RbMl0uZ3Bpb19jZCA9IEVYVF9HUElPKDMwKTsKLQkJenlsb25pdGVfbW1jX3Nsb3RbMl0uZ3Bpb193cCA9IEVYVF9HUElPKDMxKTsKIAl9CiAKIAkvKiBHUElPcyBmb3IgRGVidWcgTEVEcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwppbmRleCA2MGQwOGYyLi45OTQyYmFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwpAQCAtMjA5LDEwICsyMDksNiBAQAogCQlncGlvX2RlYnVnX2xlZDEJPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8xXzIpOwogCQlncGlvX2RlYnVnX2xlZDIJPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU80XzIpOwogCi0JCS8qIE1NQyBjYXJkIGRldGVjdCAmIHdyaXRlIHByb3RlY3QgZm9yIGNvbnRyb2xsZXIgMCAqLwotCQl6eWxvbml0ZV9tbWNfc2xvdFswXS5ncGlvX2NkICA9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzEpOwotCQl6eWxvbml0ZV9tbWNfc2xvdFswXS5ncGlvX3dwICA9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzUpOwotCiAJCS8qIFdNOTcxMyBJUlEgKi8KIAkJd205NzEzX2lycSA9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzE1KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzNjE3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdHMuaApAQCAtMCwwICsxLDIxIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLXMzYzI0MTAvdHMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSTV9UU19ICisjZGVmaW5lIF9fQVNNX0FSTV9UU19ICisKK3N0cnVjdCBzM2MyNDEwX3RzX21hY2hfaW5mbyB7CisgICAgICAgaW50ICAgICAgICAgICAgIGRlbGF5OworICAgICAgIGludCAgICAgICAgICAgICBwcmVzYzsKKyAgICAgICBpbnQgICAgICAgICAgICAgb3ZlcnNhbXBsaW5nX3NoaWZ0OworfTsKKworZXh0ZXJuIHZvaWQgczNjMjR4eF90c19zZXRfcGxhdGRhdGEoc3RydWN0IHMzYzI0MTBfdHNfbWFjaF9pbmZvICopOworCisjZW5kaWYgLyogX19BU01fQVJNX1RTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwppbmRleCA0Yzc5YWM4Li45NzE2MmZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCkBAIC0yNzksNiArMjc5LDcgQEAKIAkJLm5hbWUJCT0gIlNtYXJ0TWVkaWEiLAogCQkubnJfY2hpcHMJPSAxLAogCQkubnJfbWFwCQk9IHNtYXJ0bWVkaWFfbWFwLAorCQkub3B0aW9ucyAgICAgICAgPSBOQU5EX1NDQU5fU0lMRU5UX05PREVWLAogCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUoYmFzdF9kZWZhdWx0X25hbmRfcGFydCksCiAJCS5wYXJ0aXRpb25zCT0gYmFzdF9kZWZhdWx0X25hbmRfcGFydCwKIAl9LApAQCAtMjkzLDYgKzI5NCw3IEBACiAJCS5uYW1lCQk9ICJjaGlwMSIsCiAJCS5ucl9jaGlwcwk9IDEsCiAJCS5ucl9tYXAJCT0gY2hpcDFfbWFwLAorCQkub3B0aW9ucyAgICAgICAgPSBOQU5EX1NDQU5fU0lMRU5UX05PREVWLAogCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUoYmFzdF9kZWZhdWx0X25hbmRfcGFydCksCiAJCS5wYXJ0aXRpb25zCT0gYmFzdF9kZWZhdWx0X25hbmRfcGFydCwKIAl9LApAQCAtMzAwLDYgKzMwMiw3IEBACiAJCS5uYW1lCQk9ICJjaGlwMiIsCiAJCS5ucl9jaGlwcwk9IDEsCiAJCS5ucl9tYXAJCT0gY2hpcDJfbWFwLAorCQkub3B0aW9ucyAgICAgICAgPSBOQU5EX1NDQU5fU0lMRU5UX05PREVWLAogCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUoYmFzdF9kZWZhdWx0X25hbmRfcGFydCksCiAJCS5wYXJ0aXRpb25zCT0gYmFzdF9kZWZhdWx0X25hbmRfcGFydCwKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwppbmRleCA0OTA1MzI1Li4xZTM0YWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxtYWNoL2gxOTQwLmg+CiAjaW5jbHVkZSA8bWFjaC9oMTk0MC1sYXRjaC5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KKyNpbmNsdWRlIDxtYWNoL3RzLmg+CiAjaW5jbHVkZSA8cGxhdC91ZGMuaD4KICNpbmNsdWRlIDxwbGF0L2lpYy5oPgogCkBAIC0xNDAsNiArMTQxLDExIEBACiAJLnZidXNfcGluX2ludmVydGVkCT0gMSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF90c19tYWNoX2luZm8gaDE5NDBfdHNfY2ZnIF9faW5pdGRhdGEgPSB7CisJCS5kZWxheSA9IDEwMDAwLAorCQkucHJlc2MgPSA0OSwKKwkJLm92ZXJzYW1wbGluZ19zaGlmdCA9IDIsCit9OwogCiAvKioKICAqIFNldCBsY2Qgb24gb3Igb2ZmCkBAIC0yNjUsNiArMjcxLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpoMTk0MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV90cywKIAkmczNjX2RldmljZV91c2IsCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKQEAgLTMwNSw2ICszMTIsNyBAQAogCiAJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJmgxOTQwX2ZiX2luZm8pOwogIAlzM2MyNHh4X3VkY19zZXRfcGxhdGRhdGEoJmgxOTQwX3VkY19jZmcpOworCXMzYzI0eHhfdHNfc2V0X3BsYXRkYXRhKCZoMTk0MF90c19jZmcpOwogCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKIAogCXMzY19kZXZpY2Vfc2RpLmRldi5wbGF0Zm9ybV9kYXRhID0gJmgxOTQwX21tY19jZmc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCmluZGV4IDAxNWRmYjIuLmYzNTM3MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCkBAIC0yMDgsNiArMjA4LDcgQEAKIAkJLm5hbWUJCT0gIkV4dGVybmFsIiwKIAkJLm5yX2NoaXBzCT0gMSwKIAkJLm5yX21hcAkJPSBleHRlcm5hbF9tYXAsCisJCS5vcHRpb25zCT0gTkFORF9TQ0FOX1NJTEVOVF9OT0RFViwKIAkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKG9zaXJpc19kZWZhdWx0X25hbmRfcGFydCksCiAJCS5wYXJ0aXRpb25zCT0gb3NpcmlzX2RlZmF1bHRfbmFuZF9wYXJ0LAogCX0sCkBAIC0yMjIsNiArMjIzLDcgQEAKIAkJLm5hbWUJCT0gImNoaXAxIiwKIAkJLm5yX2NoaXBzCT0gMSwKIAkJLm5yX21hcAkJPSBjaGlwMV9tYXAsCisJCS5vcHRpb25zCT0gTkFORF9TQ0FOX1NJTEVOVF9OT0RFViwKIAkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKG9zaXJpc19kZWZhdWx0X25hbmRfcGFydCksCiAJCS5wYXJ0aXRpb25zCT0gb3NpcmlzX2RlZmF1bHRfbmFuZF9wYXJ0LAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKaW5kZXggOTIxY2VmOS4uMjBkYzBjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYwpAQCAtOTYsNiArOTYsNyBAQAogCiBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgbnVjOTAwX3VhcnRfZGF0YVtdID0gewogCU5VQzkwMF84MjUwUE9SVChVQVJUMCksCisJe30sCiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9zZXJpYWxfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jCmluZGV4IDUxZjE3YjcuLmVjNzExZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZGV2LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiAvKiBTUEkgZGV2aWNlICovCiAKLXN0YXRpYyBzdHJ1Y3QgdzkwcDkxMF9zcGlfaW5mbyBudWM5MDBfc3BpZmxhc2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbnVjOTAwX3NwaV9pbmZvIG51YzkwMF9zcGlmbGFzaF9kYXRhID0gewogCS5udW1fY3MJCT0gMSwKIAkubHNiCQk9IDAsCiAJLnR4bmVnCQk9IDEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA5NDA2NDAwLi5jZTIyOGJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE1LDcgKzE1LDE1IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXRpbWVyLmg+CisKKyNkZWZpbmUJV1RDUgkoVE1SX0JBICsgMHgxQykKKyNkZWZpbmUJV1RDTEsJKDEgPDwgMTApCisjZGVmaW5lCVdURQkoMSA8PCA3KQorI2RlZmluZQlXVFJFCSgxIDw8IDEpCiAKIHN0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewpAQCAtMjMsNiArMzEsMTEgQEAKIAogc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQljcHVfcmVzZXQoMCk7CisJaWYgKG1vZGUgPT0gJ3MnKSB7CisJCS8qIEp1bXAgaW50byBST00gYXQgYWRkcmVzcyAwICovCisJCWNwdV9yZXNldCgwKTsKKwl9IGVsc2UgeworCQlfX3Jhd193cml0ZWwoV1RFIHwgV1RSRSB8IFdUQ0xLLCBXVENSKTsKKwl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggMDUwZDlmZS4uNTZmMWE3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTIyLDExICsyMiwyMSBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogCiAjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQogCisjZGVmaW5lIFRYX0RPTkUJKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKQorc3RhdGljIHZvbGF0aWxlIHUzMiAqIHVhcnRfYmFzZSA9ICh1MzIgKilVQVJUMF9QQTsKKwogc3RhdGljIHZvaWQgcHV0YyhpbnQgY2gpCiB7CisJLyogQ2hlY2sgVEhSRSBhbmQgVEVNVCBiaXRzIGJlZm9yZSB3ZSB0cmFuc21pdCB0aGUgY2hhcmFjdGVyLgorCSAqLworCXdoaWxlICgodWFydF9iYXNlW1VBUlRfTFNSXSAmIFRYX0RPTkUpICE9IFRYX0RPTkUpCisJCWJhcnJpZXIoKTsKKworCSp1YXJ0X2Jhc2UgPSBjaDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3RpbWUuYwppbmRleCA0MTI4YWY4Li5iODBmNzY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC90aW1lLmMKQEAgLTQyLDcgKzQyLDEwIEBACiAjZGVmaW5lIFRJQ0tTX1BFUl9TRUMJMTAwCiAjZGVmaW5lIFBSRVNDQUxFCTB4NjMgLyogRGl2aWRlciA9IHByZXNjYWxlICsgMSAqLwogCi11bnNpZ25lZCBpbnQgdGltZXIwX2xvYWQ7CisjZGVmaW5lCVREUl9TSElGVAkyNAorI2RlZmluZQlURFJfTUFTSwkoKDEgPDwgVERSX1NISUZUKSAtIDEpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZXIwX2xvYWQ7CiAKIHN0YXRpYyB2b2lkIG51YzkwMF9jbG9ja2V2ZW50X3NldG1vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCiAJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKQEAgLTg4LDcgKzkxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIG51YzkwMF9jbG9ja2V2ZW50X2RldmljZSA9IHsKIAkubmFtZQkJPSAibnVjOTAwLXRpbWVyMCIsCiAJLnNoaWZ0CQk9IDMyLAotCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnNldF9tb2RlCT0gbnVjOTAwX2Nsb2NrZXZlbnRfc2V0bW9kZSwKIAkuc2V0X25leHRfZXZlbnQJPSBudWM5MDBfY2xvY2tldmVudF9zZXRuZXh0ZXZlbnQsCiAJLnJhdGluZwkJPSAzMDAsCkBAIC0xMTIsOCArMTE1LDIzIEBACiAJLmhhbmRsZXIJPSBudWM5MDBfdGltZXIwX2ludGVycnVwdCwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBudWM5MDBfY2xvY2tldmVudHNfaW5pdCh1bnNpZ25lZCBpbnQgcmF0ZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MDBfY2xvY2tldmVudHNfaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGludCByYXRlOworCXN0cnVjdCBjbGsgKmNsayA9IGNsa19nZXQoTlVMTCwgInRpbWVyMCIpOworCisJQlVHX09OKElTX0VSUihjbGspKTsKKworCV9fcmF3X3dyaXRlbCgweDAwLCBSRUdfVENTUjApOworCisJY2xrX2VuYWJsZShjbGspOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIChQUkVTQ0FMRSArIDEpOworCisJdGltZXIwX2xvYWQgPSAocmF0ZSAvIFRJQ0tTX1BFUl9TRUMpOworCisJX19yYXdfd3JpdGVsKFJFU0VUSU5ULCBSRUdfVElTUik7CisJc2V0dXBfaXJxKElSUV9USU1FUjAsICZudWM5MDBfdGltZXIwX2lycSk7CisKIAludWM5MDBfY2xvY2tldmVudF9kZXZpY2UubXVsdCA9IGRpdl9zYyhyYXRlLCBOU0VDX1BFUl9TRUMsCiAJCQkJCW51YzkwMF9jbG9ja2V2ZW50X2RldmljZS5zaGlmdCk7CiAJbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlLm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZiwKQEAgLTEyNywyNiArMTQ1LDM1IEBACiAKIHN0YXRpYyBjeWNsZV90IG51YzkwMF9nZXRfY3ljbGVzKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7Ci0JcmV0dXJuIH5fX3Jhd19yZWFkbChSRUdfVERSMSk7CisJcmV0dXJuICh+X19yYXdfcmVhZGwoUkVHX1REUjEpKSAmIFREUl9NQVNLOwogfQogCiBzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX251YzkwMCA9IHsKIAkubmFtZQk9ICJudWM5MDAtdGltZXIxIiwKIAkucmF0aW5nCT0gMjAwLAogCS5yZWFkCT0gbnVjOTAwX2dldF9jeWNsZXMsCi0JLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQJPSAyMCwKKwkubWFzawk9IENMT0NLU09VUkNFX01BU0soVERSX1NISUZUKSwKKwkuc2hpZnQJPSAxMCwKIAkuZmxhZ3MJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBudWM5MDBfY2xvY2tzb3VyY2VfaW5pdCh1bnNpZ25lZCBpbnQgcmF0ZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MDBfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgaW50IHJhdGU7CisJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAidGltZXIxIik7CisKKwlCVUdfT04oSVNfRVJSKGNsaykpOworCisJX19yYXdfd3JpdGVsKDB4MDAsIFJFR19UQ1NSMSk7CisKKwljbGtfZW5hYmxlKGNsayk7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspIC8gKFBSRVNDQUxFICsgMSk7CiAKIAlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgUkVHX1RJQ1IxKTsKIAogCXZhbCA9IF9fcmF3X3JlYWRsKFJFR19UQ1NSMSk7Ci0JdmFsIHw9IChDT1VOVEVOIHwgUEVSSU9EKTsKKwl2YWwgfD0gKENPVU5URU4gfCBQRVJJT0QgfCBQUkVTQ0FMRSk7CiAJX19yYXdfd3JpdGVsKHZhbCwgUkVHX1RDU1IxKTsKIAogCWNsb2Nrc291cmNlX251YzkwMC5tdWx0ID0KQEAgLTE1NiwyNSArMTgzLDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG51YzkwMF90aW1lcl9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNsayAqY2tfZXh0ID0gY2xrX2dldChOVUxMLCAiZXh0Iik7Ci0JdW5zaWduZWQgaW50CXJhdGU7Ci0KLQlCVUdfT04oSVNfRVJSKGNrX2V4dCkpOwotCi0JcmF0ZSA9IGNsa19nZXRfcmF0ZShja19leHQpOwotCWNsa19wdXQoY2tfZXh0KTsKLQlyYXRlID0gcmF0ZSAvIChQUkVTQ0FMRSArIDB4MDEpOwotCi0JIC8qIHNldCBhIGtub3duIHN0YXRlICovCi0JX19yYXdfd3JpdGVsKDB4MDAsIFJFR19UQ1NSMCk7Ci0JX19yYXdfd3JpdGVsKDB4MDAsIFJFR19UQ1NSMSk7Ci0JX19yYXdfd3JpdGVsKFJFU0VUSU5ULCBSRUdfVElTUik7Ci0JdGltZXIwX2xvYWQgPSAocmF0ZSAvIFRJQ0tTX1BFUl9TRUMpOwotCi0Jc2V0dXBfaXJxKElSUV9USU1FUjAsICZudWM5MDBfdGltZXIwX2lycSk7Ci0KLQludWM5MDBfY2xvY2tzb3VyY2VfaW5pdChyYXRlKTsKLQludWM5MDBfY2xvY2tldmVudHNfaW5pdChyYXRlKTsKKwludWM5MDBfY2xvY2tzb3VyY2VfaW5pdCgpOworCW51YzkwMF9jbG9ja2V2ZW50c19pbml0KCk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgbnVjOTAwX3RpbWVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggZGQ0Njk4Yy4uYmFmNjM4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xLDkgKzEsNSBAQAogY29tbWVudCAiUHJvY2Vzc29yIFR5cGUiCiAKLWNvbmZpZyBDUFVfMzIKLQlib29sCi0JZGVmYXVsdCB5Ci0KICMgU2VsZWN0IENQVSB0eXBlcyBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBzZWxlY3RlZC4gIFRoaXMgc2VsZWN0cwogIyB3aGljaCBDUFVzIHdlIHN1cHBvcnQgaW4gdGhlIGtlcm5lbCBpbWFnZSwgYW5kIHRoZSBjb21waWxlciBpbnN0cnVjdGlvbgogIyBvcHRpbWlzZXIgYmVoYXZpb3VyLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKaW5kZXggODQxZjM1NS4uMGZhMTMxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCkBAIC00OCw3ICs0OCw3IEBACiAJICovCiAJaWYgKHBhZ2VfYWRkcmVzcyh0bykgIT0gTlVMTCkKICNlbmRpZgotCQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2Uoa3RvKTsKKwkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGt0bywgUEFHRV9TSVpFKTsKIAlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjEpOwogCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwppbmRleCA3Mjk2MDIyLi41NmVlMTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCkBAIC0yMDcsOSArMjA3LDggQEAKIAlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAocGFnZSkgewogCQl1bnNpZ25lZCBsb25nICpwMSwgKnAyOwotCQlwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoTF9QVEVfUFJFU0VOVHxMX1BURV9ZT1VOR3wKLQkJCQkJIExfUFRFX0RJUlRZfExfUFRFX1dSSVRFfAotCQkJCQkgTF9QVEVfTVRfQlVGRkVSQUJMRSk7CisJCXBncHJvdF90IHByb3QgPSBfX3BncHJvdF9tb2RpZnkoUEFHRV9LRVJORUwsCisJCQkJCUxfUFRFX01UX01BU0ssIExfUFRFX01UX0JVRkZFUkFCTEUpOwogCiAJCXAxID0gdm1hcCgmcGFnZSwgMSwgVk1fSU9SRU1BUCwgcHJvdCk7CiAJCXAyID0gdm1hcCgmcGFnZSwgMSwgVk1fSU9SRU1BUCwgcHJvdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IDhjN2ZiZDEuLjE3MDhkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC00NTMsOCArNDUzLDcgQEAKIAogCXBncHJvdF91c2VyICAgPSBfX3BncHJvdChMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCB1c2VyX3BncHJvdCk7CiAJcGdwcm90X2tlcm5lbCA9IF9fcGdwcm90KExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8Ci0JCQkJIExfUFRFX0RJUlRZIHwgTF9QVEVfV1JJVEUgfAotCQkJCSBMX1BURV9FWEVDIHwga2Vybl9wZ3Byb3QpOworCQkJCSBMX1BURV9ESVJUWSB8IExfUFRFX1dSSVRFIHwga2Vybl9wZ3Byb3QpOwogCiAJbWVtX3R5cGVzW01UX0xPV19WRUNUT1JTXS5wcm90X2wxIHw9IGVjY19tYXNrOwogCW1lbV90eXBlc1tNVF9ISUdIX1ZFQ1RPUlNdLnByb3RfbDEgfD0gZWNjX21hc2s7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS90bGItdjcuUyBiL2FyY2gvYXJtL21tL3RsYi12Ny5TCmluZGV4IGEyNmE2MDUuLjBjYjE4NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3RsYi12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3RsYi12Ny5TCkBAIC00MCw3ICs0MCw2IEBACiAJYXNpZAlyMywgcjMJCQkJQCBtYXNrIEFTSUQKIAlvcnIJcjAsIHIzLCByMCwgbHNsICNQQUdFX1NISUZUCUAgQ3JlYXRlIGluaXRpYWwgTVZBCiAJbW92CXIxLCByMSwgbHNsICNQQUdFX1NISUZUCi0Jdm1hX3ZtX2ZsYWdzIHIyLCByMgkJCUAgZ2V0IHZtYS0+dm1fZmxhZ3MKIDE6CiAjaWZkZWYgQ09ORklHX1NNUAogCW1jcglwMTUsIDAsIHIwLCBjOCwgYzMsIDEJCUAgVExCIGludmFsaWRhdGUgVSBNVkEgKHNoYXJlYWJsZSkgCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9NYWtlZmlsZSBiL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCmluZGV4IGIyOTE3OGMuLmRlYjNhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBud2ZwZS15CQkJCSs9IGZwYTExLm8gZnBhMTFfY3Bkby5vIGZwYTExX2NwZHQubyBcCiAJCQkJICAgZnBhMTFfY3BydC5vIGZwbW9kdWxlLm8gZnBvcGNvZGUubyBcCi0JCQkJICAgc29mdGZsb2F0Lm8gc2luZ2xlX2NwZG8ubyBkb3VibGVfY3Bkby5vCisJCQkJICAgc29mdGZsb2F0Lm8gc2luZ2xlX2NwZG8ubyBkb3VibGVfY3Bkby5vIFwKKwkJCQkgICBlbnRyeS5vCiAKIG53ZnBlLSQoQ09ORklHX0ZQRV9OV0ZQRV9YUCkJKz0gZXh0ZW5kZWRfY3Bkby5vCi1ud2ZwZS0kKENPTkZJR19DUFVfMzIpCQkrPSBlbnRyeS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuYwppbmRleCBmMjAyOTVmLi4yMDg4YTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmMKQEAgLTE5MSwxMiArMTkxLDggQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQkvKgotCSAqIEluaXRpYWxpemUgJiBSZXNldCBQTU5DOiBDIGJpdCwgRCBiaXQgYW5kIFAgYml0LgotCSAqICBOb3RlOiBVc2luZyBhIHNsb3dlciBjb3VudCBmb3IgQ0NOVCAoRCBiaXQ6IGRpdmlkZSBieSA2NCkgcmVzdWx0cwotCSAqICAgaW4gYSBtb3JlIHN0YWJsZSBzeXN0ZW0KLQkgKi8KLQlhcm12N19wbW5jX3dyaXRlKFBNTkNfUCB8IFBNTkNfQyB8IFBNTkNfRCk7CisJLyogSW5pdGlhbGl6ZSAmIFJlc2V0IFBNTkM6IEMgYml0IGFuZCBQIGJpdCAqLworCWFybXY3X3BtbmNfd3JpdGUoUE1OQ19QIHwgUE1OQ19DKTsKIAogCiAJZm9yIChjbnQgPSBDQ05UOyBjbnQgPCBDTlRNQVg7IGNudCsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjUuaAppbmRleCA4MTBjNDdmLi45YWY0OTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI1LmgKQEAgLTU4LDE5ICs1OCwxOSBAQAogCiAjZGVmaW5lIE1YMjVfUEFEX0ExOF9fQTE4CQlJT01VWF9QQUQoMHgyM2MsIDB4MDIwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfQTE4X19HUElPXzJfNAkJSU9NVVhfUEFEKDB4MjNjLCAweDAyMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX0ExOF9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MjNjLCAweDAyMCwgMHgxNywgMHg1MDQsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ExOF9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MjNjLCAweDAyMCwgMHgxNywgMHg1MDQsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0ExOV9fQTE5CQlJT01VWF9QQUQoMHgyNDAsIDB4MDI0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfQTE5X19GRUNfUlhfRVIJCUlPTVVYX1BBRCgweDI0MCwgMHgwMjQsIDB4MTcsIDB4NTE4LCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9BMTlfX0ZFQ19SWF9FUgkJSU9NVVhfUEFEKDB4MjQwLCAweDAyNCwgMHgxNywgMHg1MTgsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9BMTlfX0dQSU9fMl81CQlJT01VWF9QQUQoMHgyNDAsIDB4MDI0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9BMjBfX0EyMAkJSU9NVVhfUEFEKDB4MjQ0LCAweDAyOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0EyMF9fR1BJT18yXzYJCUlPTVVYX1BBRCgweDI0NCwgMHgwMjgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9BMjBfX0ZFQ19SREFUQTIJSU9NVVhfUEFEKDB4MjQ0LCAweDAyOCwgMHgxNywgMHg1MGMsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0EyMF9fRkVDX1JEQVRBMglJT01VWF9QQUQoMHgyNDQsIDB4MDI4LCAweDE3LCAweDUwYywgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfQTIxX19BMjEJCUlPTVVYX1BBRCgweDI0OCwgMHgwMmMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9BMjFfX0dQSU9fMl83CQlJT01VWF9QQUQoMHgyNDgsIDB4MDJjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfQTIxX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDI0OCwgMHgwMmMsIDB4MTcsIDB4NTEwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9BMjFfX0ZFQ19SREFUQTMJSU9NVVhfUEFEKDB4MjQ4LCAweDAyYywgMHgxNywgMHg1MTAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0EyMl9fQTIyCQlJT01VWF9QQUQoMHgwMDAsIDB4MDMwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfQTIyX19HUElPXzJfOAkJSU9NVVhfUEFEKDB4MDAwLCAweDAzMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCkBAIC04MCwxMSArODAsMTEgQEAKIAogI2RlZmluZSBNWDI1X1BBRF9BMjRfX0EyNAkJSU9NVVhfUEFEKDB4MjUwLCAweDAzOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0EyNF9fR1BJT18yXzEwCQlJT01VWF9QQUQoMHgyNTAsIDB4MDM4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfQTI0X19GRUNfUlhfQ0xLCUlPTVVYX1BBRCgweDI1MCwgMHgwMzgsIDB4MTcsIDB4NTE0LCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9BMjRfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4MjUwLCAweDAzOCwgMHgxNywgMHg1MTQsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0EyNV9fQTI1CQlJT01VWF9QQUQoMHgyNTQsIDB4MDNjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfQTI1X19HUElPXzJfMTEJCUlPTVVYX1BBRCgweDI1NCwgMHgwM2MsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9BMjVfX0ZFQ19DUlMJCUlPTVVYX1BBRCgweDI1NCwgMHgwM2MsIDB4MTcsIDB4NTA4LCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9BMjVfX0ZFQ19DUlMJCUlPTVVYX1BBRCgweDI1NCwgMHgwM2MsIDB4MTcsIDB4NTA4LCAwLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9FQjBfX0VCMAkJSU9NVVhfUEFEKDB4MjU4LCAweDA0MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0VCMF9fQVVENF9UWEQJCUlPTVVYX1BBRCgweDI1OCwgMHgwNDAsIDB4MTQsIDB4NDY0LCAwLCBOT19QQURfQ1RSTCkKQEAgLTExMiw3ICsxMTIsNyBAQAogI2RlZmluZSBNWDI1X1BBRF9DUzVfX1VBUlQ1X1JUUwkJSU9NVVhfUEFEKDB4MjY4LCAweDA1OCwgMHgxMywgMHg1NzQsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9DUzVfX0dQSU9fM18yMQkJSU9NVVhfUEFEKDB4MjY4LCAweDA1OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfTkZfQ0UwX19ORl9DRTAJCUlPTVVYX1BBRCgweDI2YywgMHgwNWMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX05GX0NFMF9fTkZfQ0UwCQlJT01VWF9QQUQoMHgyNmMsIDB4MDVjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfTkZfQ0UwX19HUElPXzNfMjIJSU9NVVhfUEFEKDB4MjZjLCAweDA1YywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfRUNCX19FQ0IJCUlPTVVYX1BBRCgweDI3MCwgMHgwNjAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQpAQCAtMjI5LDI4ICsyMjksMjggQEAKICNkZWZpbmUgTVgyNV9QQURfTEQ3X19HUElPXzFfMjEJCUlPTVVYX1BBRCgweDJkYywgMHgwZTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0xEOF9fTEQ4CQlJT01VWF9QQUQoMHgyZTAsIDB4MGU4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfTEQ4X19GRUNfVFhfRVJSCUlPTVVYX1BBRCgweDJlMCwgMHgwZTgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEOF9fRkVDX1RYX0VSUglJT01VWF9QQUQoMHgyZTAsIDB4MGU4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9MRDlfX0xEOQkJSU9NVVhfUEFEKDB4MmU0LCAweDBlYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX0xEOV9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MmU0LCAweDBlYywgMHgxNSwgMHg1MDQsIDEsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEOV9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MmU0LCAweDBlYywgMHgxNSwgMHg1MDQsIDEsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0xEMTBfX0xEMTAJCUlPTVVYX1BBRCgweDJlOCwgMHgwZjAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9MRDEwX19GRUNfUlhfRVIJSU9NVVhfUEFEKDB4MmU4LCAweDBmMCwgMHgxNSwgMHg1MTgsIDEsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTBfX0ZFQ19SWF9FUglJT01VWF9QQUQoMHgyZTgsIDB4MGYwLCAweDE1LCAweDUxOCwgMSwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfTEQxMV9fTEQxMQkJSU9NVVhfUEFEKDB4MmVjLCAweDBmNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX0xEMTFfX0ZFQ19SREFUQTIJSU9NVVhfUEFEKDB4MmVjLCAweDBmNCwgMHgxNSwgMHg1MGMsIDEsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTFfX0ZFQ19SREFUQTIJSU9NVVhfUEFEKDB4MmVjLCAweDBmNCwgMHgxNSwgMHg1MGMsIDEsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0xEMTJfX0xEMTIJCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9MRDEyX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTUsIDB4NTEwLCAxLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9MRDEyX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTUsIDB4NTEwLCAxLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9MRDEzX19MRDEzCQlJT01VWF9QQUQoMHgyZjQsIDB4MGZjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfTEQxM19fRkVDX1REQVRBMglJT01VWF9QQUQoMHgyZjQsIDB4MGZjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9MRDEzX19GRUNfVERBVEEyCUlPTVVYX1BBRCgweDJmNCwgMHgwZmMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0xEMTRfX0xEMTQJCUlPTVVYX1BBRCgweDJmOCwgMHgxMDAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9MRDE0X19GRUNfVERBVEEzCUlPTVVYX1BBRCgweDJmOCwgMHgxMDAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTRfX0ZFQ19UREFUQTMJSU9NVVhfUEFEKDB4MmY4LCAweDEwMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfTEQxNV9fTEQxNQkJSU9NVVhfUEFEKDB4MmZjLCAweDEwNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX0xEMTVfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4MmZjLCAweDEwNCwgMHgxNSwgMHg1MTQsIDEsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTVfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4MmZjLCAweDEwNCwgMHgxNSwgMHg1MTQsIDEsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0hTWU5DX19IU1lOQwkJSU9NVVhfUEFEKDB4MzAwLCAweDEwOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0hTWU5DX19HUElPXzFfMjIJSU9NVVhfUEFEKDB4MzAwLCAweDEwOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCkBAIC0yNjUsNyArMjY1LDcgQEAKICNkZWZpbmUgTVgyNV9QQURfT0VfQUNEX19HUElPXzFfMjUJSU9NVVhfUEFEKDB4MzBjLCAweDExNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfQ09OVFJBU1RfX0NPTlRSQVNUCUlPTVVYX1BBRCgweDMxMCwgMHgxMTgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9DT05UUkFTVF9fRkVDX0NSUwlJT01VWF9QQUQoMHgzMTAsIDB4MTE4LCAweDE1LCAweDUwOCwgMSwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfQ09OVFJBU1RfX0ZFQ19DUlMJSU9NVVhfUEFEKDB4MzEwLCAweDExOCwgMHgxNSwgMHg1MDgsIDEsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1BXTV9fUFdNCQlJT01VWF9QQUQoMHgzMTQsIDB4MTFjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfUFdNX19HUElPXzFfMjYJCUlPTVVYX1BBRCgweDMxNCwgMHgxMWMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQpAQCAtMzU0LDE5ICszNTQsMTkgQEAKICNkZWZpbmUgTVgyNV9QQURfVUFSVDJfVFhEX19HUElPXzRfMjcJSU9NVVhfUEFEKDB4MzdjLCAweDE4NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19VQVJUMl9SVFMJSU9NVVhfUEFEKDB4MzgwLCAweDE4OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX1VBUlQyX1JUU19fRkVDX0NPTAlJT01VWF9QQUQoMHgzODAsIDB4MTg4LCAweDEyLCAweDUwNCwgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19GRUNfQ09MCUlPTVVYX1BBRCgweDM4MCwgMHgxODgsIDB4MTIsIDB4NTA0LCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19HUElPXzRfMjgJSU9NVVhfUEFEKDB4MzgwLCAweDE4OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfVUFSVDJfQ1RTX19GRUNfUlhfRVIJSU9NVVhfUEFEKDB4Mzg0LCAweDE4YywgMHgxMiwgMHg1MTgsIDIsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX0NUU19fRkVDX1JYX0VSCUlPTVVYX1BBRCgweDM4NCwgMHgxOGMsIDB4MTIsIDB4NTE4LCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfVUFSVDJfQ1RTX19VQVJUMl9DVFMJSU9NVVhfUEFEKDB4Mzg0LCAweDE4YywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX0NUU19fR1BJT180XzI5CUlPTVVYX1BBRCgweDM4NCwgMHgxOGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9DTURfX1NEMV9DTUQJSU9NVVhfUEFEKDB4Mzg4LCAweDE5MCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQotI2RlZmluZSBNWDI1X1BBRF9TRDFfQ01EX19GRUNfUkRBVEEyCUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTIsIDB4NTBjLCAyLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfQ01EX19GRUNfUkRBVEEyCUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTIsIDB4NTBjLCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfU0QxX0NNRF9fR1BJT18yXzIzCUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9DTEtfX1NEMV9DTEsJSU9NVVhfUEFEKDB4MzhjLCAweDE5NCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQotI2RlZmluZSBNWDI1X1BBRF9TRDFfQ0xLX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDM4YywgMHgxOTQsIDB4MTIsIDB4NTEwLCAyLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfQ0xLX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDM4YywgMHgxOTQsIDB4MTIsIDB4NTEwLCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfU0QxX0NMS19fR1BJT18yXzI0CUlPTVVYX1BBRCgweDM4YywgMHgxOTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwCUlPTVVYX1BBRCgweDM5MCwgMHgxOTgsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzQ3S19VUCkKQEAgLTM3NywxMSArMzc3LDExIEBACiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMV9fR1BJT18yXzI2CUlPTVVYX1BBRCgweDM5NCwgMHgxOWMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyCUlPTVVYX1BBRCgweDM5OCwgMHgxYTAsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzQ3S19VUCkKLSNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEyX19GRUNfUlhfQ0xLCUlPTVVYX1BBRCgweDM5OCwgMHgxYTAsIDB4MTUsIDB4NTE0LCAyLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTJfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4Mzk4LCAweDFhMCwgMHgxNSwgMHg1MTQsIDIsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTJfX0dQSU9fMl8yNwlJT01VWF9QQUQoMHgzOTgsIDB4MWEwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMwlJT01VWF9QQUQoMHgzOWMsIDB4MWE0LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU180N0tfVVApCi0jZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBM19fRkVDX0NSUwlJT01VWF9QQUQoMHgzOWMsIDB4MWE0LCAweDEwLCAweDUwOCwgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEzX19GRUNfQ1JTCUlPTVVYX1BBRCgweDM5YywgMHgxYTQsIDB4MTAsIDB4NTA4LCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEzX19HUElPXzJfMjgJSU9NVVhfUEFEKDB4MzljLCAweDFhNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzBfX0tQUF9ST1cwCUlPTVVYX1BBRCgweDNhMCwgMHgxYTgsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFKQpAQCAtNDEwLDcgKzQxMCw3IEBACiAjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wzX19LUFBfQ09MMwlJT01VWF9QQUQoMHgzYmMsIDB4MWM0LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQogI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MM19fR1BJT18zXzQJSU9NVVhfUEFEKDB4M2JjLCAweDFjNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfRkVDX01EQ19fRkVDX01EQwlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDCUlPTVVYX1BBRCgweDNjMCwgMHgxYzgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfTURDX19BVUQ0X1RYRAlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEyLCAweDQ2NCwgMSwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0ZFQ19NRENfX0dQSU9fM181CUlPTVVYX1BBRCgweDNjMCwgMHgxYzgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCkBAIC00MTgsMjMgKzQxOCwyMyBAQAogI2RlZmluZSBNWDI1X1BBRF9GRUNfTURJT19fQVVENF9SWEQJSU9NVVhfUEFEKDB4M2M0LCAweDFjYywgMHgxMiwgMHg0NjAsIDEsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfTURJT19fR1BJT18zXzYJSU9NVVhfUEFEKDB4M2M0LCAweDFjYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfRkVDX1REQVRBMF9fRkVDX1REQVRBMAlJT01VWF9QQUQoMHgzYzgsIDB4MWQwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwCUlPTVVYX1BBRCgweDNjOCwgMHgxZDAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEEwX19HUElPXzNfNwlJT01VWF9QQUQoMHgzYzgsIDB4MWQwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAotI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEExX19GRUNfVERBVEExCUlPTVVYX1BBRCgweDNjYywgMHgxZDQsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEJSU9NVVhfUEFEKDB4M2NjLCAweDFkNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UREFUQTFfX0FVRDRfVFhGUwlJT01VWF9QQUQoMHgzY2MsIDB4MWQ0LCAweDEyLCAweDQ3NCwgMSwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UREFUQTFfX0dQSU9fM184CUlPTVVYX1BBRCgweDNjYywgMHgxZDQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0ZFQ19UWF9FTl9fRkVDX1RYX0VOCUlPTVVYX1BBRCgweDNkMCwgMHgxZDgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UWF9FTl9fRkVDX1RYX0VOCUlPTVVYX1BBRCgweDNkMCwgMHgxZDgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfRU5fX0dQSU9fM185ICAgCUlPTVVYX1BBRCgweDNkMCwgMHgxZDgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQTAJSU9NVVhfUEFEKDB4M2Q0LCAweDFkYywgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOIHwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMAlJT01VWF9QQUQoMHgzZDQsIDB4MWRjLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU18xMDBLX0RPV04gfCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMF9fR1BJT18zXzEwCUlPTVVYX1BBRCgweDNkNCwgMHgxZGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0ZFQ19SREFUQTFfX0ZFQ19SREFUQTEJSU9NVVhfUEFEKDB4M2Q4LCAweDFlMCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOIHwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMV9fRkVDX1JEQVRBMQlJT01VWF9QQUQoMHgzZDgsIDB4MWUwLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU18xMDBLX0RPV04gfCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMV9fR1BJT18zXzExCUlPTVVYX1BBRCgweDNkOCwgMHgxZTAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWCUlPTVVYX1BBRCgweDNkYywgMHgxZTQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfRE9XTiB8IE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWCUlPTVVYX1BBRCgweDNkYywgMHgxZTQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfRE9XTiB8IE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfUlhfRFZfX0NBTjJfUlgJSU9NVVhfUEFEKDB4M2RjLCAweDFlNCwgMHgxNCwgMHg0ODQsIDAsIFBBRF9DVExfUFVTXzIyS19VUCkKICNkZWZpbmUgTVgyNV9QQURfRkVDX1JYX0RWX19HUElPXzNfMTIJSU9NVVhfUEFEKDB4M2RjLCAweDFlNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNS5oCmluZGV4IDkxZTczODEuLjg1NGUyZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaApAQCAtNDEsNCArNDEsOCBAQAogI2RlZmluZSBVQVJUMV9CQVNFX0FERFIJCQkweDQzZjkwMDAwCiAjZGVmaW5lIFVBUlQyX0JBU0VfQUREUgkJCTB4NDNmOTQwMDAKIAorI2RlZmluZSBNWDI1X0ZFQ19CQVNFX0FERFIJCTB4NTAwMzgwMDAKKworI2RlZmluZSBNWDI1X0lOVF9GRUMJNTcKKwogI2VuZGlmIC8qIF9fTUFDSF9NWDI1X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvcHdtLmMgYi9hcmNoL2FybS9wbGF0LXB4YS9wd20uYwppbmRleCBhOWVhYmRjLi41MWRjNWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9wd20uYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9wd20uYwpAQCAtMjA0LDE0ICsyMDQsMTQgQEAKIAkJZ290byBlcnJfZnJlZV9jbGs7CiAJfQogCi0JciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxLCBwZGV2LT5uYW1lKTsKKwlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpLCBwZGV2LT5uYW1lKTsKIAlpZiAociA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZXNvdXJjZVxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBlcnJfZnJlZV9jbGs7CiAJfQogCi0JcHdtLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCXB3bS0+bW1pb19iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CiAJaWYgKHB3bS0+bW1pb19iYXNlID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGlvcmVtYXAoKSByZWdpc3RlcnNcbiIpOwogCQlyZXQgPSAtRU5PREVWOwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9mcmVlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIGVycl9mcmVlX2NsazoKIAljbGtfcHV0KHB3bS0+Y2xrKTsKIGVycl9mcmVlOgpAQCAtMjcxLDcgKzI3MSw3IEBACiAJaW91bm1hcChwd20tPm1taW9fYmFzZSk7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAogCWNsa19wdXQocHdtLT5jbGspOwogCWtmcmVlKHB3bSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9kZXYtbmFuZC5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LW5hbmQuYwppbmRleCBlNzcxZTc3Li44NDgwOGNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9kZXYtbmFuZC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1uYW5kLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCQkKIAkJZm9yIChpID0gMDsgaSA8IG5wZC0+bnJfc2V0czsgaSsrKSB7CiAJCQlyZXQgPSBzM2NfbmFuZF9jb3B5X3NldCh0byk7Ci0JCQlpZiAoIXJldCkgeworCQkJaWYgKHJldCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjb3B5IHNldCAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgaSk7CiAJCQkJcmV0dXJuOwpAQCAtMTIyLDYgKzEyMiw4IEBACiAJCQl0bysrOwogCQl9CiAJfQorCisJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gbnBkOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChzM2NfbmFuZF9zZXRfcGxhdGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RldnMuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kZXZzLmgKaW5kZXggOTMyY2JiYi4uYzFjMjBiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RldnMuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oCkBAIC0zMSw2ICszMSw3IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9wY20wOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfcGNtMTsKIAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV90czsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfZmI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbGNkOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKaW5kZXggZjUyYTkyYy4uN2Y2ODZhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAKKyNpbmNsdWRlIDxtYWNoL3RzLmg+CisKIC8qIFNlcmlhbCBwb3J0IHJlZ2lzdHJhdGlvbnMgKi8KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2MyNDEwX3VhcnQwX3Jlc291cmNlW10gPSB7CkBAIC0xODIsNiArMTg0LDIyIEBACiAJfQogfQogCisvKiBUb3VjaHNjcmVlbiAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RzID0geworCS5uYW1lCQkgID0gInMzYzI0MTAtdHMiLAorCS5pZAkJICA9IC0xLAorfTsKK0VYUE9SVF9TWU1CT0woczNjX2RldmljZV90cyk7CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF90c19tYWNoX2luZm8gczNjMjQxMHRzX2luZm87CisKK3ZvaWQgX19pbml0IHMzYzI0eHhfdHNfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNDEwX3RzX21hY2hfaW5mbyAqaGFyZF9zM2MyNDEwdHNfaW5mbykKK3sKKwltZW1jcHkoJnMzYzI0MTB0c19pbmZvLCBoYXJkX3MzYzI0MTB0c19pbmZvLCBzaXplb2Yoc3RydWN0IHMzYzI0MTBfdHNfbWFjaF9pbmZvKSk7CisJczNjX2RldmljZV90cy5kZXYucGxhdGZvcm1fZGF0YSA9ICZzM2MyNDEwdHNfaW5mbzsKK30KK0VYUE9SVF9TWU1CT0woczNjMjR4eF90c19zZXRfcGxhdGRhdGEpOworCiAvKiBVU0IgRGV2aWNlIChHYWRnZXQpKi8KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdXNiZ2FkZ2V0X3Jlc291cmNlW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYwppbmRleCAxMzY0MzE3ZC4uMTI2MjNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCkBAIC03MCw2ICs3MCw3IEBACiAJczNjX2RldmljZV9zZGkubmFtZSAgPSAiczNjMjQ0MC1zZGkiOwogCXMzY19kZXZpY2VfaTJjMC5uYW1lICA9ICJzM2MyNDQwLWkyYyI7CiAJczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjMjQ0MC1uYW5kIjsKKwlzM2NfZGV2aWNlX3RzLm5hbWUgPSAiczNjMjQ0MC10cyI7CiAJczNjX2RldmljZV91c2JnYWRnZXQubmFtZSA9ICJzM2MyNDQwLXVzYmdhZGdldCI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCBhZWQwNWJjLi5mNjBhNTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC02MywxNCArNjMsMTUgQEAKIAlwdXRfY3B1KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHZmcF90aHJlYWRfcmVsZWFzZShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKK3N0YXRpYyB2b2lkIHZmcF90aHJlYWRfZXhpdChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKIHsKIAkvKiByZWxlYXNlIGNhc2U6IFBlci10aHJlYWQgVkZQIGNsZWFudXAuICovCiAJdW5pb24gdmZwX3N0YXRlICp2ZnAgPSAmdGhyZWFkLT52ZnBzdGF0ZTsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gdGhyZWFkLT5jcHU7CisJdW5zaWduZWQgaW50IGNwdSA9IGdldF9jcHUoKTsKIAogCWlmIChsYXN0X1ZGUF9jb250ZXh0W2NwdV0gPT0gdmZwKQogCQlsYXN0X1ZGUF9jb250ZXh0W2NwdV0gPSBOVUxMOworCXB1dF9jcHUoKTsKIH0KIAogLyoKQEAgLTg4LDExICs4OSwxMyBAQAogICoJYnV0IG1heSBjaGFuZ2UgYXQgYW55IHRpbWUuCiAgKiAgIC0gd2UgY291bGQgYmUgcHJlZW1wdGVkIGlmIHRyZWUgcHJlZW1wdCByY3UgaXMgZW5hYmxlZCwgc28KICAqCWl0IGlzIHVuc2FmZSB0byB1c2UgdGhyZWFkLT5jcHUuCi0gKiAgVEhSRUFEX05PVElGWV9SRUxFQVNFOgotICogICAtIHRoZSB0aHJlYWQgKHYpIHdpbGwgbm90IGJlIHJ1bm5pbmcgb24gYW55IENQVTsgaXQgaXMgYSBkZWFkIHRocmVhZC4KLSAqICAgLSB0aHJlYWQtPmNwdSB3aWxsIGJlIHRoZSBsYXN0IENQVSB0aGUgdGhyZWFkIHJhbiBvbiwgd2hpY2ggbWF5IG5vdAotICoJYmUgdGhlIGN1cnJlbnQgQ1BVLgotICogICAtIHdlIGNvdWxkIGJlIHByZWVtcHRlZCBpZiB0cmVlIHByZWVtcHQgcmN1IGlzIGVuYWJsZWQuCisgKiAgVEhSRUFEX05PVElGWV9FWElUCisgKiAgIC0gdGhlIHRocmVhZCAodikgd2lsbCBiZSBydW5uaW5nIG9uIHRoZSBsb2NhbCBDUFUsIHNvCisgKgl2ID09PSBjdXJyZW50X3RocmVhZF9pbmZvKCkKKyAqICAgLSB0aHJlYWQtPmNwdSBpcyB0aGUgbG9jYWwgQ1BVIG51bWJlciBhdCB0aGUgdGltZSBpdCBpcyBhY2Nlc3NlZCwKKyAqCWJ1dCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLgorICogICAtIHdlIGNvdWxkIGJlIHByZWVtcHRlZCBpZiB0cmVlIHByZWVtcHQgcmN1IGlzIGVuYWJsZWQsIHNvCisgKglpdCBpcyB1bnNhZmUgdG8gdXNlIHRocmVhZC0+Y3B1LgogICovCiBzdGF0aWMgaW50IHZmcF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQogewpAQCAtMTMzLDcgKzEzNiw3IEBACiAJaWYgKGNtZCA9PSBUSFJFQURfTk9USUZZX0ZMVVNIKQogCQl2ZnBfdGhyZWFkX2ZsdXNoKHRocmVhZCk7CiAJZWxzZQotCQl2ZnBfdGhyZWFkX3JlbGVhc2UodGhyZWFkKTsKKwkJdmZwX3RocmVhZF9leGl0KHRocmVhZCk7CiAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDk0NGEwN2MuLjFkMDRlNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMCw0ICsxMCw5IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogI2RlZmluZSBNQVBfTlIoYWRkcikgKCgodW5zaWduZWQgbG9uZykoYWRkciktUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpCiAKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTIFwKKwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAorCSgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAorCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggMjVjNmE1MC4uOGM5NzA2OCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtNjMsMTIgKzYzLDEwIEBACiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAKIAotI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTIFwKIAkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAogCSgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAogCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKLSNlbmRpZgogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDkxZGY5NjguLjdhZTU4ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtMTMyLDYgKzEzMiwxMiBAQAogZXh0ZXJuIGludCBfX2luaXRkYXRhIG5pZF90b19weG1fbWFwW01BWF9OVU1OT0RFU107CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2FjcGlfcGRjKHZvaWQpIHsgcmV0dXJuIHRydWU7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FjcGlfc2V0X3BkY19iaXRzKHUzMiAqYnVmKQoreworCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TTVA7Cit9CisKICNkZWZpbmUgYWNwaV91bmxhenlfdGxiKHgpCiAKICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggZDIwZGIzYy4uZmJkMWEyNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtOCw3ICs4LDYgQEAKIGV4dGVybiB2b2lkIF9tY291bnQodW5zaWduZWQgbG9uZyBwZnMsIHVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgYjAsIHVuc2lnbmVkIGxvbmcgcjApOwogI2RlZmluZSBtY291bnQgX21jb3VudAogCi0jaW5jbHVkZSA8YXNtL2twcm9iZXMuaD4KIC8qIEluIElBNjQsIE1DT1VOVF9BRERSIGlzIHNldCBpbiBsaW5rIHRpbWUsIHNvIGl0J3Mgbm90IGEgY29uc3RhbnQgYXQgY29tcGlsZSB0aW1lICovCiAjZGVmaW5lIE1DT1VOVF9BRERSICgoKHN0cnVjdCBmbnB0ciAqKW1jb3VudCktPmlwKQogI2RlZmluZSBGVFJBQ0VfQUREUiAoKChzdHJ1Y3QgZm5wdHIgKilmdHJhY2VfY2FsbGVyKS0+aXApCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3Byb2Jlcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCBkYmY4M2ZiLi5kNTUwNWQ2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3Byb2Jlcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKQEAgLTEwMywxMSArMTAzLDYgQEAKIAlidW5kbGVfdCBidW5kbGU7CiB9IGtwcm9iZV9vcGNvZGVfdDsKIAotc3RydWN0IGZucHRyIHsKLQl1bnNpZ25lZCBsb25nIGlwOwotCXVuc2lnbmVkIGxvbmcgZ3A7Ci19OwotCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiovCiBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKIAkvKiBjb3B5IG9mIHRoZSBpbnN0cnVjdGlvbiB0byBiZSBlbXVsYXRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDg1ZDk2NWMuLjIzY2NlOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTc0LDcgKzc0LDcgQEAKIGV4dGVybiBpbnQgaWE2NF9pdHJfZW50cnkodTY0IHRhcmdldF9tYXNrLCB1NjQgdmEsIHU2NCBwdGUsIHU2NCBsb2dfc2l6ZSk7CiBleHRlcm4gdm9pZCBpYTY0X3B0cl9lbnRyeSh1NjQgdGFyZ2V0X21hc2ssIGludCBzbG90KTsKIAotZXh0ZXJuIHN0cnVjdCBpYTY0X3RyX2VudHJ5IF9fcGVyX2NwdV9pZHRyc1tOUl9DUFVTXVsyXVtJQTY0X1RSX0FMTE9DX01BWF07CitleHRlcm4gc3RydWN0IGlhNjRfdHJfZW50cnkgKmlhNjRfaWR0cnNbTlJfQ1BVU107CiAKIC8qCiAgcmVnaW9uIHJlZ2lzdGVyIG1hY3JvcwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCAzZGRiNGU3Li5kMzIzMDcxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtMzMsNyArMzMsOSBAQAogLyoKICAqIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCiAgKi8KLSNkZWZpbmUgY3B1bWFza19vZl9ub2RlKG5vZGUpICgmbm9kZV90b19jcHVfbWFza1tub2RlXSkKKyNkZWZpbmUgY3B1bWFza19vZl9ub2RlKG5vZGUpICgobm9kZSkgPT0gLTEgPwkJCQlcCisJCQkgICAgICAgY3B1X2FsbF9tYXNrIDoJCQkJXAorCQkJICAgICAgICZub2RlX3RvX2NwdV9tYXNrW25vZGVdKQogCiAvKgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgTm9kZSAnbmlkJy4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggYmNkMjYwZS4uYjhlNWQ5NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTMwLDYgKzMwLDExIEBACiAKIHR5cGVkZWYgdW5zaWduZWQgaW50IHVtb2RlX3Q7CiAKK3N0cnVjdCBmbnB0ciB7CisJdW5zaWduZWQgbG9uZyBpcDsKKwl1bnNpZ25lZCBsb25nIGdwOworfTsKKwogLyoKICAqIFRoZXNlIGFyZW4ndCBleHBvcnRlZCBvdXRzaWRlIHRoZSBrZXJuZWwgdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDJhNzVlOTMuLmUxMjM2MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTgsMTAgKzE4LDYgQEAKIG9iai0kKENPTkZJR19JQTY0X0hQX1pYMSkJKz0gYWNwaS1leHQubwogb2JqLSQoQ09ORklHX0lBNjRfSFBfWlgxX1NXSU9UTEIpICs9IGFjcGktZXh0Lm8KIAotaWZuZXEgKCQoQ09ORklHX0FDUElfUFJPQ0VTU09SKSwpCi1vYmoteQkJCQkrPSBhY3BpLXByb2Nlc3Nvci5vCi1lbmRpZgotCiBvYmotJChDT05GSUdfSUE2NF9QQUxJTkZPKQkrPSBwYWxpbmZvLm8KIG9iai0kKENPTkZJR19JT1NBUElDKQkJKz0gaW9zYXBpYy5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGktcHJvY2Vzc29yLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGktcHJvY2Vzc29yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZGE3YmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLXByb2Nlc3Nvci5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIGFyY2gvaWE2NC9rZXJuZWwvYWNwaS1wcm9jZXNzb3IuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbgotICogCVZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgotICogCS0gQWRkZWQgX1BEQyBmb3IgcGxhdGZvcm1zIHdpdGggSW50ZWwgQ1BVcwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotCi0jaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotCi1zdGF0aWMgdm9pZCBpbml0X2ludGVsX3BkYyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQotewotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpvYmpfbGlzdDsKLQl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwotCXUzMiAqYnVmOwotCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcGRjLiBJdCB3aWxsIGJlIHVzZWQgbGF0ZXIuICovCi0Jb2JqX2xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCksIEdGUF9LRVJORUwpOwotCWlmICghb2JqX2xpc3QpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlvYmogPSBrbWFsbG9jKHNpemVvZih1bmlvbiBhY3BpX29iamVjdCksIEdGUF9LRVJORUwpOwotCWlmICghb2JqKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQlrZnJlZShvYmpfbGlzdCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlidWYgPSBrbWFsbG9jKDEyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJa2ZyZWUob2JqKTsKLQkJa2ZyZWUob2JqX2xpc3QpOwotCQlyZXR1cm47Ci0JfQotCi0JYnVmWzBdID0gQUNQSV9QRENfUkVWSVNJT05fSUQ7Ci0JYnVmWzFdID0gMTsKLQlidWZbMl0gPSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TTVA7Ci0JLyoKLQkgKiBUaGUgZGVmYXVsdCBvZiBQRENfU01QX1RfU1dDT09SRCBiaXQgaXMgc2V0IGZvciBJQTY0IGNwdSBzbwotCSAqIHRoYXQgT1NQTSBpcyBjYXBhYmxlIG9mIG5hdGl2ZSBBQ1BJIHRocm90dGxpbmcgc29mdHdhcmUKLQkgKiBjb29yZGluYXRpb24gdXNpbmcgQklPUyBzdXBwbGllZCBfVFNEIGluZm8uCi0JICovCi0JYnVmWzJdIHw9IEFDUElfUERDX1NNUF9UX1NXQ09PUkQ7Ci0KLQlvYmotPnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCW9iai0+YnVmZmVyLmxlbmd0aCA9IDEyOwotCW9iai0+YnVmZmVyLnBvaW50ZXIgPSAodTggKikgYnVmOwotCW9ial9saXN0LT5jb3VudCA9IDE7Ci0Jb2JqX2xpc3QtPnBvaW50ZXIgPSBvYmo7Ci0JcHItPnBkYyA9IG9ial9saXN0OwotCi0JcmV0dXJuOwotfQotCi0vKiBJbml0aWFsaXplIF9QREMgZGF0YSBiYXNlZCBvbiB0aGUgQ1BVIHZlbmRvciAqLwotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCi17Ci0JcHItPnBkYyA9IE5VTEw7Ci0JaW5pdF9pbnRlbF9wZGMocHIpOwotCXJldHVybjsKLX0KLQotRVhQT1JUX1NZTUJPTChhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKTsKLQotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCi17Ci0JaWYgKHByLT5wZGMpIHsKLQkJa2ZyZWUocHItPnBkYy0+cG9pbnRlci0+YnVmZmVyLnBvaW50ZXIpOwotCQlrZnJlZShwci0+cGRjLT5wb2ludGVyKTsKLQkJa2ZyZWUocHItPnBkYyk7Ci0JCXByLT5wZGMgPSBOVUxMOwotCX0KLX0KLQotRVhQT1JUX1NZTUJPTChhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IDMyZjI2MzkuLjM3OGI0ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtMTIyNSw5ICsxMjI1LDEyIEBACiAJdW5zaWduZWQgbG9uZyBwc3I7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAorCWlmICghaWE2NF9pZHRyc1tjcHVdKQorCQlyZXR1cm47CisKIAlwc3IgPSBpYTY0X2NsZWFyX2ljKCk7CiAJZm9yIChpID0gSUE2NF9UUl9BTExPQ19CQVNFOyBpIDwgSUE2NF9UUl9BTExPQ19NQVg7IGkrKykgewotCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdW2lvcmQtMV1baV07CisJCXAgPSBpYTY0X2lkdHJzW2NwdV0gKyAoaW9yZCAtIDEpICogSUE2NF9UUl9BTExPQ19NQVg7CiAJCWlmIChwLT5wdGUgJiAweDEpIHsKIAkJCW9sZF9yciA9IGlhNjRfZ2V0X3JyKHAtPmlmYSk7CiAJCQlpZiAob2xkX3JyICE9IHAtPnJyKSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDUyNDYyODUuLjZiY2JlMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0yMjkzLDcgKzIyOTMsNyBAQAogCSAqIGlmICgobW0tPnRvdGFsX3ZtIDw8IFBBR0VfU0hJRlQpICsgbGVuPiB0YXNrLT5ybGltW1JMSU1JVF9BU10ucmxpbV9jdXIpCiAJICogCXJldHVybiAtRU5PTUVNOwogCSAqLwotCWlmIChzaXplID4gdGFzay0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cikKKwlpZiAoc2l6ZSA+IHRhc2tfcmxpbWl0KHRhc2ssIFJMSU1JVF9NRU1MT0NLKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92Y3B1LmggYi9hcmNoL2lhNjQva3ZtL3ZjcHUuaAppbmRleCAzNjA3MjRkLi45ODg5MTFiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZjcHUuaAorKysgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuaApAQCAtMzg4LDYgKzM4OCw5IEBACiAjZGVmaW5lIF92bW1fcmF3X3NwaW5fbG9jayh4KQkgZG8ge313aGlsZSgwKQogI2RlZmluZSBfdm1tX3Jhd19zcGluX3VubG9jayh4KSBkbyB7fXdoaWxlKDApCiAjZWxzZQordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworfSB2bW1fc3BpbmxvY2tfdDsKICNkZWZpbmUgX3ZtbV9yYXdfc3Bpbl9sb2NrKHgpCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJX191MzIgKmlhNjRfc3BpbmxvY2tfcHRyID0gKF9fdTMyICopICh4KTsJCVwKQEAgLTQwNSwxMiArNDA4LDEyIEBACiAKICNkZWZpbmUgX3ZtbV9yYXdfc3Bpbl91bmxvY2soeCkJCQkJXAogCWRvIHsgYmFycmllcigpOwkJCQlcCi0JCSgoc3BpbmxvY2tfdCAqKXgpLT5yYXdfbG9jay5sb2NrID0gMDsgfSBcCisJCSgodm1tX3NwaW5sb2NrX3QgKil4KS0+bG9jayA9IDA7IH0gXAogd2hpbGUgKDApCiAjZW5kaWYKIAotdm9pZCB2bW1fc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spOwotdm9pZCB2bW1fc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqbG9jayk7Cit2b2lkIHZtbV9zcGluX2xvY2sodm1tX3NwaW5sb2NrX3QgKmxvY2spOwordm9pZCB2bW1fc3Bpbl91bmxvY2sodm1tX3NwaW5sb2NrX3QgKmxvY2spOwogZW51bSB7CiAJSV9UTEIgPSAxLAogCURfVExCID0gMgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92bW0uYyBiL2FyY2gvaWE2NC9rdm0vdm1tLmMKaW5kZXggZjRiNGM4OS4uN2E2MmY3NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92bW0uYworKysgYi9hcmNoL2lhNjQva3ZtL3ZtbS5jCkBAIC02MCwxMiArNjAsMTIgQEAKIAlyZXR1cm4gOwogfQogCi12b2lkIHZtbV9zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKK3ZvaWQgdm1tX3NwaW5fbG9jayh2bW1fc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfdm1tX3Jhd19zcGluX2xvY2sobG9jayk7CiB9CiAKLXZvaWQgdm1tX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit2b2lkIHZtbV9zcGluX3VubG9jayh2bW1fc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfdm1tX3Jhd19zcGluX3VubG9jayhsb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdnRsYi5jIGIvYXJjaC9pYTY0L2t2bS92dGxiLmMKaW5kZXggMjBiMzg1Mi4uNDMzMmY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92dGxiLmMKKysrIGIvYXJjaC9pYTY0L2t2bS92dGxiLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogewogCXU2NCBpLCBkaXJ0eV9wYWdlcyA9IDE7CiAJdTY0IGJhc2VfZ2ZuID0gKHB0ZSZfUEFHRV9QUE5fTUFTSykgPj4gUEFHRV9TSElGVDsKLQlzcGlubG9ja190ICpsb2NrID0gX19rdm1fdmEodi0+YXJjaC5kaXJ0eV9sb2dfbG9ja19wYSk7CisJdm1tX3NwaW5sb2NrX3QgKmxvY2sgPSBfX2t2bV92YSh2LT5hcmNoLmRpcnR5X2xvZ19sb2NrX3BhKTsKIAl2b2lkICpkaXJ0eV9iaXRtYXAgPSAodm9pZCAqKUtWTV9NRU1fRElSVFlfTE9HX0JBU0U7CiAKIAlkaXJ0eV9wYWdlcyA8PD0gcHMgPD0gUEFHRV9TSElGVCA/IDAgOiBwcyAtIFBBR0VfU0hJRlQ7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vaW5pdC5jIGIvYXJjaC9pYTY0L21tL2luaXQuYwppbmRleCBiOTYwOWM2Li43YzBkNDgxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKQEAgLTkxLDcgKzkxLDcgQEAKIGlubGluZSB2b2lkCiBpYTY0X3NldF9yYnNfYm90ICh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fbWF4ICYgLTE2OworCXVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZSA9IHJsaW1pdF9tYXgoUkxJTUlUX1NUQUNLKSAmIC0xNjsKIAogCWlmIChzdGFja19zaXplID4gTUFYX1VTRVJfU1RBQ0tfU0laRSkKIAkJc3RhY2tfc2l6ZSA9IE1BWF9VU0VSX1NUQUNLX1NJWkU7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vdGxiLmMgYi9hcmNoL2lhNjQvbW0vdGxiLmMKaW5kZXggZWUwOWQyNi4uZjNkZTlkNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL3RsYi5jCisrKyBiL2FyY2gvaWE2NC9tbS90bGIuYwpAQCAtNDgsNyArNDgsNyBAQAogREVGSU5FX1BFUl9DUFUodTgsIGlhNjRfdHJfbnVtKTsgIC8qTnVtYmVyIG9mIFRSIHNsb3RzIGluIGN1cnJlbnQgcHJvY2Vzc29yKi8KIERFRklORV9QRVJfQ1BVKHU4LCBpYTY0X3RyX3VzZWQpOyAvKk1heCBTbG90IG51bWJlciB1c2VkIGJ5IGtlcm5lbCovCiAKLXN0cnVjdCBpYTY0X3RyX2VudHJ5IF9fcGVyX2NwdV9pZHRyc1tOUl9DUFVTXVsyXVtJQTY0X1RSX0FMTE9DX01BWF07CitzdHJ1Y3QgaWE2NF90cl9lbnRyeSAqaWE2NF9pZHRyc1tOUl9DUFVTXTsKIAogLyoKICAqIEluaXRpYWxpemVzIHRoZSBpYTY0X2N0eC5iaXRtYXAgYXJyYXkgYmFzZWQgb24gbWF4X2N0eCsxLgpAQCAtNDI5LDEwICs0MjksMTYgQEAKIAlzdHJ1Y3QgaWE2NF90cl9lbnRyeSAqcDsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisJaWYgKCFpYTY0X2lkdHJzW2NwdV0pIHsKKwkJaWE2NF9pZHRyc1tjcHVdID0ga21hbGxvYygyICogSUE2NF9UUl9BTExPQ19NQVggKgorCQkJCXNpemVvZiAoc3RydWN0IGlhNjRfdHJfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFpYTY0X2lkdHJzW2NwdV0pCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJciA9IC1FSU5WQUw7CiAJLypDaGVjayBvdmVybGFwIHdpdGggZXhpc3RpbmcgVFIgZW50cmllcyovCiAJaWYgKHRhcmdldF9tYXNrICYgMHgxKSB7Ci0JCXAgPSAmX19wZXJfY3B1X2lkdHJzW2NwdV1bMF1bMF07CisJCXAgPSBpYTY0X2lkdHJzW2NwdV07CiAJCWZvciAoaSA9IElBNjRfVFJfQUxMT0NfQkFTRTsgaSA8PSBwZXJfY3B1KGlhNjRfdHJfdXNlZCwgY3B1KTsKIAkJCQkJCQkJaSsrLCBwKyspIHsKIAkJCWlmIChwLT5wdGUgJiAweDEpCkBAIC00NDQsNyArNDUwLDcgQEAKIAkJfQogCX0KIAlpZiAodGFyZ2V0X21hc2sgJiAweDIpIHsKLQkJcCA9ICZfX3Blcl9jcHVfaWR0cnNbY3B1XVsxXVswXTsKKwkJcCA9IGlhNjRfaWR0cnNbY3B1XSArIElBNjRfVFJfQUxMT0NfTUFYOwogCQlmb3IgKGkgPSBJQTY0X1RSX0FMTE9DX0JBU0U7IGkgPD0gcGVyX2NwdShpYTY0X3RyX3VzZWQsIGNwdSk7CiAJCQkJCQkJCWkrKywgcCsrKSB7CiAJCQlpZiAocC0+cHRlICYgMHgxKQpAQCAtNDU5LDE2ICs0NjUsMTYgQEAKIAlmb3IgKGkgPSBJQTY0X1RSX0FMTE9DX0JBU0U7IGkgPCBwZXJfY3B1KGlhNjRfdHJfbnVtLCBjcHUpOyBpKyspIHsKIAkJc3dpdGNoICh0YXJnZXRfbWFzayAmIDB4MykgewogCQljYXNlIDE6Ci0JCQlpZiAoIShfX3Blcl9jcHVfaWR0cnNbY3B1XVswXVtpXS5wdGUgJiAweDEpKQorCQkJaWYgKCEoKGlhNjRfaWR0cnNbY3B1XSArIGkpLT5wdGUgJiAweDEpKQogCQkJCWdvdG8gZm91bmQ7CiAJCQljb250aW51ZTsKIAkJY2FzZSAyOgotCQkJaWYgKCEoX19wZXJfY3B1X2lkdHJzW2NwdV1bMV1baV0ucHRlICYgMHgxKSkKKwkJCWlmICghKChpYTY0X2lkdHJzW2NwdV0gKyBJQTY0X1RSX0FMTE9DX01BWCArIGkpLT5wdGUgJiAweDEpKQogCQkJCWdvdG8gZm91bmQ7CiAJCQljb250aW51ZTsKIAkJY2FzZSAzOgotCQkJaWYgKCEoX19wZXJfY3B1X2lkdHJzW2NwdV1bMF1baV0ucHRlICYgMHgxKSAmJgotCQkJCSEoX19wZXJfY3B1X2lkdHJzW2NwdV1bMV1baV0ucHRlICYgMHgxKSkKKwkJCWlmICghKChpYTY0X2lkdHJzW2NwdV0gKyBpKS0+cHRlICYgMHgxKSAmJgorCQkJICAgICEoKGlhNjRfaWR0cnNbY3B1XSArIElBNjRfVFJfQUxMT0NfTUFYICsgaSktPnB0ZSAmIDB4MSkpCiAJCQkJZ290byBmb3VuZDsKIAkJCWNvbnRpbnVlOwogCQlkZWZhdWx0OgpAQCAtNDg4LDcgKzQ5NCw3IEBACiAJaWYgKHRhcmdldF9tYXNrICYgMHgxKSB7CiAJCWlhNjRfaXRyKDB4MSwgaSwgdmEsIHB0ZSwgbG9nX3NpemUpOwogCQlpYTY0X3NybHpfaSgpOwotCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdWzBdW2ldOworCQlwID0gaWE2NF9pZHRyc1tjcHVdICsgaTsKIAkJcC0+aWZhID0gdmE7CiAJCXAtPnB0ZSA9IHB0ZTsKIAkJcC0+aXRpciA9IGxvZ19zaXplIDw8IDI7CkBAIC00OTcsNyArNTAzLDcgQEAKIAlpZiAodGFyZ2V0X21hc2sgJiAweDIpIHsKIAkJaWE2NF9pdHIoMHgyLCBpLCB2YSwgcHRlLCBsb2dfc2l6ZSk7CiAJCWlhNjRfc3Jsel9pKCk7Ci0JCXAgPSAmX19wZXJfY3B1X2lkdHJzW2NwdV1bMV1baV07CisJCXAgPSBpYTY0X2lkdHJzW2NwdV0gKyBJQTY0X1RSX0FMTE9DX01BWCArIGk7CiAJCXAtPmlmYSA9IHZhOwogCQlwLT5wdGUgPSBwdGU7CiAJCXAtPml0aXIgPSBsb2dfc2l6ZSA8PCAyOwpAQCAtNTI4LDcgKzUzNCw3IEBACiAJCXJldHVybjsKIAogCWlmICh0YXJnZXRfbWFzayAmIDB4MSkgewotCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdWzBdW3Nsb3RdOworCQlwID0gaWE2NF9pZHRyc1tjcHVdICsgc2xvdDsKIAkJaWYgKChwLT5wdGUmMHgxKSAmJiBpc190cl9vdmVybGFwKHAsIHAtPmlmYSwgcC0+aXRpcj4+MikpIHsKIAkJCXAtPnB0ZSA9IDA7CiAJCQlpYTY0X3B0cigweDEsIHAtPmlmYSwgcC0+aXRpcj4+Mik7CkBAIC01MzcsNyArNTQzLDcgQEAKIAl9CiAKIAlpZiAodGFyZ2V0X21hc2sgJiAweDIpIHsKLQkJcCA9ICZfX3Blcl9jcHVfaWR0cnNbY3B1XVsxXVtzbG90XTsKKwkJcCA9IGlhNjRfaWR0cnNbY3B1XSArIElBNjRfVFJfQUxMT0NfTUFYICsgc2xvdDsKIAkJaWYgKChwLT5wdGUgJiAweDEpICYmIGlzX3RyX292ZXJsYXAocCwgcC0+aWZhLCBwLT5pdGlyPj4yKSkgewogCQkJcC0+cHRlID0gMDsKIAkJCWlhNjRfcHRyKDB4MiwgcC0+aWZhLCBwLT5pdGlyPj4yKTsKQEAgLTU0Niw4ICs1NTIsOCBAQAogCX0KIAogCWZvciAoaSA9IHBlcl9jcHUoaWE2NF90cl91c2VkLCBjcHUpOyBpID49IElBNjRfVFJfQUxMT0NfQkFTRTsgaS0tKSB7Ci0JCWlmICgoX19wZXJfY3B1X2lkdHJzW2NwdV1bMF1baV0ucHRlICYgMHgxKSB8fAotCQkJCShfX3Blcl9jcHVfaWR0cnNbY3B1XVsxXVtpXS5wdGUgJiAweDEpKQorCQlpZiAoKChpYTY0X2lkdHJzW2NwdV0gKyBpKS0+cHRlICYgMHgxKSB8fAorCQkgICAgKChpYTY0X2lkdHJzW2NwdV0gKyBJQTY0X1RSX0FMTE9DX01BWCArIGkpLT5wdGUgJiAweDEpKQogCQkJYnJlYWs7CiAJfQogCXBlcl9jcHUoaWE2NF90cl91c2VkLCBjcHUpID0gaTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMKaW5kZXggNTFlYjZlZC4uOGYzNDVkZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzCkBAIC0xMDgsMTIgKzEwOCwxOSBAQAogCQlkY3ItcmVnID0gPDB4MDBjIDB4MDAyPjsKIAl9OwogCisJTVEwOiBtcSB7CisJCWNvbXBhdGlibGUgPSAiaWJtLG1xLTQ0MHNwZSI7CisJCWRjci1yZWcgPSA8MHgwNDAgMHgwMjA+OworCX07CisKIAlwbGIgewogCQljb21wYXRpYmxlID0gImlibSxwbGItNDQwc3BlIiwgImlibSxwbGItNDQwZ3AiLCAiaWJtLHBsYjQiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCS8qICAgICAgICBhZGRyLWNoaWxkICAgICBhZGRyLXBhcmVudCAgICBzaXplICovCi0JCXJhbmdlcyA9IDwweDQgMHhlMDAwMDAwMCAweDQgMHhlMDAwMDAwMCAweDIwMDAwMDAwCisJCXJhbmdlcyA9IDwweDQgMHgwMDEwMDAwMCAweDQgMHgwMDEwMDAwMCAweDAwMDAxMDAwCisJCQkgIDB4NCAweDAwMjAwMDAwIDB4NCAweDAwMjAwMDAwIDB4MDAwMDA0MDAKKwkJCSAgMHg0IDB4ZTAwMDAwMDAgMHg0IDB4ZTAwMDAwMDAgMHgyMDAwMDAwMAogCQkJICAweGMgMHgwMDAwMDAwMCAweGMgMHgwMDAwMDAwMCAweDIwMDAwMDAwCiAJCQkgIDB4ZCAweDAwMDAwMDAwIDB4ZCAweDAwMDAwMDAwIDB4ODAwMDAwMDAKIAkJCSAgMHhkIDB4ODAwMDAwMDAgMHhkIDB4ODAwMDAwMDAgMHg4MDAwMDAwMApAQCAtNDAwLDYgKzQwNyw0OSBAQAogCQkJCTB4MCAweDAgMHgwIDB4MyAmVUlDMyAweGEgMHg0IC8qIHN3aXp6bGVkIGludCBDICovCiAJCQkJMHgwIDB4MCAweDAgMHg0ICZVSUMzIDB4YiAweDQgLyogc3dpenpsZWQgaW50IEQgKi8+OwogCQl9OworCisJCUkyTzogaTJvQDQwMDEwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImlibSxpMm8tNDQwc3BlIjsKKwkJCXJlZyA9IDwweDAwMDAwMDA0IDB4MDAxMDAwMDAgMHgxMDA+OworCQkJZGNyLXJlZyA9IDwweDA2MCAweDAyMD47CisJCX07CisKKwkJRE1BMDogZG1hMEA0MDAxMDAxMDAgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sZG1hLTQ0MHNwZSI7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJcmVnID0gPDB4MDAwMDAwMDQgMHgwMDEwMDEwMCAweDEwMD47CisJCQlkY3ItcmVnID0gPDB4MDYwIDB4MDIwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JkRNQTA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCTAgJlVJQzAgMHgxNCA0CisJCQkJMSAmVUlDMSAweDE2IDQ+OworCQl9OworCisJCURNQTE6IGRtYTFANDAwMTAwMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLGRtYS00NDBzcGUiOworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCXJlZyA9IDwweDAwMDAwMDA0IDB4MDAxMDAyMDAgMHgxMDA+OworCQkJZGNyLXJlZyA9IDwweDA2MCAweDAyMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZETUExPjsKKwkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkwICZVSUMwIDB4MTYgNAorCQkJCTEgJlVJQzEgMHgxNiA0PjsKKwkJfTsKKworCQl4b3ItYWNjZWxANDAwMjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1jYyx4b3ItYWNjZWxlcmF0b3IiOworCQkJcmVnID0gPDB4MDAwMDAwMDQgMHgwMDIwMDAwMCAweDQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCWludGVycnVwdHMgPSA8MHgxZiA0PjsKKwkJfTsKIAl9OwogCiAJY2hvc2VuIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCmluZGV4IDMyZTEwZjUuLjhhM2E0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwpAQCAtMjA0LDYgKzIwNCw3IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTAgPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CiAKIAkJCW1kaW9ANTIwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI0Niw2ICsyNDcsNyBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkxID47CisJCQlmc2wsbWFnaWMtcGFja2V0OwogCiAJCQltZGlvQDUyMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0zMDksNiArMzExLDIyIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJfTsKIAorCQlndG0xOiB0aW1lckA1MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1ndG0iLCAiZnNsLGd0bSI7CisJCQlyZWcgPSA8MHg1MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw5MCA4IDc4IDggODQgOCA3MiA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMzMzMzMzMz47CisJCX07CisKKwkJdGltZXJANjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZ3RtIiwgImZzbCxndG0iOworCQkJcmVnID0gPDB4NjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8OTEgOCA3OSA4IDg1IDggNzMgOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzMzMzMzMzM+OworCQl9OworCiAJCS8qIElQSUMKIAkJICogaW50ZXJydXB0cyBjZWxsID0gPGludHIgIywgc2Vuc2U+CiAJCSAqIHNlbnNlIHZhbHVlcyBtYXRjaCBsaW51eCBJT1JFU09VUkNFX0lSUV8qIGRlZmluZXM6CkBAIC0zMzcsNiArMzU1LDE1IEBACiAJCQkJICAgICAgMHg1OSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LXBtYyIsICJmc2wsbXBjODMxMy1wbWMiLAorCQkJCSAgICAgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZnNsLG1wYzgzMTMtd2FrZXVwLXRpbWVyID0gPCZndG0xPjsKKwkJfTsKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKaW5kZXggZmVlZWI3Zi4uYjUzZDFkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKQEAgLTYzLDYgKzYzLDI0IEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCisJCWdwaW8xOiBncGlvLWNvbnRyb2xsZXJAYzAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1ncGlvIjsKKwkJCXJlZyA9IDwweGMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDc0IDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKworCQlncGlvMjogZ3Bpby1jb250cm9sbGVyQGQwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKIAkJaTJjQDMwMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTcyLDYgKzkwLDEyIEBACiAJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWRmc3JyOworCisJCQllZXByb206IGF0MjRANTAgeworCQkJCWNvbXBhdGlibGUgPSAic3QtbWljcm8sMjRjMjU2IjsKKwkJCQlyZWcgPSA8MHg1MD47CisJCQl9OworCiAJCX07CiAKIAkJaTJjQDMxMDAgewpAQCAtOTEsNiArMTE1LDI1IEBACiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl9OwogCisJCQlwY2YxOiBpZXhwQDM4IHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gInRpLHBjZjg1NzRhIjsKKwkJCQlyZWcgPSA8MHgzOD47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJfTsKKworCQkJcGNmMjogaWV4cEAzOSB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxwY2Y4NTc0YSI7CisJCQkJcmVnID0gPDB4Mzk+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisKKwkJCXNwZDogYXQyNEA1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJhdDI0LHNwZCI7CisJCQkJcmVnID0gPDB4NTE+OworCQkJfTsKKwogCQkJbWN1X3BpbzogbWN1QGEgewogCQkJCSNncGlvLWNlbGxzID0gPDI+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4MzQ5ZW1pdHgiLApAQCAtMjc1LDYgKzMxOCwyNCBAQAogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJCWRldmljZV90eXBlID0gImlwaWMiOwogCQl9OworCisJCWdwaW8tbGVkcyB7CisJCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJCWdyZWVuIHsKKwkJCQlsYWJlbCA9ICJHcmVlbiI7CisJCQkJZ3Bpb3MgPSA8JnBjZjEgMCAxPjsKKwkJCQlsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsKKwkJCX07CisKKwkJCXllbGxvdyB7CisJCQkJbGFiZWwgPSAiWWVsbG93IjsKKwkJCQlncGlvcyA9IDwmcGNmMSAxIDE+OworCQkJCS8qIGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9ICJoZWFydGJlYXQiOyAqLworCQkJCWRlZmF1bHQtc3RhdGUgPSAib24iOworCQkJfTsKKwkJfTsKKwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtMzMxLDcgKzM5MiwyNiBAQAogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5ZS1sb2NhbGJ1cyIsCiAJCQkgICAgICJmc2wscHEycHJvLWxvY2FsYnVzIjsKIAkJcmVnID0gPDB4ZTAwMDUwMDAgMHhkOD47Ci0JCXJhbmdlcyA9IDwweDMgMHgwIDB4ZjAwMDAwMDAgMHgyMTA+OworCQlyYW5nZXMgPSA8MHgwIDB4MCAweGZlMDAwMDAwIDB4MTAwMDAwMAkvKiBmbGFzaCAqLworCQkJICAweDEgMHgwIDB4ZjgwMDAwMDAgMHgyMDAwMAkvKiBWU0MgNzM4NSAqLworCQkJICAweDIgMHgwIDB4ZjkwMDAwMDAgMHgyMDAwMDAJLyogZXhwIHNsb3QgKi8KKwkJCSAgMHgzIDB4MCAweGYwMDAwMDAwIDB4MjEwPjsJLyogQ0Ygc2xvdCAqLworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwICAgICAgMHgwIDB4ODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCX07CisKKwkJZmxhc2hAMCw4MDAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHg4MDAwMDAgMHg4MDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKwkJfTsKIAogCQlwYXRhQDMsMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5ZW1pdHgtcGF0YSIsICJhdGEtZ2VuZXJpYyI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2FycC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2FycC5kdHMKaW5kZXggMzE2MDVlZS4uZTU3NmVlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhcnAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy93YXJwLmR0cwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKIAkJCQlmcGdhQDIsNDAwMCB7CiAJCQkJCWNvbXBhdGlibGUgPSAicGlrYSxmcGdhLXNkIjsKLQkJCQkJcmVnID0gPDB4MDAwMDAwMDIgMHgwMDAwNDAwMCAweDAwMDAwQTAwPjsKKwkJCQkJcmVnID0gPDB4MDAwMDAwMDIgMHgwMDAwNDAwMCAweDAwMDA0MDAwPjsKIAkJCQl9OwogCiAJCQkJbm9yQDAsMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYyBiL2FyY2gvcG93ZXJwYy9ib290L3VnZWNvbi5jCmluZGV4IDUwNjA5ZWEuLjhmMmE2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3VnZWNvbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3VnZWNvbi5jCkBAIC04Niw3ICs4Niw3IEBACiAKIAl3aGlsZSAoIXVnX2lzX3R4Zmlmb19yZWFkeSgpICYmIGNvdW50LS0pCiAJCWJhcnJpZXIoKTsKLQlpZiAoY291bnQpCisJaWYgKGNvdW50ID49IDApCiAJCXVnX3Jhd19wdXRjKGNoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCmluZGV4IGZjOTA1OTIuLjgyNmE2NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKQEAgLTc1Nyw3ICs3NTcsNyBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19BQ0VOSUM9eQorQ09ORklHX0FDRU5JQz1tCiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15CkBAIC03OTQsOCArNzk0LDggQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLUNPTkZJR19UUj15Ci1DT05GSUdfSUJNT0w9eQorIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfSUJNT0wgaXMgbm90IHNldAogIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldAogIyBDT05GSUdfVE1TMzgwVFIgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCmluZGV4IGY5MjVjNTUuLjc2OTgyYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCkBAIC03MTQsOCArNzE0LDggQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLUNPTkZJR19UUj15Ci1DT05GSUdfSUJNT0w9eQorIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfSUJNT0wgaXMgbm90IHNldAogIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldAogIyBDT05GSUdfVE1TMzgwVFIgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggMjUyNDAxOC4uN2IzODA0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMzA0LDExICszMDQsMTEgQEAKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CkBAIC05ODAsNyArOTgwLDcgQEAKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX0FDRU5JQz15CitDT05GSUdfQUNFTklDPW0KIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKQEAgLTEwMjMsOCArMTAyMyw4IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFI9eQotQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKIApAQCAtMTg2Myw3ICsxODYzLDcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKK0NPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCmluZGV4IDE4YWY0NjAuLjgxOTVmMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwpAQCAtMTAwOCw4ICsxMDA4LDggQEAKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfVFI9eQotQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKaW5kZXggYzU2ODMyOS4uY2E5ZmY5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKQEAgLTIzMCwxMSArMjMwLDExIEBACiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfU0NIRURfSFJUSUNLPXkKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldApAQCAtNzk2LDcgKzc5Niw3IEBACiAjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19BQ0VOSUM9eQorQ09ORklHX0FDRU5JQz1tCiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15CkBAIC04MzQsOCArODM0LDggQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLUNPTkZJR19UUj15Ci1DT05GSUdfSUJNT0w9eQorIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfSUJNT0wgaXMgbm90IHNldAogIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldAogIyBDT05GSUdfVE1TMzgwVFIgaXMgbm90IHNldAogCkBAIC0xNDk0LDcgKzE0OTQsNyBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQorQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2J1Zy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IDY0ZTFmZGMuLjJjMTUyMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYnVnLmgKQEAgLTY4LDcgKzY4LDcgQEAKIAkJX0VNSVRfQlVHX0VOVFJZCQkJCQlcCiAJCTogOiAiaSIgKF9fRklMRV9fKSwgImkiIChfX0xJTkVfXyksCQlcCiAJCSAgICAiaSIgKDApLCAiaSIgIChzaXplb2Yoc3RydWN0IGJ1Z19lbnRyeSkpKTsJXAotCWZvcig7OykgOwkJCQkJCVwKKwl1bnJlYWNoYWJsZSgpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQlVHX09OKHgpIGRvIHsJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBlYTA0NjMyLi4zODc2MmVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ncGlvLmgKQEAgLTM4LDEyICszOCw5IEBACiAJcmV0dXJuIF9fZ3Bpb19jYW5zbGVlcChncGlvKTsKIH0KIAotLyoKLSAqIE5vdCBpbXBsZW1lbnRlZCwgeWV0LgotICovCiBzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBpbnQgZ3BpbykKIHsKLQlyZXR1cm4gLUVOT1NZUzsKKwlyZXR1cm4gX19ncGlvX3RvX2lycShncGlvKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaW50IGlycSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwppbmRleCAzODM5ODM5Li5iODc2ZTk4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwpAQCAtNjQyLDEwICs2NDIsMTQgQEAKICAqLwogc3RhdGljIGludCBlbXVsYXRlX3ZzeCh1bnNpZ25lZCBjaGFyIF9fdXNlciAqYWRkciwgdW5zaWduZWQgaW50IHJlZywKIAkJICAgICAgIHVuc2lnbmVkIGludCBhcmVnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGxlbmd0aCkKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBlbHNpemUpCiB7CiAJY2hhciAqcHRyOworCXVuc2lnbmVkIGxvbmcgKmxwdHI7CiAJaW50IHJldCA9IDA7CisJaW50IHN3ID0gMDsKKwlpbnQgaSwgajsKIAogCWZsdXNoX3ZzeF90b190aHJlYWQoY3VycmVudCk7CiAKQEAgLTY1NCwxOSArNjU4LDM1IEBACiAJZWxzZQogCQlwdHIgPSAoY2hhciAqKSAmY3VycmVudC0+dGhyZWFkLnZyW3JlZyAtIDMyXTsKIAotCWlmIChmbGFncyAmIFNUKQotCQlyZXQgPSBfX2NvcHlfdG9fdXNlcihhZGRyLCBwdHIsIGxlbmd0aCk7Ci0gICAgICAgIGVsc2UgewotCQlpZiAoZmxhZ3MgJiBTUExUKXsKLQkJCXJldCA9IF9fY29weV9mcm9tX3VzZXIocHRyLCBhZGRyLCBsZW5ndGgpOwotCQkJcHRyICs9IGxlbmd0aDsKKwlscHRyID0gKHVuc2lnbmVkIGxvbmcgKikgcHRyOworCisJaWYgKGZsYWdzICYgU1cpCisJCXN3ID0gZWxzaXplLTE7CisKKwlmb3IgKGogPSAwOyBqIDwgbGVuZ3RoOyBqICs9IGVsc2l6ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZWxzaXplOyArK2kpIHsKKwkJCWlmIChmbGFncyAmIFNUKQorCQkJCXJldCB8PSBfX3B1dF91c2VyKHB0cltpXnN3XSwgYWRkciArIGkpOworCQkJZWxzZQorCQkJCXJldCB8PSBfX2dldF91c2VyKHB0cltpXnN3XSwgYWRkciArIGkpOwogCQl9Ci0JCXJldCB8PSBfX2NvcHlfZnJvbV91c2VyKHB0ciwgYWRkciwgbGVuZ3RoKTsKKwkJcHRyICArPSBlbHNpemU7CisJCWFkZHIgKz0gZWxzaXplOwogCX0KLQlpZiAoZmxhZ3MgJiBVKQotCQlyZWdzLT5ncHJbYXJlZ10gPSByZWdzLT5kYXI7Ci0JaWYgKHJldCkKKworCWlmICghcmV0KSB7CisJCWlmIChmbGFncyAmIFUpCisJCQlyZWdzLT5ncHJbYXJlZ10gPSByZWdzLT5kYXI7CisKKwkJLyogU3BsYXQgbG9hZCBjb3BpZXMgdGhlIHNhbWUgZGF0YSB0byB0b3AgYW5kIGJvdHRvbSA4IGJ5dGVzICovCisJCWlmIChmbGFncyAmIFNQTFQpCisJCQlscHRyWzFdID0gbHB0clswXTsKKwkJLyogRm9yIDggYnl0ZSBsb2FkcywgemVybyB0aGUgdG9wIDggYnl0ZXMgKi8KKwkJZWxzZSBpZiAoIShmbGFncyAmIFNUKSAmJiAoOCA9PSBsZW5ndGgpKQorCQkJbHB0clsxXSA9IDA7CisJfSBlbHNlCiAJCXJldHVybiAtRUZBVUxUOworCiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKQEAgLTc2NywxNiArNzg3LDI1IEBACiAKICNpZmRlZiBDT05GSUdfVlNYCiAJaWYgKChpbnN0cnVjdGlvbiAmIDB4ZmMwMDAwM2UpID09IDB4N2MwMDAwMTgpIHsKLQkJLyogQWRkaXRpb25hbCByZWdpc3RlciBhZGRyZXNzaW5nIGJpdCAoNjQgVlNYIHZzIDMyIEZQUi9HUFIgKi8KKwkJdW5zaWduZWQgaW50IGVsc2l6ZTsKKworCQkvKiBBZGRpdGlvbmFsIHJlZ2lzdGVyIGFkZHJlc3NpbmcgYml0ICg2NCBWU1ggdnMgMzIgRlBSL0dQUikgKi8KIAkJcmVnIHw9IChpbnN0cnVjdGlvbiAmIDB4MSkgPDwgNTsKIAkJLyogU2ltcGxlIGlubGluZSBkZWNvZGVyIGluc3RlYWQgb2YgYSB0YWJsZSAqLworCQkvKiBWU1ggaGFzIG9ubHkgOCBhbmQgMTYgYnl0ZSBtZW1vcnkgYWNjZXNzZXMgKi8KKwkJbmIgPSA4OwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDIwMCkKIAkJCW5iID0gMTY7Ci0JCWVsc2UgaWYgKGluc3RydWN0aW9uICYgMHgwODApCi0JCQluYiA9IDg7Ci0JCWVsc2UKLQkJCW5iID0gNDsKKworCQkvKiBWZWN0b3Igc3RvcmVzIGluIGxpdHRsZS1lbmRpYW4gbW9kZSBzd2FwIGluZGl2aWR1YWwKKwkJICAgZWxlbWVudHMsIHNvIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5ICovCisJCWVsc2l6ZSA9IDQ7CisJCWlmIChpbnN0cnVjdGlvbiAmIDB4ODApCisJCQllbHNpemUgPSA4OworCiAJCWZsYWdzID0gMDsKKwkJaWYgKHJlZ3MtPm1zciAmIE1TUl9MRSkKKwkJCWZsYWdzIHw9IFNXOwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDEwMCkKIAkJCWZsYWdzIHw9IFNUOwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDA0MCkKQEAgLTc4Nyw3ICs4MTYsNyBAQAogCQkJbmIgPSA4OwogCQl9CiAJCVBQQ19XQVJOX0FMSUdOTUVOVCh2c3gsIHJlZ3MpOwotCQlyZXR1cm4gZW11bGF0ZV92c3goYWRkciwgcmVnLCBhcmVnLCByZWdzLCBmbGFncywgbmIpOworCQlyZXR1cm4gZW11bGF0ZV92c3goYWRkciwgcmVnLCBhcmVnLCByZWdzLCBmbGFncywgbmIsIGVsc2l6ZSk7CiAJfQogI2VuZGlmCiAJLyogQSBzaXplIG9mIDAgaW5kaWNhdGVzIGFuIGluc3RydWN0aW9uIHdlIGRvbid0IHN1cHBvcnQsIHdpdGgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggZThkZmRiZC4uY2FkYmVkNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTExMDcsNiArMTEwNywxMiBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQlzdHJ1Y3QgZGV2X2FyY2hkYXRhICpzZCA9ICZkZXYtPmRldi5hcmNoZGF0YTsKIAorCQkvKiBDYXJkYnVzIGNhbiBjYWxsIHVzIHRvIGFkZCBuZXcgZGV2aWNlcyB0byBhIGJ1cywgc28gaWdub3JlCisJCSAqIHRob3NlIHdobyBhcmUgYWxyZWFkeSBmdWxseSBkaXNjb3ZlcmVkCisJCSAqLworCQlpZiAoZGV2LT5pc19hZGRlZCkKKwkJCWNvbnRpbnVlOworCiAJCS8qIFNldHVwIE9GIG5vZGUgcG9pbnRlciBpbiBhcmNoZGF0YSAqLwogCQlzZC0+b2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCkBAIC0xMTQ3LDYgKzExNTMsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpYmlvc19maXh1cF9idXMpOwogCit2b2lkIF9fZGV2aW5pdCBwY2lfZml4dXBfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCS8qIE5vdyBmaXh1cCBkZXZpY2VzIG9uIHRoYXQgYnVzICovCisJcGNpYmlvc19zZXR1cF9idXNfZGV2aWNlcyhidXMpOworfQorCisKIHN0YXRpYyBpbnQgc2tpcF9pc2FfaW9yZXNvdXJjZV9hbGlnbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWlmICgocHBjX3BjaV9mbGFncyAmIFBQQ19QQ0lfQ0FOX1NLSVBfSVNBX0FMSUdOKSAmJgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwppbmRleCA1NTk4Zjg4Li5lNGJlZWIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwpAQCAtMzkwLDYgKzM5MCwyNiBAQAogewogCXU2NCByYiA9IDAsIHJzID0gMDsKIAorCS8qCisJICogQWNjb3JkaW5nIHRvIEJvb2szIDIuMDEgbXRzcmluIGlzIGltcGxlbWVudGVkIGFzOgorCSAqCisJICogVGhlIFNMQiBlbnRyeSBzcGVjaWZpZWQgYnkgKFJCKTMyOjM1IGlzIGxvYWRlZCBmcm9tIHJlZ2lzdGVyCisJICogUlMsIGFzIGZvbGxvd3MuCisJICoKKwkgKiBTTEJFIEJpdAlTb3VyY2UJCQlTTEIgRmllbGQKKwkgKgorCSAqIDA6MzEJCTB4MDAwMF8wMDAwCQlFU0lELTA6MzEKKwkgKiAzMjozNQkoUkIpMzI6MzUJCUVTSUQtMzI6MzUKKwkgKiAzNgkJMGIxCQkJVgorCSAqIDM3OjYxCTB4MDBfMDAwMHx8IDBiMAkJVlNJRC0wOjI0CisJICogNjI6ODgJKFJTKTM3OjYzCQlWU0lELTI1OjUxCisJICogODk6OTEJKFJTKTMzOjM1CQlLcyBLcCBOCisJICogOTIJCShSUykzNgkJCUwgKChSUykzNiBtdXN0IGJlIDBiMCkKKwkgKiA5MwkJMGIwCQkJQworCSAqLworCisJZHByaW50aygiS1ZNIE1NVTogbXRzcmluKDB4JXgsIDB4JWx4KVxuIiwgc3JudW0sIHZhbHVlKTsKKwogCS8qIEVTSUQgPSBzcm51bSAqLwogCXJiIHw9IChzcm51bSAmIDB4ZikgPDwgMjg7CiAJLyogU2V0IHRoZSB2YWxpZCBiaXQgKi8KQEAgLTQwMCw3ICs0MjAsNyBAQAogCS8qIFZTSUQgPSBWU0lEICovCiAJcnMgfD0gKHZhbHVlICYgMHhmZmZmZmZmKSA8PCAxMjsKIAkvKiBmbGFncyA9IGZsYWdzICovCi0JcnMgfD0gKCh2YWx1ZSA+PiAyNykgJiAweGYpIDw8IDk7CisJcnMgfD0gKCh2YWx1ZSA+PiAyOCkgJiAweDcpIDw8IDk7CiAKIAlrdm1wcGNfbW11X2Jvb2szc182NF9zbGJtdGUodmNwdSwgcnMsIHJiKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDUwZjg2N2QuLjNlY2RjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJCQllbHNlCiAJCQkJZGVmLT50bGJpZWwgPSAwOwogCi0JCQlEQkcoIiAlZDogc2hpZnQ9JTAyeCwgc2xscD0lMDR4LCBhdnBubT0lMDh4LCAiCisJCQlEQkcoIiAlZDogc2hpZnQ9JTAyeCwgc2xscD0lMDRseCwgYXZwbm09JTA4bHgsICIKIAkJCSAgICAidGxiaWVsPSVkLCBwZW5jPSVkXG4iLAogCQkJICAgIGlkeCwgc2hpZnQsIGRlZi0+c2xscCwgZGVmLT5hdnBubSwgZGVmLT50bGJpZWwsCiAJCQkgICAgZGVmLT5wZW5jKTsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCQliYXNlID0gKHVuc2lnbmVkIGxvbmcpX192YShsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlKTsKIAkJc2l6ZSA9IGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemU7CiAKLQkJREJHKCJjcmVhdGluZyBtYXBwaW5nIGZvciByZWdpb246ICVseC4uJWx4IChwcm90OiAleClcbiIsCisJCURCRygiY3JlYXRpbmcgbWFwcGluZyBmb3IgcmVnaW9uOiAlbHguLiVseCAocHJvdDogJWx4KVxuIiwKIAkJICAgIGJhc2UsIHNpemUsIHByb3QpOwogCiAjaWZkZWYgQ09ORklHX1UzX0RBUlQKQEAgLTg3OSw3ICs4NzksNyBAQAogICovCiBpbnQgaGFzaF9wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgYWNjZXNzLCB1bnNpZ25lZCBsb25nIHRyYXApCiB7Ci0Jdm9pZCAqcGdkaXI7CisJcGdkX3QgKnBnZGlyOwogCXVuc2lnbmVkIGxvbmcgdnNpZDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlwdGVfdCAqcHRlcDsKQEAgLTEwMjUsNyArMTAyNSw3IEBACiAJZWxzZQogI2VuZGlmIC8qIENPTkZJR19QUENfSEFTX0hBU0hfNjRLICovCiAJewotCQlpbnQgc3BwID0gc3VicGFnZV9wcm90ZWN0aW9uKHBnZGlyLCBlYSk7CisJCWludCBzcHAgPSBzdWJwYWdlX3Byb3RlY3Rpb24obW0sIGVhKTsKIAkJaWYgKGFjY2VzcyAmIHNwcCkKIAkJCXJjID0gLTI7CiAJCWVsc2UKQEAgLTExMTUsNyArMTExNSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBoYXNoLCBpbmRleCwgc2hpZnQsIGhpZHgsIHNsb3Q7CiAKLQlEQkdfTE9XKCJmbHVzaF9oYXNoX3BhZ2UodmE9JTAxNngpXG4iLCB2YSk7CisJREJHX0xPVygiZmx1c2hfaGFzaF9wYWdlKHZhPSUwMTZseClcbiIsIHZhKTsKIAlwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocHRlLCBwc2l6ZSwgdmEsIGluZGV4LCBzaGlmdCkgewogCQloYXNoID0gaHB0X2hhc2godmEsIHNoaWZ0LCBzc2l6ZSk7CiAJCWhpZHggPSBfX3JwdGVfdG9faGlkeChwdGUsIGluZGV4KTsKQEAgLTExMjMsNyArMTEyMyw3IEBACiAJCQloYXNoID0gfmhhc2g7CiAJCXNsb3QgPSAoaGFzaCAmIGh0YWJfaGFzaF9tYXNrKSAqIEhQVEVTX1BFUl9HUk9VUDsKIAkJc2xvdCArPSBoaWR4ICYgX1BURUlEWF9HUk9VUF9JWDsKLQkJREJHX0xPVygiIHN1YiAlZDogaGFzaD0leCwgaGlkeD0leFxuIiwgaW5kZXgsIHNsb3QsIGhpZHgpOworCQlEQkdfTE9XKCIgc3ViICVsZDogaGFzaD0lbHgsIGhpZHg9JWx4XG4iLCBpbmRleCwgc2xvdCwgaGlkeCk7CiAJCXBwY19tZC5ocHRlX2ludmFsaWRhdGUoc2xvdCwgdmEsIHBzaXplLCBzc2l6ZSwgbG9jYWwpOwogCX0gcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IGJlNGYzNGMuLjEwNDRhNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTM1Myw3ICszNTMsNyBAQAogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKIAkJCWlmIChwLT5tbSkKLQkJCQljcHVfbWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHAtPm1tKSk7CisJCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHAtPm1tKSk7CiAJCX0KIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggMTc3ZTQwMy4uNTczYjNiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC0zODIsNyArMzgyLDcgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKCFnZXRfcHRlcHRyKCZpbml0X21tLCBhZGRyZXNzLCAma3B0ZSwgJmtwbWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyZXNzLCBrcHRlLCBta19wdGUocGFnZSwgcHJvdCkpOworCV9fc2V0X3B0ZV9hdCgmaW5pdF9tbSwgYWRkcmVzcywga3B0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpLCAwKTsKIAl3bWIoKTsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKIAlmbHVzaF9oYXNoX3BhZ2VzKDAsIGFkZHJlc3MsIHBtZF92YWwoKmtwbWQpLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCmluZGV4IGQzMDZmMDcuLjQzODA1MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYwpAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBQTUNDUjFfTkVYVF9TVEFURSAgICAgICAweDBDIC8qIE5leHQgc3RhdGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KICNkZWZpbmUgUE1DQ1IxX05FWFRfU1RBVEVfU0hJRlQgMgogI2RlZmluZSBQTUNDUjFfQ1VSUl9TVEFURSAgICAgICAweDAzIC8qIEN1cnJlbnQgc3RhdGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQqLworI2RlZmluZSBJTU1SX1NZU0NSX09GRlNFVCAgICAgICAweDEwMAogI2RlZmluZSBJTU1SX1JDV19PRkZTRVQgICAgICAgICAweDkwMAogI2RlZmluZSBSQ1dfUENJX0hPU1QgICAgICAgICAgICAweDgwMDAwMDAwCiAKQEAgLTc4LDYgKzc5LDIyIEBACiAJdTMyIHNjY3I7CiB9OwogCitzdHJ1Y3QgbXBjODN4eF9zeXNjciB7CisJX19iZTMyIHNncHJsOworCV9fYmUzMiBzZ3ByaDsKKwlfX2JlMzIgc3ByaWRyOworCV9fYmUzMiA6MzI7CisJX19iZTMyIHNwY3I7CisJX19iZTMyIHNpY3JsOworCV9fYmUzMiBzaWNyaDsKK307CisKK3N0cnVjdCBtcGM4M3h4X3NhdmVkIHsKKwl1MzIgc2ljcmw7CisJdTMyIHNpY3JoOworCXUzMiBzY2NyOworfTsKKwogc3RydWN0IHBtY190eXBlIHsKIAlpbnQgaGFzX2RlZXBfc2xlZXA7CiB9OwpAQCAtODcsNiArMTA0LDggQEAKIHN0YXRpYyBpbnQgcG1jX2lycTsKIHN0YXRpYyBzdHJ1Y3QgbXBjODN4eF9wbWMgX19pb21lbSAqcG1jX3JlZ3M7CiBzdGF0aWMgc3RydWN0IG1wYzgzeHhfY2xvY2sgX19pb21lbSAqY2xvY2tfcmVnczsKK3N0YXRpYyBzdHJ1Y3QgbXBjODN4eF9zeXNjciBfX2lvbWVtICpzeXNjcl9yZWdzOworc3RhdGljIHN0cnVjdCBtcGM4M3h4X3NhdmVkIHNhdmVkX3JlZ3M7CiBzdGF0aWMgaW50IGlzX3BjaV9hZ2VudCwgd2FrZV9mcm9tX3BjaTsKIHN0YXRpYyBwaHlzX2FkZHJfdCBpbW1yYmFzZTsKIHN0YXRpYyBpbnQgcGNpX3BtX3N0YXRlOwpAQCAtMTM3LDYgKzE1NiwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3VzcGVuZF9yZXN0b3JlX3JlZ3Modm9pZCkKK3sKKwlvdXRfYmUzMigmc3lzY3JfcmVncy0+c2ljcmwsIHNhdmVkX3JlZ3Muc2ljcmwpOworCW91dF9iZTMyKCZzeXNjcl9yZWdzLT5zaWNyaCwgc2F2ZWRfcmVncy5zaWNyaCk7CisJb3V0X2JlMzIoJmNsb2NrX3JlZ3MtPnNjY3IsIHNhdmVkX3JlZ3Muc2Njcik7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3VzcGVuZF9zYXZlX3JlZ3Modm9pZCkKK3sKKwlzYXZlZF9yZWdzLnNpY3JsID0gaW5fYmUzMigmc3lzY3JfcmVncy0+c2ljcmwpOworCXNhdmVkX3JlZ3Muc2ljcmggPSBpbl9iZTMyKCZzeXNjcl9yZWdzLT5zaWNyaCk7CisJc2F2ZWRfcmVncy5zY2NyID0gaW5fYmUzMigmY2xvY2tfcmVncy0+c2Njcik7Cit9CisKIHN0YXRpYyBpbnQgbXBjODN4eF9zdXNwZW5kX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlpbnQgcmV0ID0gLUVBR0FJTjsKQEAgLTE2Niw2ICsxOTksOCBAQAogCSAqLwogCiAJaWYgKGRlZXBfc2xlZXBpbmcpIHsKKwkJbXBjODN4eF9zdXNwZW5kX3NhdmVfcmVncygpOworCiAJCW91dF9iZTMyKCZwbWNfcmVncy0+bWFzaywgUE1DRVJfQUxMKTsKIAogCQlvdXRfYmUzMigmcG1jX3JlZ3MtPmNvbmZpZzEsCkBAIC0xNzksNiArMjE0LDggQEAKIAkJICAgICAgICAgaW5fYmUzMigmcG1jX3JlZ3MtPmNvbmZpZzEpICYgflBNQ0NSMV9QT1dFUl9PRkYpOwogCiAJCW91dF9iZTMyKCZwbWNfcmVncy0+bWFzaywgUE1DRVJfUE1DSSk7CisKKwkJbXBjODN4eF9zdXNwZW5kX3Jlc3RvcmVfcmVncygpOwogCX0gZWxzZSB7CiAJCW91dF9iZTMyKCZwbWNfcmVncy0+bWFzaywgUE1DRVJfUE1DSSk7CiAKQEAgLTE5NCw3ICsyMzEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG1wYzgzeHhfc3VzcGVuZF9maW5pc2godm9pZCkKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3VzcGVuZF9lbmQodm9pZCkKIHsKIAlkZWVwX3NsZWVwaW5nID0gMDsKIH0KQEAgLTI3OCw3ICszMTUsNyBAQAogCS52YWxpZCA9IG1wYzgzeHhfc3VzcGVuZF92YWxpZCwKIAkuYmVnaW4gPSBtcGM4M3h4X3N1c3BlbmRfYmVnaW4sCiAJLmVudGVyID0gbXBjODN4eF9zdXNwZW5kX2VudGVyLAotCS5maW5pc2ggPSBtcGM4M3h4X3N1c3BlbmRfZmluaXNoLAorCS5lbmQgPSBtcGM4M3h4X3N1c3BlbmRfZW5kLAogfTsKIAogc3RhdGljIGludCBwbWNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCkBAIC0zMzMsMTIgKzM3MCwyMyBAQAogCQlnb3RvIG91dF9wbWM7CiAJfQogCisJaWYgKGhhc19kZWVwX3NsZWVwKSB7CisJCXN5c2NyX3JlZ3MgPSBpb3JlbWFwKGltbXJiYXNlICsgSU1NUl9TWVNDUl9PRkZTRVQsCisJCQkJICAgICBzaXplb2YoKnN5c2NyX3JlZ3MpKTsKKwkJaWYgKCFzeXNjcl9yZWdzKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfc3lzY3I7CisJCX0KKwl9CisKIAlpZiAoaXNfcGNpX2FnZW50KQogCQltcGM4M3h4X3NldF9hZ2VudCgpOwogCiAJc3VzcGVuZF9zZXRfb3BzKCZtcGM4M3h4X3N1c3BlbmRfb3BzKTsKIAlyZXR1cm4gMDsKIAorb3V0X3N5c2NyOgorCWlvdW5tYXAoY2xvY2tfcmVncyk7CiBvdXRfcG1jOgogCWlvdW5tYXAocG1jX3JlZ3MpOwogb3V0OgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwppbmRleCBjNTAyOGEyLi4yMWY2MWI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwpAQCAtODYsNyArODYsNyBAQAogCXNjciA9IHBoeV9yZWFkKHBoeWRldiwgTVY4OEUxMTExX1NDUik7CiAKIAlpZiAoc2NyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIHNjcjsKIAogCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1WODhFMTExMV9TQ1IsIHNjciB8IDB4MDAwOCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYwppbmRleCBkNTk2MzI4Li5jMjc4YmQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJCSAgIGlycV9od19udW1iZXJfdCBod2lycSkKIHsKIAlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCBoLT5ob3N0X2RhdGEpOwotCWdldF9pcnFfZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmZsaXBwZXJfcGljLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYwppbmRleCBkZDIwYmZmLi5hNzcxZjkxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jCkBAIC05NSw3ICs5NSw3IEBACiAJCQkgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7CiAJc2V0X2lycV9jaGlwX2RhdGEodmlycSwgaC0+aG9zdF9kYXRhKTsKLQlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJaXJxX3RvX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZobHdkX3BpYywgaGFuZGxlX2xldmVsX2lycSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzIsOSArMTMyLDkgQEAKIAlzdHJ1Y3QgaXJxX2hvc3QgKmlycV9ob3N0ID0gZ2V0X2lycV9kYXRhKGNhc2NhZGVfdmlycSk7CiAJdW5zaWduZWQgaW50IHZpcnE7CiAKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWRlc2MtPmNoaXAtPm1hc2soY2FzY2FkZV92aXJxKTsgLyogSVJRX0xFVkVMICovCi0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAKIAl2aXJxID0gX19obHdkX3BpY19nZXRfaXJxKGlycV9ob3N0KTsKIAlpZiAodmlycSAhPSBOT19JUlEpCkBAIC0xNDIsMTEgKzE0MiwxMSBAQAogCWVsc2UKIAkJcHJfZXJyKCJzcHVyaW91cyBpbnRlcnJ1cHQhXG4iKTsKIAotCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJZGVzYy0+Y2hpcC0+YWNrKGNhc2NhZGVfdmlycSk7IC8qIElSUV9MRVZFTCAqLwogCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgZGVzYy0+Y2hpcC0+dW5tYXNrKQogCQlkZXNjLT5jaGlwLT51bm1hc2soY2FzY2FkZV92aXJxKTsKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC91c2JnZWNrb191ZGJnLmMKaW5kZXggZWRjOTU2Yy4uMjBhOGVkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC91c2JnZWNrb191ZGJnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC91c2JnZWNrb191ZGJnLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJd2hpbGUgKCF1Z19pc190eGZpZm9fcmVhZHkoKSAmJiBjb3VudC0tKQogCQliYXJyaWVyKCk7Ci0JaWYgKGNvdW50KQorCWlmIChjb3VudCA+PSAwKQogCQl1Z19yYXdfcHV0YyhjaCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKaW5kZXggMGQ5MzQzZC4uNjYxNzkxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKQEAgLTg1NSw1OSArODU1LDU4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCi1zdGF0aWMgaW50IHByb2NfbWZfZHVtcF9jbWRsaW5lKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9jbWRsaW5lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbjsKLQljaGFyICpwOworCWNoYXIgKnBhZ2UsICpwOwogCXN0cnVjdCB2c3BfY21kX2RhdGEgdnNwX2NtZDsKIAlpbnQgcmM7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAogCS8qIFRoZSBIViBhcHBlYXJzIHRvIHJldHVybiBubyBtb3JlIHRoYW4gMjU2IGJ5dGVzIG9mIGNvbW1hbmQgbGluZSAqLwotCWlmIChvZmYgPj0gMjU2KQotCQlyZXR1cm4gMDsKLQlpZiAoKG9mZiArIGNvdW50KSA+IDI1NikKLQkJY291bnQgPSAyNTYgLSBvZmY7Ci0KLQlkbWFfYWRkciA9IGlzZXJpZXNfaHZfbWFwKHBhZ2UsIG9mZiArIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOwotCWlmIChkbWFfYWRkciA9PSBETUFfRVJST1JfQ09ERSkKKwlwYWdlID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOworCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KHBhZ2UsIDAsIG9mZiArIGNvdW50KTsKKworCWRtYV9hZGRyID0gaXNlcmllc19odl9tYXAocGFnZSwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChkbWFfYWRkciA9PSBETUFfRVJST1JfQ09ERSkgeworCQlrZnJlZShwYWdlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChwYWdlLCAwLCAyNTYpOwogCW1lbXNldCgmdnNwX2NtZCwgMCwgc2l6ZW9mKHZzcF9jbWQpKTsKIAl2c3BfY21kLmNtZCA9IDMzOwogCXZzcF9jbWQuc3ViX2RhdGEua2Vybi50b2tlbiA9IGRtYV9hZGRyOwogCXZzcF9jbWQuc3ViX2RhdGEua2Vybi5hZGRyZXNzX3R5cGUgPSBIdkxwRG1hX0FkZHJlc3NUeXBlX1RjZUluZGV4OwotCXZzcF9jbWQuc3ViX2RhdGEua2Vybi5zaWRlID0gKHU2NClkYXRhOwotCXZzcF9jbWQuc3ViX2RhdGEua2Vybi5sZW5ndGggPSBvZmYgKyBjb3VudDsKKwl2c3BfY21kLnN1Yl9kYXRhLmtlcm4uc2lkZSA9ICh1NjQpbS0+cHJpdmF0ZTsKKwl2c3BfY21kLnN1Yl9kYXRhLmtlcm4ubGVuZ3RoID0gMjU2OwogCW1iKCk7CiAJcmMgPSBzaWduYWxfdnNwX2luc3RydWN0aW9uKCZ2c3BfY21kKTsKLQlpc2VyaWVzX2h2X3VubWFwKGRtYV9hZGRyLCBvZmYgKyBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKLQlpZiAocmMpCisJaXNlcmllc19odl91bm1hcChkbWFfYWRkciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChyYykgeworCQlrZnJlZShwYWdlKTsKIAkJcmV0dXJuIHJjOwotCWlmICh2c3BfY21kLnJlc3VsdF9jb2RlICE9IDApCisJfQorCWlmICh2c3BfY21kLnJlc3VsdF9jb2RlICE9IDApIHsKKwkJa2ZyZWUocGFnZSk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAlwID0gcGFnZTsKLQlsZW4gPSAwOwotCXdoaWxlIChsZW4gPCAob2ZmICsgY291bnQpKSB7Ci0JCWlmICgoKnAgPT0gJ1wwJykgfHwgKCpwID09ICdcbicpKSB7Ci0JCQlpZiAoKnAgPT0gJ1wwJykKLQkJCQkqcCA9ICdcbic7Ci0JCQlwKys7Ci0JCQlsZW4rKzsKLQkJCSplb2YgPSAxOworCXdoaWxlIChwIC0gcGFnZSA8IDI1NikgeworCQlpZiAoKnAgPT0gJ1wwJyB8fCAqcCA9PSAnXG4nKSB7CisJCQkqcCA9ICdcbic7CiAJCQlicmVhazsKIAkJfQogCQlwKys7Ci0JCWxlbisrOwotCX0KIAotCWlmIChsZW4gPCBvZmYpIHsKLQkJKmVvZiA9IDE7Ci0JCWxlbiA9IDA7CiAJfQotCXJldHVybiBsZW47CisJc2VxX3dyaXRlKG0sIHBhZ2UsIHAgLSBwYWdlKTsKKwlrZnJlZShwYWdlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZl9jbWRsaW5lX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWZfY21kbGluZV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCiAjaWYgMApAQCAtOTYyLDEwICs5NjEsOCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHJvY19tZl9kdW1wX3NpZGUoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1mX3NpZGVfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuOwogCWNoYXIgbWZfY3VycmVudF9zaWRlID0gJyAnOwogCXN0cnVjdCB2c3BfY21kX2RhdGEgdnNwX2NtZDsKIApAQCAtOTg5LDIxICs5ODYsMTcgQEAKIAkJfQogCX0KIAotCWxlbiA9IHNwcmludGYocGFnZSwgIiVjXG4iLCBtZl9jdXJyZW50X3NpZGUpOwotCi0JaWYgKGxlbiA8PSAob2ZmICsgY291bnQpKQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCWxlbiAtPSBvZmY7Ci0JaWYgKGxlbiA+IGNvdW50KQotCQlsZW4gPSBjb3VudDsKLQlpZiAobGVuIDwgMCkKLQkJbGVuID0gMDsKLQlyZXR1cm4gbGVuOworCXNlcV9wcmludGYobSwgIiVjXG4iLCBtZl9jdXJyZW50X3NpZGUpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHByb2NfbWZfY2hhbmdlX3NpZGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1mX3NpZGVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtZl9zaWRlX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1mX3NpZGVfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBzaWRlOwogCXU2NCBuZXdTaWRlOwpAQCAtMTA0MSw2ICsxMDM0LDE1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZl9zaWRlX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbWZfc2lkZV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbWZfc2lkZV9wcm9jX3dyaXRlLAorfTsKKwogI2lmIDAKIHN0YXRpYyB2b2lkIG1mX2dldFNyY0hpc3RvcnkoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKIHsKQEAgLTEwODcsOCArMTA4OSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBwcm9jX21mX2R1bXBfc3JjKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9zcmNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKICNpZiAwCiAJaW50IGxlbjsKQEAgLTExMDksOCArMTExMCwxMyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgcHJvY19tZl9jaGFuZ2Vfc3JjKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9zcmNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtZl9zcmNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgbWZfc3JjX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBzdGtidWZbMTBdOwogCkBAIC0xMTM1LDkgKzExNDEsMTkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19tZl9jaGFuZ2VfY21kbGluZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1mX3NyY19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG1mX3NyY19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbWZfc3JjX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgc3NpemVfdCBtZl9jbWRsaW5lX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogeworCXZvaWQgKmRhdGEgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJc3RydWN0IHZzcF9jbWRfZGF0YSB2c3BfY21kOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJY2hhciAqcGFnZTsKQEAgLTExNzIsNiArMTE4OCwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1mX2NtZGxpbmVfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtZl9jbWRsaW5lX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBtZl9jbWRsaW5lX3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgc3NpemVfdCBwcm9jX21mX2NoYW5nZV92bWxpbnV4KHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC0xMjQ2LDEyICsxMjcxLDEwIEBACiAJCWlmICghbWYpCiAJCQlyZXR1cm4gMTsKIAotCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgiY21kbGluZSIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBtZik7CisJCWVudCA9IHByb2NfY3JlYXRlX2RhdGEoImNtZGxpbmUiLCBTX0lSVVNSfFNfSVdVU1IsIG1mLAorCQkJCSAgICAgICAmbWZfY21kbGluZV9wcm9jX2ZvcHMsICh2b2lkICopKGxvbmcpaSk7CiAJCWlmICghZW50KQogCQkJcmV0dXJuIDE7Ci0JCWVudC0+ZGF0YSA9ICh2b2lkICopKGxvbmcpaTsKLQkJZW50LT5yZWFkX3Byb2MgPSBwcm9jX21mX2R1bXBfY21kbGluZTsKLQkJZW50LT53cml0ZV9wcm9jID0gcHJvY19tZl9jaGFuZ2VfY21kbGluZTsKIAogCQlpZiAoaSA9PSAzKQkvKiBubyB2bWxpbnV4IGVudHJ5IGZvciAnRCcgKi8KIAkJCWNvbnRpbnVlOwpAQCAtMTI2MywxOSArMTI4NiwxNSBAQAogCQkJcmV0dXJuIDE7CiAJfQogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInNpZGUiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwgbWZfcHJvY19yb290KTsKKwllbnQgPSBwcm9jX2NyZWF0ZSgic2lkZSIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBtZl9wcm9jX3Jvb3QsCisJCQkgICZtZl9zaWRlX3Byb2NfZm9wcyk7CiAJaWYgKCFlbnQpCiAJCXJldHVybiAxOwotCWVudC0+ZGF0YSA9ICh2b2lkICopMDsKLQllbnQtPnJlYWRfcHJvYyA9IHByb2NfbWZfZHVtcF9zaWRlOwotCWVudC0+d3JpdGVfcHJvYyA9IHByb2NfbWZfY2hhbmdlX3NpZGU7CiAKLQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgic3JjIiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsIG1mX3Byb2Nfcm9vdCk7CisJZW50ID0gcHJvY19jcmVhdGUoInNyYyIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBtZl9wcm9jX3Jvb3QsCisJCQkgICZtZl9zcmNfcHJvY19mb3BzKTsKIAlpZiAoIWVudCkKIAkJcmV0dXJuIDE7Ci0JZW50LT5kYXRhID0gKHZvaWQgKikwOwotCWVudC0+cmVhZF9wcm9jID0gcHJvY19tZl9kdW1wX3NyYzsKLQllbnQtPndyaXRlX3Byb2MgPSBwcm9jX21mX2NoYW5nZV9zcmM7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCmluZGV4IDQ5ZmY0ZGMuLjVhZWE5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJdTE2IHZsYW5NYXA7CiAJZG1hX2FkZHJfdCBoYW5kbGU7CiAJSHZMcEV2ZW50X1JjIGh2cmM7Ci0JREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKIAljb25zdCBjaGFyICpzeXNpZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZwppbmRleCAyNzU1NGM4Li5jNjY3ZjBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZwpAQCAtMiw2ICsyLDggQEAKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlib29sICJJQk0gcFNlcmllcyAmIG5ldyAoUE9XRVI1LWJhc2VkKSBpU2VyaWVzIgogCXNlbGVjdCBNUElDCisJc2VsZWN0IFBDSV9NU0kKKwlzZWxlY3QgWElDUwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX1JUQVMKIAlzZWxlY3QgUFBDX1JUQVNfREFFTU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKaW5kZXggYmNkY2YwYy4uYTI3N2YyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYwpAQCAtMzgsMTkgKzM4LDI4IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAKICNkZWZpbmUgQ01NX0RSSVZFUl9WRVJTSU9OCSIxLjAuMCIKICNkZWZpbmUgQ01NX0RFRkFVTFRfREVMQVkJMQorI2RlZmluZSBDTU1fSE9UUExVR19ERUxBWQk1CiAjZGVmaW5lIENNTV9ERUJVRwkJCTAKICNkZWZpbmUgQ01NX0RJU0FCTEUJCTAKICNkZWZpbmUgQ01NX09PTV9LQgkJMTAyNAogI2RlZmluZSBDTU1fTUlOX01FTV9NQgkJMjU2CiAjZGVmaW5lIEtCMlBBR0VTKF9wKQkJKChfcCk+PihQQUdFX1NISUZULTEwKSkKICNkZWZpbmUgUEFHRVMyS0IoX3ApCQkoKF9wKTw8KFBBR0VfU0hJRlQtMTApKQorLyoKKyAqIFRoZSBwcmlvcml0eSBsZXZlbCB0cmllcyB0byBlbnN1cmUgdGhhdCB0aGlzIG5vdGlmaWVyIGlzIGNhbGxlZCBhcworICogbGF0ZSBhcyBwb3NzaWJsZSB0byByZWR1Y2UgdGhyYXNoaW5nIGluIHRoZSBzaGFyZWQgbWVtb3J5IHBvb2wuCisgKi8KKyNkZWZpbmUgQ01NX01FTV9IT1RQTFVHX1BSSQkxCisjZGVmaW5lIENNTV9NRU1fSVNPTEFURV9QUkkJMTUKIAogc3RhdGljIHVuc2lnbmVkIGludCBkZWxheSA9IENNTV9ERUZBVUxUX0RFTEFZOworc3RhdGljIHVuc2lnbmVkIGludCBob3RwbHVnX2RlbGF5ID0gQ01NX0hPVFBMVUdfREVMQVk7CiBzdGF0aWMgdW5zaWduZWQgaW50IG9vbV9rYiA9IENNTV9PT01fS0I7CiBzdGF0aWMgdW5zaWduZWQgaW50IGNtbV9kZWJ1ZyA9IENNTV9ERUJVRzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY21tX2Rpc2FibGVkID0gQ01NX0RJU0FCTEU7CkBAIC02NSw2ICs3NCwxMCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGRlbGF5LCBkZWxheSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgIkRlbGF5IChpbiBzZWNvbmRzKSBiZXR3ZWVuIHBvbGxzIHRvIHF1ZXJ5IGh5cGVydmlzb3IgcGFnaW5nIHJlcXVlc3RzLiAiCiAJCSAiW0RlZmF1bHQ9IiBfX3N0cmluZ2lmeShDTU1fREVGQVVMVF9ERUxBWSkgIl0iKTsKK21vZHVsZV9wYXJhbV9uYW1lZChob3RwbHVnX2RlbGF5LCBob3RwbHVnX2RlbGF5LCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlbGF5LCAiRGVsYXkgKGluIHNlY29uZHMpIGFmdGVyIG1lbW9yeSBob3RwbHVnIHJlbW92ZSAiCisJCSAiYmVmb3JlIGxvYW5pbmcgcmVzdW1lcy4gIgorCQkgIltEZWZhdWx0PSIgX19zdHJpbmdpZnkoQ01NX0hPVFBMVUdfREVMQVkpICJdIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQob29tX2tiLCBvb21fa2IsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0Mob29tX2tiLCAiQW1vdW50IG9mIG1lbW9yeSBpbiBrYiB0byBmcmVlIG9uIE9PTS4gIgogCQkgIltEZWZhdWx0PSIgX19zdHJpbmdpZnkoQ01NX09PTV9LQikgIl0iKTsKQEAgLTkyLDYgKzEwNSw5IEBACiBzdGF0aWMgc3RydWN0IGNtbV9wYWdlX2FycmF5ICpjbW1fcGFnZV9saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyhjbW1fbG9jayk7CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoaG90cGx1Z19tdXRleCk7CitzdGF0aWMgaW50IGhvdHBsdWdfb2NjdXJyZWQ7IC8qIHByb3RlY3RlZCBieSB0aGUgaG90cGx1ZyBtdXRleCAqLworCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpjbW1fdGhyZWFkX3B0cjsKIAogLyoqCkBAIC0xMTAsNiArMTI2LDE3IEBACiAJY21tX2RiZygiQmVnaW4gcmVxdWVzdCBmb3IgJWxkIHBhZ2VzXG4iLCBucik7CiAKIAl3aGlsZSAobnIpIHsKKwkJLyogRXhpdCBpZiBhIGhvdHBsdWcgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIG9yIG9jY3VycmVkICovCisJCWlmIChtdXRleF90cnlsb2NrKCZob3RwbHVnX211dGV4KSkgeworCQkJaWYgKGhvdHBsdWdfb2NjdXJyZWQpIHsKKwkJCQltdXRleF91bmxvY2soJmhvdHBsdWdfbXV0ZXgpOworCQkJCWJyZWFrOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisKIAkJYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8CiAJCQkJICAgICAgIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DKTsKIAkJaWYgKCFhZGRyKQpAQCAtMTE5LDggKzE0Niw5IEBACiAJCWlmICghcGEgfHwgcGEtPmluZGV4ID49IENNTV9OUl9QQUdFUykgewogCQkJLyogTmVlZCBhIG5ldyBwYWdlIGZvciB0aGUgcGFnZSBsaXN0LiAqLwogCQkJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKLQkJCW5wYSA9IChzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJCQkJCQkgICAgICAgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MpOworCQkJbnBhID0gKHN0cnVjdCBjbW1fcGFnZV9hcnJheSAqKV9fZ2V0X2ZyZWVfcGFnZSgKKwkJCQkJR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAorCQkJCQlfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9NRU1BTExPQyk7CiAJCQlpZiAoIW5wYSkgewogCQkJCXByX2luZm8oIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldyBwYWdlIGxpc3RcbiIsIF9fZnVuY19fKTsKIAkJCQlmcmVlX3BhZ2UoYWRkcik7CkBAIC0yODIsOSArMzEwLDI4IEBACiAJd2hpbGUgKDEpIHsKIAkJdGltZWxlZnQgPSBtc2xlZXBfaW50ZXJydXB0aWJsZShkZWxheSAqIDEwMDApOwogCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGltZWxlZnQpIHsKLQkJCWxvYW5lZF9wYWdlc190YXJnZXQgPSBsb2FuZWRfcGFnZXM7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGltZWxlZnQpCiAJCQlicmVhazsKKworCQlpZiAobXV0ZXhfdHJ5bG9jaygmaG90cGx1Z19tdXRleCkpIHsKKwkJCWlmIChob3RwbHVnX29jY3VycmVkKSB7CisJCQkJaG90cGx1Z19vY2N1cnJlZCA9IDA7CisJCQkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJCQljbW1fZGJnKCJIb3RwbHVnIG9wZXJhdGlvbiBoYXMgb2NjdXJyZWQsICIKKwkJCQkJCSJsb2FuaW5nIGFjdGl2aXR5IHN1c3BlbmRlZCAiCisJCQkJCQkiZm9yICVkIHNlY29uZHMuXG4iLAorCQkJCQkJaG90cGx1Z19kZWxheSk7CisJCQkJdGltZWxlZnQgPSBtc2xlZXBfaW50ZXJydXB0aWJsZShob3RwbHVnX2RlbGF5ICoKKwkJCQkJCTEwMDApOworCQkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGltZWxlZnQpCisJCQkJCWJyZWFrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJfSBlbHNlIHsKKwkJCWNtbV9kYmcoIkhvdHBsdWcgb3BlcmF0aW9uIGluIHByb2dyZXNzLCBhY3Rpdml0eSAiCisJCQkJCSJzdXNwZW5kZWRcbiIpOworCQkJY29udGludWU7CiAJCX0KIAogCQljbW1fZ2V0X21wcCgpOwpAQCAtNDE0LDYgKzQ2MSwxOTMgQEAKIH07CiAKIC8qKgorICogY21tX2NvdW50X3BhZ2VzIC0gQ291bnQgdGhlIG51bWJlciBvZiBwYWdlcyBsb2FuZWQgaW4gYSBwYXJ0aWN1bGFyIHJhbmdlLgorICoKKyAqIEBhcmc6IG1lbW9yeV9pc29sYXRlX25vdGlmeSBzdHJ1Y3R1cmUgd2l0aCBhZGRyZXNzIHJhbmdlIGFuZCBjb3VudAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICAgICAgMCBvbiBzdWNjZXNzCisgKiovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbW1fY291bnRfcGFnZXModm9pZCAqYXJnKQoreworCXN0cnVjdCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkgKm1hcmcgPSBhcmc7CisJc3RydWN0IGNtbV9wYWdlX2FycmF5ICpwYTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKG1hcmctPnN0YXJ0X3Bmbik7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIChtYXJnLT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKwl1bnNpZ25lZCBsb25nIGlkeDsKKworCXNwaW5fbG9jaygmY21tX2xvY2spOworCXBhID0gY21tX3BhZ2VfbGlzdDsKKwl3aGlsZSAocGEpIHsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKXBhID49IHN0YXJ0ICYmICh1bnNpZ25lZCBsb25nKXBhIDwgZW5kKQorCQkJbWFyZy0+cGFnZXNfZm91bmQrKzsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBwYS0+aW5kZXg7IGlkeCsrKQorCQkJaWYgKHBhLT5wYWdlW2lkeF0gPj0gc3RhcnQgJiYgcGEtPnBhZ2VbaWR4XSA8IGVuZCkKKwkJCQltYXJnLT5wYWdlc19mb3VuZCsrOworCQlwYSA9IHBhLT5uZXh0OworCX0KKwlzcGluX3VubG9jaygmY21tX2xvY2spOworCXJldHVybiAwOworfQorCisvKioKKyAqIGNtbV9tZW1vcnlfaXNvbGF0ZV9jYiAtIEhhbmRsZSBtZW1vcnkgaXNvbGF0aW9uIG5vdGlmaWVyIGNhbGxzCisgKiBAc2VsZjoJbm90aWZpZXIgYmxvY2sgc3RydWN0CisgKiBAYWN0aW9uOglhY3Rpb24gdG8gdGFrZQorICogQGFyZzoJc3RydWN0IG1lbW9yeV9pc29sYXRlX25vdGlmeSBkYXRhIGZvciBoYW5kbGVyCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJTk9USUZZX09LIG9yIG5vdGlmaWVyIGVycm9yIGJhc2VkIG9uIHN1YmZ1bmN0aW9uIHJldHVybiB2YWx1ZQorICoqLworc3RhdGljIGludCBjbW1fbWVtb3J5X2lzb2xhdGVfY2Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCisJaWYgKGFjdGlvbiA9PSBNRU1fSVNPTEFURV9DT1VOVCkKKwkJcmV0ID0gY21tX2NvdW50X3BhZ2VzKGFyZyk7CisKKwlpZiAocmV0KQorCQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKHJldCk7CisJZWxzZQorCQlyZXQgPSBOT1RJRllfT0s7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNtbV9tZW1faXNvbGF0ZV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGNtbV9tZW1vcnlfaXNvbGF0ZV9jYiwKKwkucHJpb3JpdHkgPSBDTU1fTUVNX0lTT0xBVEVfUFJJCit9OworCisvKioKKyAqIGNtbV9tZW1fZ29pbmdfb2ZmbGluZSAtIFVubG9hbiBwYWdlcyB3aGVyZSBtZW1vcnkgaXMgdG8gYmUgcmVtb3ZlZAorICogQGFyZzogbWVtb3J5X25vdGlmeSBzdHJ1Y3R1cmUgd2l0aCBwYWdlIHJhbmdlIHRvIGJlIG9mZmxpbmVkCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJMCBvbiBzdWNjZXNzCisgKiovCitzdGF0aWMgaW50IGNtbV9tZW1fZ29pbmdfb2ZmbGluZSh2b2lkICphcmcpCit7CisJc3RydWN0IG1lbW9yeV9ub3RpZnkgKm1hcmcgPSBhcmc7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKG1hcmctPnN0YXJ0X3Bmbik7CisJdW5zaWduZWQgbG9uZyBlbmRfcGFnZSA9IHN0YXJ0X3BhZ2UgKyAobWFyZy0+bnJfcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJc3RydWN0IGNtbV9wYWdlX2FycmF5ICpwYV9jdXJyLCAqcGFfbGFzdCwgKm5wYTsKKwl1bnNpZ25lZCBsb25nIGlkeDsKKwl1bnNpZ25lZCBsb25nIGZyZWVkID0gMDsKKworCWNtbV9kYmcoIk1lbW9yeSBnb2luZyBvZmZsaW5lLCBzZWFyY2hpbmcgMHglbHggKCVsZCBwYWdlcykuXG4iLAorCQkJc3RhcnRfcGFnZSwgbWFyZy0+bnJfcGFnZXMpOworCXNwaW5fbG9jaygmY21tX2xvY2spOworCisJLyogU2VhcmNoIHRoZSBwYWdlIGxpc3QgZm9yIHBhZ2VzIGluIHRoZSByYW5nZSB0byBiZSBvZmZsaW5lZCAqLworCXBhX2xhc3QgPSBwYV9jdXJyID0gY21tX3BhZ2VfbGlzdDsKKwl3aGlsZSAocGFfY3VycikgeworCQlmb3IgKGlkeCA9IChwYV9jdXJyLT5pbmRleCAtIDEpOyAoaWR4ICsgMSkgPiAwOyBpZHgtLSkgeworCQkJaWYgKChwYV9jdXJyLT5wYWdlW2lkeF0gPCBzdGFydF9wYWdlKSB8fAorCQkJICAgIChwYV9jdXJyLT5wYWdlW2lkeF0gPj0gZW5kX3BhZ2UpKQorCQkJCWNvbnRpbnVlOworCisJCQlwbHBhcl9wYWdlX3NldF9hY3RpdmUoX19wYShwYV9jdXJyLT5wYWdlW2lkeF0pKTsKKwkJCWZyZWVfcGFnZShwYV9jdXJyLT5wYWdlW2lkeF0pOworCQkJZnJlZWQrKzsKKwkJCWxvYW5lZF9wYWdlcy0tOworCQkJdG90YWxyYW1fcGFnZXMrKzsKKwkJCXBhX2N1cnItPnBhZ2VbaWR4XSA9IHBhX2xhc3QtPnBhZ2VbLS1wYV9sYXN0LT5pbmRleF07CisJCQlpZiAocGFfbGFzdC0+aW5kZXggPT0gMCkgeworCQkJCWlmIChwYV9jdXJyID09IHBhX2xhc3QpCisJCQkJCXBhX2N1cnIgPSBwYV9sYXN0LT5uZXh0OworCQkJCXBhX2xhc3QgPSBwYV9sYXN0LT5uZXh0OworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljbW1fcGFnZV9saXN0KTsKKwkJCQljbW1fcGFnZV9saXN0ID0gcGFfbGFzdDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlwYV9jdXJyID0gcGFfY3Vyci0+bmV4dDsKKwl9CisKKwkvKiBTZWFyY2ggZm9yIHBhZ2UgbGlzdCBzdHJ1Y3R1cmVzIGluIHRoZSByYW5nZSB0byBiZSBvZmZsaW5lZCAqLworCXBhX2xhc3QgPSBOVUxMOworCXBhX2N1cnIgPSBjbW1fcGFnZV9saXN0OworCXdoaWxlIChwYV9jdXJyKSB7CisJCWlmICgoKHVuc2lnbmVkIGxvbmcpcGFfY3VyciA+PSBzdGFydF9wYWdlKSAmJgorCQkJCSgodW5zaWduZWQgbG9uZylwYV9jdXJyIDwgZW5kX3BhZ2UpKSB7CisJCQlucGEgPSAoc3RydWN0IGNtbV9wYWdlX2FycmF5ICopX19nZXRfZnJlZV9wYWdlKAorCQkJCQlHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8CisJCQkJCV9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DKTsKKwkJCWlmICghbnBhKSB7CisJCQkJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKKwkJCQljbW1fZGJnKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBsaXN0ICIKKwkJCQkJCSJtYW5hZ2VtZW50LiBNZW1vcnkgaG90cGx1ZyAiCisJCQkJCQkiZmFpbGVkLlxuIik7CisJCQkJcmV0dXJuIEVOT01FTTsKKwkJCX0KKwkJCW1lbWNweShucGEsIHBhX2N1cnIsIFBBR0VfU0laRSk7CisJCQlpZiAocGFfY3VyciA9PSBjbW1fcGFnZV9saXN0KQorCQkJCWNtbV9wYWdlX2xpc3QgPSBucGE7CisJCQlpZiAocGFfbGFzdCkKKwkJCQlwYV9sYXN0LT5uZXh0ID0gbnBhOworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYV9jdXJyKTsKKwkJCWZyZWVkKys7CisJCQlwYV9jdXJyID0gbnBhOworCQl9CisKKwkJcGFfbGFzdCA9IHBhX2N1cnI7CisJCXBhX2N1cnIgPSBwYV9jdXJyLT5uZXh0OworCX0KKworCXNwaW5fdW5sb2NrKCZjbW1fbG9jayk7CisJY21tX2RiZygiUmVsZWFzZWQgJWxkIHBhZ2VzIGluIHRoZSBzZWFyY2ggcmFuZ2UuXG4iLCBmcmVlZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjbW1fbWVtb3J5X2NiIC0gSGFuZGxlIG1lbW9yeSBob3RwbHVnIG5vdGlmaWVyIGNhbGxzCisgKiBAc2VsZjoJbm90aWZpZXIgYmxvY2sgc3RydWN0CisgKiBAYWN0aW9uOglhY3Rpb24gdG8gdGFrZQorICogQGFyZzoJc3RydWN0IG1lbW9yeV9ub3RpZnkgZGF0YSBmb3IgaGFuZGxlcgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCU5PVElGWV9PSyBvciBub3RpZmllciBlcnJvciBiYXNlZCBvbiBzdWJmdW5jdGlvbiByZXR1cm4gdmFsdWUKKyAqCisgKiovCitzdGF0aWMgaW50IGNtbV9tZW1vcnlfY2Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fR09JTkdfT0ZGTElORToKKwkJbXV0ZXhfbG9jaygmaG90cGx1Z19tdXRleCk7CisJCWhvdHBsdWdfb2NjdXJyZWQgPSAxOworCQlyZXQgPSBjbW1fbWVtX2dvaW5nX29mZmxpbmUoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNRU1fT0ZGTElORToKKwljYXNlIE1FTV9DQU5DRUxfT0ZGTElORToKKwkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJY21tX2RiZygiTWVtb3J5IG9mZmxpbmUgb3BlcmF0aW9uIGNvbXBsZXRlLlxuIik7CisJCWJyZWFrOworCWNhc2UgTUVNX0dPSU5HX09OTElORToKKwljYXNlIE1FTV9PTkxJTkU6CisJY2FzZSBNRU1fQ0FOQ0VMX09OTElORToKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJcmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpOworCWVsc2UKKwkJcmV0ID0gTk9USUZZX09LOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbW1fbWVtX25iID0geworCS5ub3RpZmllcl9jYWxsID0gY21tX21lbW9yeV9jYiwKKwkucHJpb3JpdHkgPSBDTU1fTUVNX0hPVFBMVUdfUFJJCit9OworCisvKioKICAqIGNtbV9pbml0IC0gTW9kdWxlIGluaXRpYWxpemF0aW9uCiAgKgogICogUmV0dXJuIHZhbHVlOgpAQCAtNDM1LDE4ICs2NjksMjQgQEAKIAlpZiAoKHJjID0gY21tX3N5c2ZzX3JlZ2lzdGVyKCZjbW1fc3lzZGV2KSkpCiAJCWdvdG8gb3V0X3JlYm9vdF9ub3RpZmllcjsKIAorCWlmIChyZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoJmNtbV9tZW1fbmIpIHx8CisJICAgIHJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKCZjbW1fbWVtX2lzb2xhdGVfbmIpKQorCQlnb3RvIG91dF91bnJlZ2lzdGVyX25vdGlmaWVyOworCiAJaWYgKGNtbV9kaXNhYmxlZCkKIAkJcmV0dXJuIHJjOwogCiAJY21tX3RocmVhZF9wdHIgPSBrdGhyZWFkX3J1bihjbW1fdGhyZWFkLCBOVUxMLCAiY21tdGhyZWFkIik7CiAJaWYgKElTX0VSUihjbW1fdGhyZWFkX3B0cikpIHsKIAkJcmMgPSBQVFJfRVJSKGNtbV90aHJlYWRfcHRyKTsKLQkJZ290byBvdXRfdW5yZWdpc3Rlcl9zeXNmczsKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9ub3RpZmllcjsKIAl9CiAKIAlyZXR1cm4gcmM7CiAKLW91dF91bnJlZ2lzdGVyX3N5c2ZzOgorb3V0X3VucmVnaXN0ZXJfbm90aWZpZXI6CisJdW5yZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoJmNtbV9tZW1fbmIpOworCXVucmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoJmNtbV9tZW1faXNvbGF0ZV9uYik7CiAJY21tX3VucmVnaXN0ZXJfc3lzZnMoJmNtbV9zeXNkZXYpOwogb3V0X3JlYm9vdF9ub3RpZmllcjoKIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmY21tX3JlYm9vdF9uYik7CkBAIC00NjcsNiArNzA3LDggQEAKIAkJa3RocmVhZF9zdG9wKGNtbV90aHJlYWRfcHRyKTsKIAl1bnJlZ2lzdGVyX29vbV9ub3RpZmllcigmY21tX29vbV9uYik7CiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmNtbV9yZWJvb3RfbmIpOworCXVucmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCZjbW1fbWVtX25iKTsKKwl1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKCZjbW1fbWVtX2lzb2xhdGVfbmIpOwogCWNtbV9mcmVlX3BhZ2VzKGxvYW5lZF9wYWdlcyk7CiAJY21tX3VucmVnaXN0ZXJfc3lzZnMoJmNtbV9zeXNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYwppbmRleCAxMmRmOWU4Li42N2I3YTEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYwpAQCAtMzQ2LDEyICszNDYsMTQgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChwc2VyaWVzX2NwdV9ob3RwbHVnX211dGV4KTsKIAotdm9pZCBjcHVfaG90cGx1Z19kcml2ZXJfbG9jaygpCit2b2lkIGNwdV9ob3RwbHVnX2RyaXZlcl9sb2NrKHZvaWQpCitfX2FjcXVpcmVzKHBzZXJpZXNfY3B1X2hvdHBsdWdfbXV0ZXgpCiB7CiAJbXV0ZXhfbG9jaygmcHNlcmllc19jcHVfaG90cGx1Z19tdXRleCk7CiB9CiAKLXZvaWQgY3B1X2hvdHBsdWdfZHJpdmVyX3VubG9jaygpCit2b2lkIGNwdV9ob3RwbHVnX2RyaXZlcl91bmxvY2sodm9pZCkKK19fcmVsZWFzZXMocHNlcmllc19jcHVfaG90cGx1Z19tdXRleCkKIHsKIAltdXRleF91bmxvY2soJnBzZXJpZXNfY3B1X2hvdHBsdWdfbXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IDg4NjhjMDEuLmI0ODg2NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTE0NCw4ICsxNDQsOCBAQAogCQloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5yKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBoY3B1aWQpOwogCQlpZiAocmMgIT0gSF9TVUNDRVNTKQotCQkJcGFuaWMoIkVycm9yOiBQcm9kIHRvIHdha2UgdXAgcHJvY2Vzc29yICVkIFJldD0gJWxkXG4iLAotCQkJCW5yLCByYyk7CisJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBQcm9kIHRvIHdha2UgdXAgcHJvY2Vzc29yICVkXAorCQkJCQkJUmV0PSAlbGRcbiIsIG5yLCByYyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKaW5kZXggOTcxNDgzZi4uMTcwOWFjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYwpAQCAtMTQzLDEzICsxNDMsMjMgQEAKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKIAl1bnNpZ25lZCBpbnQgdm9sZCwgdm5ldywgZWRpYml0OwogCi0JaWYgKGZsb3dfdHlwZSA9PSBJUlFfVFlQRV9OT05FKQotCQlmbG93X3R5cGUgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisJLyogUG9ydCBDIGludGVycnVwdHMgYXJlIGVpdGhlciBJUlFfVFlQRV9FREdFX0ZBTExJTkcgb3IKKwkgKiBJUlFfVFlQRV9FREdFX0JPVEggKGRlZmF1bHQpLiAgQWxsIG90aGVycyBhcmUgSVJRX1RZUEVfRURHRV9GQUxMSU5HCisJICogb3IgSVJRX1RZUEVfTEVWRUxfTE9XIChkZWZhdWx0KQorCSAqLworCWlmIChzcmMgPj0gQ1BNMl9JUlFfUE9SVEMxNSAmJiBzcmMgPD0gQ1BNMl9JUlFfUE9SVEMwKSB7CisJCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJCWZsb3dfdHlwZSA9IElSUV9UWVBFX0VER0VfQk9USDsKIAotCWlmIChmbG93X3R5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykgewotCQlwcmludGsoS0VSTl9FUlIgIkNQTTIgUElDOiBzZW5zZSB0eXBlIDB4JXggbm90IHN1cHBvcnRlZFxuIiwKLQkJCWZsb3dfdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmxvd190eXBlICE9IElSUV9UWVBFX0VER0VfQk9USCAmJgorCQkgICAgZmxvd190eXBlICE9IElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJCWdvdG8gZXJyX3NlbnNlOworCX0gZWxzZSB7CisJCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJCWZsb3dfdHlwZSA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKworCQlpZiAoZmxvd190eXBlICYgKElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfTEVWRUxfSElHSCkpCisJCQlnb3RvIGVycl9zZW5zZTsKIAl9CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX0xFVkVMKTsKQEAgLTE4MSw2ICsxOTEsMTAgQEAKIAlpZiAodm9sZCAhPSB2bmV3KQogCQlvdXRfYmUzMigmY3BtMl9pbnRjdGwtPmljX3NpZXhyLCB2bmV3KTsKIAlyZXR1cm4gMDsKKworZXJyX3NlbnNlOgorCXByX2VycigiQ1BNMiBQSUM6IHNlbnNlIHR5cGUgMHgleCBub3Qgc3VwcG9ydGVkXG4iLCBmbG93X3R5cGUpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbTJfcGljID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwppbmRleCA0ZTNhM2UzLi5lMWEwMjhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwpAQCAtNDY0LDggKzQ2NCw3IEBACiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CiAJc3RydWN0IG1wYzgzeHhfcGNpZV9wcml2ICpwY2llID0gaG9zZS0+ZG4tPmRhdGE7Ci0JdTggYnVzX25vID0gYnVzLT5udW1iZXIgLSBob3NlLT5maXJzdF9idXNubzsKLQl1MzIgZGV2X2Jhc2UgPSBidXNfbm8gPDwgMjQgfCBkZXZmbiA8PCAxNjsKKwl1MzIgZGV2X2Jhc2UgPSBidXMtPm51bWJlciA8PCAyNCB8IGRldmZuIDw8IDE2OwogCWludCByZXQ7CiAKIAlyZXQgPSBtcGM4M3h4X3BjaWVfZXhjbHVkZV9kZXZpY2UoYnVzLCBkZXZmbik7CkBAIC01MTUsMTIgKzUxNCwxNyBAQAogc3RhdGljIGludCBtcGM4M3h4X3BjaWVfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKIAkJCQkgICAgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiB2YWwpCiB7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CiAJdm9pZCBfX2lvbWVtICpjZmdfYWRkcjsKIAogCWNmZ19hZGRyID0gbXBjODN4eF9wY2llX3JlbWFwX2NmZyhidXMsIGRldmZuLCBvZmZzZXQpOwogCWlmICghY2ZnX2FkZHIpCiAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAKKwkvKiBQUENfSU5ESVJFQ1RfVFlQRV9TVVJQUkVTU19QUklNQVJZX0JVUyAqLworCWlmIChvZmZzZXQgPT0gUENJX1BSSU1BUllfQlVTICYmIGJ1cy0+bnVtYmVyID09IGhvc2UtPmZpcnN0X2J1c25vKQorCQl2YWwgJj0gMHhmZmZmZmYwMDsKKwogCXN3aXRjaCAobGVuKSB7CiAJY2FzZSAxOgogCQlvdXRfOChjZmdfYWRkciwgdmFsKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCmluZGV4IDEwM2VhY2UuLmVlMWMwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYwpAQCAtNTQsNiArNTQsMjIgQEAKIAltcGM4eHh4X2djLT5kYXRhID0gaW5fYmUzMihtbS0+cmVncyArIEdQSU9fREFUKTsKIH0KIAorLyogV29ya2Fyb3VuZCBHUElPIDEgZXJyYXRhIG9uIE1QQzg1NzIvTVBDODUzNi4gVGhlIHN0YXR1cyBvZiBHUElPcworICogZGVmaW5lZCBhcyBvdXRwdXQgY2Fubm90IGJlIGRldGVybWluZWQgYnkgcmVhZGluZyBHUERBVCByZWdpc3RlciwKKyAqIHNvIHdlIHVzZSBzaGFkb3cgZGF0YSByZWdpc3RlciBpbnN0ZWFkLiBUaGUgc3RhdHVzIG9mIGlucHV0IHBpbnMKKyAqIGlzIGRldGVybWluZWQgYnkgcmVhZGluZyBHUERBVCByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCBtcGM4NTcyX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwl1MzIgdmFsOworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSB0b19tcGM4eHh4X2dwaW9fY2hpcChtbSk7CisKKwl2YWwgPSBpbl9iZTMyKG1tLT5yZWdzICsgR1BJT19EQVQpICYgfmluX2JlMzIobW0tPnJlZ3MgKyBHUElPX0RJUik7CisKKwlyZXR1cm4gKHZhbCB8IG1wYzh4eHhfZ2MtPmRhdGEpICYgbXBjOHh4eF9ncGlvMm1hc2soZ3Bpbyk7Cit9CisKIHN0YXRpYyBpbnQgbXBjOHh4eF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwpAQCAtMTM2LDcgKzE1MiwxMCBAQAogCWdjLT5uZ3BpbyA9IE1QQzhYWFhfR1BJT19QSU5TOwogCWdjLT5kaXJlY3Rpb25faW5wdXQgPSBtcGM4eHh4X2dwaW9fZGlyX2luOwogCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gbXBjOHh4eF9ncGlvX2Rpcl9vdXQ7Ci0JZ2MtPmdldCA9IG1wYzh4eHhfZ3Bpb19nZXQ7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLG1wYzg1NzItZ3BpbyIpKQorCQlnYy0+Z2V0ID0gbXBjODU3Ml9ncGlvX2dldDsKKwllbHNlCisJCWdjLT5nZXQgPSBtcGM4eHh4X2dwaW9fZ2V0OwogCWdjLT5zZXQgPSBtcGM4eHh4X2dwaW9fc2V0OwogCiAJcmV0ID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG5wLCBtbV9nYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCmluZGV4IGFhOWQwNmUuLjQ3MGRjNmMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwpAQCAtNTY3LDEzICs1NjcsMTEgQEAKICNlbmRpZiAvKiBDT05GSUdfTVBJQ19VM19IVF9JUlFTICovCiAKICNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKK3N0YXRpYyBpbnQgaXJxX2Nob29zZV9jcHUoY29uc3QgY3B1bWFza190ICptYXNrKQogewotCWNwdW1hc2tfdCBtYXNrOwogCWludCBjcHVpZDsKIAotCWNwdW1hc2tfY29weSgmbWFzaywgaXJxX3RvX2Rlc2ModmlydF9pcnEpLT5hZmZpbml0eSk7Ci0JaWYgKGNwdXNfZXF1YWwobWFzaywgQ1BVX01BU0tfQUxMKSkgeworCWlmIChjcHVtYXNrX2VxdWFsKG1hc2ssIGNwdV9hbGxfbWFzaykpIHsKIAkJc3RhdGljIGludCBpcnFfcm92ZXI7CiAJCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJxX3JvdmVyX2xvY2spOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTk0LDIwICs1OTIsMTUgQEAKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7Ci0JCWNwdW1hc2tfdCB0bXA7Ci0KLQkJY3B1c19hbmQodG1wLCBjcHVfb25saW5lX21hcCwgbWFzayk7Ci0KLQkJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJY3B1aWQgPSBjcHVtYXNrX2ZpcnN0X2FuZChtYXNrLCBjcHVfb25saW5lX21hc2spOworCQlpZiAoY3B1aWQgPj0gbnJfY3B1X2lkcykKIAkJCWdvdG8gZG9fcm91bmRfcm9iaW47Ci0KLQkJY3B1aWQgPSBmaXJzdF9jcHUodG1wKTsKIAl9CiAKIAlyZXR1cm4gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHVpZCk7CiB9CiAjZWxzZQotc3RhdGljIGludCBpcnFfY2hvb3NlX2NwdSh1bnNpZ25lZCBpbnQgdmlydF9pcnEpCitzdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KGNvbnN0IGNwdW1hc2tfdCAqbWFzaykKIHsKIAlyZXR1cm4gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CiB9CkBAIC04MTYsNyArODA5LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoaXJxKTsKIAogCWlmIChtcGljLT5mbGFncyAmIE1QSUNfU0lOR0xFX0RFU1RfQ1BVKSB7Ci0JCWludCBjcHVpZCA9IGlycV9jaG9vc2VfY3B1KGlycSk7CisJCWludCBjcHVpZCA9IGlycV9jaG9vc2VfY3B1KGNwdW1hc2spOwogCiAJCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JTkZPKElSUV9ERVNUSU5BVElPTiksIDEgPDwgY3B1aWQpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMKaW5kZXggMWQ0NGVlZS4uMGY2N2NkNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYwpAQCAtMzksNyArMzksMTIgQEAKIAogCXByX2RlYnVnKCJtcGljOiBmb3VuZCBVMywgZ3Vlc3NpbmcgbXNpIGFsbG9jYXRvciBzZXR1cFxuIik7CiAKLQkvKiBSZXNlcnZlIHNvdXJjZSBudW1iZXJzIHdlIGtub3cgYXJlIHJlc2VydmVkIGluIHRoZSBIVyAqLworCS8qIFJlc2VydmUgc291cmNlIG51bWJlcnMgd2Uga25vdyBhcmUgcmVzZXJ2ZWQgaW4gdGhlIEhXLgorCSAqCisJICogVGhpcyBpcyBhIGJpdCBvZiBhIG1peCBvZiBVMyBhbmQgVTQgcmVzZXJ2ZXMgYnV0IHRoYXQncyBnb2luZworCSAqIHRvIHdvcmsgZmluZSwgd2UgaGF2ZSBwbGVudHkgZW51Z2ggbnVtYmVycyBsZWZ0IHNvIGxldCdzIGp1c3QKKwkgKiBtYXJrIGFueXRoaW5nIHdlIGRvbid0IGxpa2UgcmVzZXJ2ZWQuCisJICovCiAJZm9yIChpID0gMDsgICBpIDwgODsgICBpKyspCiAJCW1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycSgmbXBpYy0+bXNpX2JpdG1hcCwgaSk7CiAKQEAgLTQ5LDYgKzU0LDEwIEBACiAJZm9yIChpID0gMTAwOyBpIDwgMTA1OyBpKyspCiAJCW1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycSgmbXBpYy0+bXNpX2JpdG1hcCwgaSk7CiAKKwlmb3IgKGkgPSAxMjQ7IGkgPCBtcGljLT5pcnFfY291bnQ7IGkrKykKKwkJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBpKTsKKworCiAJbnAgPSBOVUxMOwogCXdoaWxlICgobnAgPSBvZl9maW5kX2FsbF9ub2RlcyhucCkpKSB7CiAJCXByX2RlYnVnKCJtcGljOiBtYXBwaW5nIGh3aXJxcyBmb3IgJXNcbiIsIG5wLT5mdWxsX25hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwppbmRleCBkM2NhZjIzLi5iY2JmZTc5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwpAQCAtNjQsMTIgKzY0LDEyIEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLXN0YXRpYyB1NjQgZmluZF9odF9tYWdpY19hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHU2NCBmaW5kX2h0X21hZ2ljX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBod2lycSkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCXVuc2lnbmVkIGludCBwb3M7CiAKLQlmb3IgKGJ1cyA9IHBkZXYtPmJ1czsgYnVzOyBidXMgPSBidXMtPnBhcmVudCkgeworCWZvciAoYnVzID0gcGRldi0+YnVzOyBidXMgJiYgYnVzLT5zZWxmOyBidXMgPSBidXMtPnBhcmVudCkgewogCQlwb3MgPSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KGJ1cy0+c2VsZiwgSFRfQ0FQVFlQRV9NU0lfTUFQUElORyk7CiAJCWlmIChwb3MpCiAJCQlyZXR1cm4gcmVhZF9odF9tYWdpY19hZGRyKGJ1cy0+c2VsZiwgcG9zKTsKQEAgLTc4LDEzICs3OCw0MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTY0IGZpbmRfdTRfbWFnaWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGh3aXJxKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChwZGV2LT5idXMpOworCisJLyogVTQgUENJZSBNU0lzIG5lZWQgdG8gd3JpdGUgdG8gdGhlIHNwZWNpYWwgcmVnaXN0ZXIgaW4KKwkgKiB0aGUgYnJpZGdlIHRoYXQgZ2VuZXJhdGVzIGludGVycnVwdHMuIFRoZXJlIHNob3VsZCBiZQorCSAqIHRoZW9yaWNhbGx5IGEgcmVnaXN0ZXIgYXQgMHhmODAwNTAwMCB3aGVyZSB5b3UganVzdCB3cml0ZQorCSAqIHRoZSBNU0kgbnVtYmVyIGFuZCB0aGF0IHRyaWdnZXJzIHRoZSByaWdodCBpbnRlcnJ1cHQsIGJ1dAorCSAqIHVuZm9ydHVuYXRlbHksIHRoaXMgaXMgYnVzdGVkIGluIEhXLCB0aGUgYnJpZGdlIGVuZGlhbiBzd2FwcworCSAqIHRoZSB2YWx1ZSBhbmQgaGl0cyB0aGUgd3JvbmcgbmliYmxlIGluIHRoZSByZWdpc3Rlci4KKwkgKgorCSAqIFNvIGluc3RlYWQgd2UgdXNlIGFub3RoZXIgcmVnaXN0ZXIgc2V0IHdoaWNoIGlzIHVzZWQgbm9ybWFsbHkKKwkgKiBmb3IgY29udmVydGluZyBIVCBpbnRlcnJ1cHRzIHRvIE1QSUMgaW50ZXJydXB0cywgd2hpY2ggZGVjb2RlcworCSAqIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFzIHBhcnQgb2YgdGhlIGxvdyBhZGRyZXNzIGJpdHMKKwkgKgorCSAqIFRoaXMgd2lsbCBub3Qgd29yayBpZiB3ZSBldmVyIHVzZSBtb3JlIHRoYW4gb25lIGxlZ2FjeSBNU0kgaW4KKwkgKiBhIGJsb2NrIGJ1dCB3ZSBuZXZlciBkby4gRm9yIG9uZSBNU0kgb3IgbXVsdGlwbGUgTVNJLVggd2hlcmUKKwkgKiBlYWNoIGludGVycnVwdCBhZGRyZXNzIGNhbiBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseSwgaXQgd29ya3MKKwkgKiBqdXN0IGZpbmUuCisJICovCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGhvc2UtPmRuLCAidTQtcGNpZSIpIHx8CisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGhvc2UtPmRuLCAiVTQtcGNpZSIpKQorCQlyZXR1cm4gMHhmODAwNDAwMCB8IChod2lycSA8PCA0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHUzbXNpX21zaV9jaGVja19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKIHsKIAlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVgpCiAJCXByX2RlYnVnKCJ1M21zaTogTVNJLVggdW50ZXN0ZWQsIHRyeWluZyBhbnl3YXkuXG4iKTsKIAogCS8qIElmIHdlIGNhbid0IGZpbmQgYSBtYWdpYyBhZGRyZXNzIHRoZW4gTVNJIGFpbid0IGdvbm5hIHdvcmsgKi8KLQlpZiAoZmluZF9odF9tYWdpY19hZGRyKHBkZXYpID09IDApIHsKKwlpZiAoZmluZF9odF9tYWdpY19hZGRyKHBkZXYsIDApID09IDAgJiYKKwkgICAgZmluZF91NF9tYWdpY19hZGRyKHBkZXYsIDApID09IDApIHsKIAkJcHJfZGVidWcoInUzbXNpOiBubyBtYWdpYyBhZGRyZXNzIGZvdW5kIGZvciAlc1xuIiwKIAkJCSBwY2lfbmFtZShwZGV2KSk7CiAJCXJldHVybiAtRU5YSU87CkBAIC0xMTgsMTAgKzE0Niw2IEBACiAJdTY0IGFkZHI7CiAJaW50IGh3aXJxOwogCi0JYWRkciA9IGZpbmRfaHRfbWFnaWNfYWRkcihwZGV2KTsKLQltc2cuYWRkcmVzc19sbyA9IGFkZHIgJiAweEZGRkZGRkZGOwotCW1zZy5hZGRyZXNzX2hpID0gYWRkciA+PiAzMjsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZwZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQlod2lycSA9IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKCZtc2lfbXBpYy0+bXNpX2JpdG1hcCwgMSk7CiAJCWlmIChod2lycSA8IDApIHsKQEAgLTEyOSw2ICsxNTMsMTIgQEAKIAkJCXJldHVybiBod2lycTsKIAkJfQogCisJCWFkZHIgPSBmaW5kX2h0X21hZ2ljX2FkZHIocGRldiwgaHdpcnEpOworCQlpZiAoYWRkciA9PSAwKQorCQkJYWRkciA9IGZpbmRfdTRfbWFnaWNfYWRkcihwZGV2LCBod2lycSk7CisJCW1zZy5hZGRyZXNzX2xvID0gYWRkciAmIDB4RkZGRkZGRkY7CisJCW1zZy5hZGRyZXNzX2hpID0gYWRkciA+PiAzMjsKKwogCQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKG1zaV9tcGljLT5pcnFob3N0LCBod2lycSk7CiAJCWlmICh2aXJxID09IE5PX0lSUSkgewogCQkJcHJfZGVidWcoInUzbXNpOiBmYWlsZWQgbWFwcGluZyBod2lycSAweCV4XG4iLCBod2lycSk7CkBAIC0xNDMsNiArMTczLDggQEAKIAkJcHJfZGVidWcoInUzbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCV4KSBhZGRyIDB4JWx4XG4iLAogCQkJICB2aXJxLCBod2lycSwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAKKwkJcHJpbnRrKCJ1M21zaTogYWxsb2NhdGVkIHZpcnEgMHgleCAoaHcgMHgleCkgYWRkciAweCVseFxuIiwKKwkJCSAgdmlycSwgaHdpcnEsICh1bnNpZ25lZCBsb25nKWFkZHIpOwogCQltc2cuZGF0YSA9IGh3aXJxOwogCQl3cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKaW5kZXggNjExODg5MC4uNmJlNDUwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJaWYgKElTX0VSUihzY3R4LT5mYWxsYmFjay5jaXApKSB7CiAJCXByX2VycigiQWxsb2NhdGluZyBBRVMgZmFsbGJhY2sgYWxnb3JpdGhtICVzIGZhaWxlZFxuIiwKIAkJICAgICAgIG5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihzY3R4LT5mYWxsYmFjay5ibGspOworCQlyZXR1cm4gUFRSX0VSUihzY3R4LT5mYWxsYmFjay5jaXApOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggZjRlNTNjNi4uYjQxNmFhMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFR1ZSBTZXAgMjIgMTc6NDM6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDA5OjAzOjA3IDIwMTAKICMKIENPTkZJR19TQ0hFRF9NQz15CiBDT05GSUdfTU1VPXkKQEAgLTUxLDYgKzUxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD02NAogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMTMsNyArMTE0LDYgQEAKICMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC0xNDksMjEgKzE0OSw3OCBAQAogQ09ORklHX0JMT0NLPXkKIENPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ0dST1VQIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DS19DT01QQVQ9eQogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZRX0dST1VQX0lPU0NIRUQgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgogQ09ORklHX1BSRUVNUFRfTk9USUZJRVJTPXkKK0NPTkZJR19BUkNIX0lOTElORV9TUElOX1RSWUxPQ0s9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DS19CSD15CitDT05GSUdfQVJDSF9JTkxJTkVfU1BJTl9MT0NLPXkKK0NPTkZJR19BUkNIX0lOTElORV9TUElOX0xPQ0tfQkg9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1NQSU5fTE9DS19JUlE9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFPXkKK0NPTkZJR19BUkNIX0lOTElORV9TUElOX1VOTE9DSz15CitDT05GSUdfQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0tfQkg9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CitDT05GSUdfQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRT15CitDT05GSUdfQVJDSF9JTkxJTkVfUkVBRF9UUllMT0NLPXkKK0NPTkZJR19BUkNIX0lOTElORV9SRUFEX0xPQ0s9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1JFQURfTE9DS19CSD15CitDT05GSUdfQVJDSF9JTkxJTkVfUkVBRF9MT0NLX0lSUT15CitDT05GSUdfQVJDSF9JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkU9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1JFQURfVU5MT0NLPXkKK0NPTkZJR19BUkNIX0lOTElORV9SRUFEX1VOTE9DS19CSD15CitDT05GSUdfQVJDSF9JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKK0NPTkZJR19BUkNIX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFPXkKK0NPTkZJR19BUkNIX0lOTElORV9XUklURV9UUllMT0NLPXkKK0NPTkZJR19BUkNIX0lOTElORV9XUklURV9MT0NLPXkKK0NPTkZJR19BUkNIX0lOTElORV9XUklURV9MT0NLX0JIPXkKK0NPTkZJR19BUkNIX0lOTElORV9XUklURV9MT0NLX0lSUT15CitDT05GSUdfQVJDSF9JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFPXkKK0NPTkZJR19BUkNIX0lOTElORV9XUklURV9VTkxPQ0s9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DS19CSD15CitDT05GSUdfQVJDSF9JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CitDT05GSUdfQVJDSF9JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkU9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMjI3LDE0ICsyODQsMTMgQEAKIENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0U9eQogQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQogQ09ORklHX01JR1JBVElPTj15CiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMzOSw2ICszOTUsNyBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9eQorIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTUwNCw2ICs1NjEsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogQ09ORklHX0JMS19ERVZfTkJEPW0KICMgQ09ORklHX0JMS19ERVZfT1NEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC03MTAsNyArNzcxLDYgQEAKICMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC04NjQsNiArOTI0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTMxLDcgKzk5Miw2IEBACiBDT05GSUdfU0FNUExFUz15CiAjIENPTkZJR19TQU1QTEVfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTkzOSw3ICs5OTksMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCA3N2RmNzI2Li4yYjkyZDUwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkgICAgICAgTFBBUl9OQU1FX0xFTik7CiAJRUJDQVNDKG5hbWUsIExQQVJfTkFNRV9MRU4pOwogCW5hbWVbTFBBUl9OQU1FX0xFTl0gPSAwOwotCXN0cnN0cmlwKG5hbWUpOworCXN0cmltKG5hbWUpOwogfQogCiBzdHJ1Y3QgY3B1X2luZm8gewpAQCAtNTIzLDcgKzUyMyw3IEBACiAJbWVtY3B5KG5hbWUsIGRpYWcyMjRfY3B1X25hbWVzICsgKChpbmRleCArIDEpICogQ1BVX05BTUVfTEVOKSwKIAkJQ1BVX05BTUVfTEVOKTsKIAluYW1lW0NQVV9OQU1FX0xFTl0gPSAwOwotCXN0cnN0cmlwKG5hbWUpOworCXN0cmltKG5hbWUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCmluZGV4IGQwMWZjOGY3Li5mMGIwZDMxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJLyogZ3Vlc3QgZGlyICovCiAJbWVtY3B5KGd1ZXN0X25hbWUsIGRhdGEtPmd1ZXN0X25hbWUsIE5BTUVfTEVOKTsKIAlFQkNBU0MoZ3Vlc3RfbmFtZSwgTkFNRV9MRU4pOwotCXN0cnN0cmlwKGd1ZXN0X25hbWUpOworCXN0cmltKGd1ZXN0X25hbWUpOwogCWd1ZXN0X2RpciA9IGh5cGZzX21rZGlyKHNiLCBzeXN0ZW1zX2RpciwgZ3Vlc3RfbmFtZSk7CiAJaWYgKElTX0VSUihndWVzdF9kaXIpKQogCQlyZXR1cm4gUFRSX0VSUihndWVzdF9kaXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFyYW0uaAppbmRleCAzNGFhYTQ2Li5jNjE2ODIxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFyYW0uaApAQCAtMSwzMCArMSw2IEBACi0vKgotICogIGluY2x1ZGUvYXNtLXMzOTAvcGFyYW0uaAotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqCi0gKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3BhcmFtLmgiCi0gKi8KLQogI2lmbmRlZiBfQVNNUzM5MF9QQVJBTV9ICiAjZGVmaW5lIF9BU01TMzkwX1BBUkFNX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLSMgZGVmaW5lIEhaCQlDT05GSUdfSFoJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwotIyBkZWZpbmUgVVNFUl9IWgkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCi0jIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogbGlrZSB0aW1lcygpICovCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYXJhbS5oPgogCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2Ci0KLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCi0KLSNlbmRpZgorI2VuZGlmIC8qIF9BU01TMzkwX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBjYjUyMzJkLi4xOTJhNzIwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0yNjksNyArMjY5LDggQEAKICNkZWZpbmUJX19OUl9wd3JpdGV2CQkzMjkKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzMzAKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JMzMxCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDMzMgorI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkzMzIKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzMzCiAKIC8qIAogICogVGhlcmUgYXJlIHNvbWUgc3lzdGVtIGNhbGxzIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9uIDY0IGJpdCwgc29tZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCmluZGV4IDMwZGUyZDAuLmZhZWFjY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKQEAgLTE4NTMsMyArMTg1MywxMiBAQAogCWxsZ3RyCSVyMywlcjMJCQkjIGNvbXBhdF91cHRyX3QgKgogCWxsZ3RyCSVyNCwlcjQJCQkjIGNvbXBhdF91cHRyX3QgKgogCWpnCXN5czMyX2V4ZWN2ZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKKworCS5nbG9ibAljb21wYXRfc3lzX3JlY3ZtbXNnX3dyYXBwZXIKK2NvbXBhdF9zeXNfcmVjdm1tc2dfd3JhcHBlcjoKKwlsZ2ZyCSVyMiwlcjIJCQkjIGludAorCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBjb21wYXRfbW1zZ2hkciAqCisJbGxnZnIJJXI0LCVyNAkJCSMgdW5zaWduZWQgaW50CisJbGxnZnIJJXI1LCVyNQkJCSMgdW5zaWduZWQgaW50CisJbGxndHIJJXI2LCVyNgkJCSMgc3RydWN0IGNvbXBhdF90aW1lc3BlYyAqCisJamcJY29tcGF0X3N5c19yZWN2bW1zZwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggNDg5MGFjNi4uNGQ3MzI5NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQkJCQlcCiB7CQkJCQkJCQkJXAogCXN0cm5jcHkoX3ZhbHVlLCBidWYsIHNpemVvZihfdmFsdWUpIC0gMSk7CQkJXAotCXN0cnN0cmlwKF92YWx1ZSk7CQkJCQkJXAorCXN0cmltKF92YWx1ZSk7CQkJCQkJCVwKIAlyZXR1cm4gbGVuOwkJCQkJCQlcCiB9CQkJCQkJCQkJXAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX2F0dHIgPQkJXApAQCAtNDcyLDcgKzQ3Miw3IEBACiAJCXJldHVybiBzcHJpbnRmKHBhZ2UsICIjdW5rbm93biNcbiIpOwogCW1lbWNweShsb2FkcGFybSwgJnNjbHBfaXBsX2luZm8ubG9hZHBhcm0sIExPQURQQVJNX0xFTik7CiAJRUJDQVNDKGxvYWRwYXJtLCBMT0FEUEFSTV9MRU4pOwotCXN0cnN0cmlwKGxvYWRwYXJtKTsKKwlzdHJpbShsb2FkcGFybSk7CiAJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBsb2FkcGFybSk7CiB9CiAKQEAgLTc3Niw3ICs3NzYsNyBAQAogCW1lbWNweShsb2FkcGFybSwgaWJwLT5pcGxfaW5mby5jY3cubG9hZF9wYXJtLCBMT0FEUEFSTV9MRU4pOwogCUVCQ0FTQyhsb2FkcGFybSwgTE9BRFBBUk1fTEVOKTsKIAlsb2FkcGFybVtMT0FEUEFSTV9MRU5dID0gMDsKLQlzdHJzdHJpcChsb2FkcGFybSk7CisJc3RyaW0obG9hZHBhcm0pOwogfQogCiBzdGF0aWMgc3NpemVfdCByZWlwbF9nZW5lcmljX2xvYWRwYXJtX3Nob3coc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYiwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDY1M2M2YTEuLjEzODE1ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtOTU5LDcgKzk1OSw3IEBACiAJCS5zZXQgPSBzMzkwX2ZwcmVnc19zZXQsCiAJfSwKIAlbUkVHU0VUX0dFTkVSQUxfRVhURU5ERURdID0gewotCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlhTVEFUVVMsCisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1MzOTBfSElHSF9HUFJTLAogCQkubiA9IHNpemVvZihzMzkwX2NvbXBhdF9yZWdzX2hpZ2gpIC8gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLAogCQkuc2l6ZSA9IHNpemVvZihjb21wYXRfbG9uZ190KSwKIAkJLmFsaWduID0gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDMwZWNhMDcuLjRmMjkyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKQEAgLTM0MCwzICszNDAsNCBAQAogU1lTQ0FMTChzeXNfcHdyaXRldixzeXNfcHdyaXRldixjb21wYXRfc3lzX3B3cml0ZXZfd3JhcHBlcikKIFNZU0NBTEwoc3lzX3J0X3Rnc2lncXVldWVpbmZvLHN5c19ydF90Z3NpZ3F1ZXVlaW5mbyxjb21wYXRfc3lzX3J0X3Rnc2lncXVldWVpbmZvX3dyYXBwZXIpIC8qIDMzMCAqLwogU1lTQ0FMTChzeXNfcGVyZl9ldmVudF9vcGVuLHN5c19wZXJmX2V2ZW50X29wZW4sc3lzX3BlcmZfZXZlbnRfb3Blbl93cmFwcGVyKQorU1lTQ0FMTChzeXNfcmVjdm1tc2csc3lzX3JlY3ZtbXNnLGNvbXBhdF9zeXNfcmVjdm1tc2dfd3JhcHBlcikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCBjMmU0MmNjLi42ZTdhZDYzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CkBAIC0zODIsNyArMzgyLDcgQEAKIAkJCQkJU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApewogCQlyZXR1cm47CiAJfQotCWlmICgoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkgIT0gMCkKKwlpZiAodHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbChjdXJyZW50LCBTSUdUUkFQKSkKIAkJZm9yY2Vfc2lnKFNJR1RSQVAsIGN1cnJlbnQpOwogfQogCkBAIC00ODMsNyArNDgzLDcgQEAKIAkJaWYgKGdldF91c2VyKCooKF9fdTE2ICopIG9wY29kZSksIChfX3UxNiBfX3VzZXIgKikgbG9jYXRpb24pKQogCQkJcmV0dXJuOwogCQlpZiAoKigoX191MTYgKikgb3Bjb2RlKSA9PSBTMzkwX0JSRUFLUE9JTlRfVTE2KSB7Ci0JCQlpZiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkKKwkJCWlmICh0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKGN1cnJlbnQsIFNJR1RSQVApKQogCQkJCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKIAkJCWVsc2UKIAkJCQlzaWduYWwgPSBTSUdJTEw7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggMDAzMWE2OS4uMjEyMWZiYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtNTQwLDE0ICs1NDAsMTYgQEAKIAogY29uZmlnIFNIX1BDTEtfRlJFUQogCWludCAiUGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3kgKGluIEh6KSIKLQlkZWZhdWx0ICIyNzAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3MzQzCisJZGVwZW5kcyBvbiBTSF9DTEtfQ1BHX0xFR0FDWQogCWRlZmF1bHQgIjMxMjUwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc2MTkKLQlkZWZhdWx0ICIzMjAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzIyCi0JZGVmYXVsdCAiMzMzMzMzMzMiIGlmIENQVV9TVUJUWVBFX1NINzc3MCB8fCBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3NzYwIHx8IENQVV9TVUJUWVBFX1NINzcwNSB8fCBcCi0JCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyMDMgfHwgQ1BVX1NVQlRZUEVfU0g3MjA2IHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MyB8fCBDUFVfU1VCVFlQRV9NWEcgICAgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3Nzg2IHx8IENQVV9TVUJUWVBFX1NINzcyNAorCWRlZmF1bHQgIjMzMzMzMzMzIiBpZiBDUFVfU1VCVFlQRV9TSDc3NzAgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3NzYwIHx8IFwKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzcwNSB8fCBcCisJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyMDMgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjA2IHx8IFwKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MyB8fCBcCisJCQkgICAgICBDUFVfU1VCVFlQRV9NWEcgICAgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCiAJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKIAlkZWZhdWx0ICI1MDAwMDAwMCIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwppbmRleCAxOTRhYWNhLi42YTg4NjFiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCkBAIC0xMjgsOCArMTI4LDYgQEAKIAogLyogU0ggRXRoICovCiAjZGVmaW5lIFNIX0VUSF9BRERSCSgweEE0NjAwMDAwKQotI2RlZmluZSBTSF9FVEhfTUFIUgkoU0hfRVRIX0FERFIgKyAweDFDMCkKLSNkZWZpbmUgU0hfRVRIX01BTFIJKFNIX0VUSF9BRERSICsgMHgxQzgpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoX2V0aF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCA9IFNIX0VUSF9BRERSLApAQCAtNTA5LDYgKzUwNyw3IEBACiAKICNlbHNlCiAKKy8qIE1NQyBTUEkgKi8KIHN0YXRpYyBpbnQgbW1jX3NwaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX1BUWTYpOwpAQCAtNTQyLDYgKzU0MSw3IEBACiAJfSwKIH07CiAKKy8qIE1TSU9GMCAqLwogc3RhdGljIHN0cnVjdCBzaF9tc2lvZl9zcGlfaW5mbyBtc2lvZjBfZGF0YSA9IHsKIAkubnVtX2NoaXBzZWxlY3QgPSAxLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCmluZGV4IDJmNzhkMDEuLjg5MzFhNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBGcmkgU2VwIDI1IDExOjIyOjUwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMToxMDo1OSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjIsNiArNjQsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk5LDYgKzEwMiw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExNiw2ICsxMjAsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0MiwxNCArMTQ3LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTIwNSw2ICsyMzcsNyBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAogQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1BNQl9FTkFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKQEAgLTIyOSw4ICsyNjIsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNjIsNyArMjkzLDYgQEAKICMKIENPTkZJR19TSF9USU1FUl9UTVU9eQogIyBDT05GSUdfU0hfVElNRVJfQ01UIGlzIG5vdCBzZXQKLUNPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19TSF9DTEtfQ1BHPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldApAQCAtNDE4LDkgKzQ0OCw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUwLDYgKzU3NywxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD00CkBAIC01NTksOSArNTkwLDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTU3Miw2ICs2MDYsNyBAQAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTY2NCwxMSArNjk5LDExIEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02ODgsNiArNzIzLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzgyLDcgKzgxOCw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03OTYsNyArODMxLDEwIEBACiAjCiBDT05GSUdfU1BJX0JJVEJBTkc9eQogQ09ORklHX1NQSV9HUElPPXkKKyMgQ09ORklHX1NQSV9TSF9NU0lPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfU0hfU0NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC04NTQsMTEgKzg5MiwxMyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs5MDYsOCBAQAogIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTg4Miw2ICs5MjQsOCBAQAogIwogIyBNdWx0aW1lZGlhIGRyaXZlcnMKICMKK0NPTkZJR19JUl9DT1JFPXkKK0NPTkZJR19WSURFT19JUj15CiAjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAogQ09ORklHX01FRElBX1RVTkVSPXkKICMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CkBAIC05MDEsNiArOTQ1LDcgQEAKICMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPPXkKK0NPTkZJR19WSURFT19JUl9JMkM9eQogIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKQEAgLTkwOCwxMCArOTUzLDEzIEBACiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQxMTIgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfUko1NE4xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwIGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNPXkKIENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWD15CisjIENPTkZJR19TT0NfQ0FNRVJBX09WOTY0MCBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVT15CiAjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EQUIgaXMgbm90IHNldApAQCAtOTk2LDYgKzEwNDQsNyBAQAogIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKKyMgQ09ORklHX01NQ19UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTAyNyw2ICsxMDc2LDcgQEAKIENPTkZJR19SVENfRFJWX1BDRjg1NjM9eQogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEwNTUsNyArMTEwNSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNDgsNyArMTMwMCw3IEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xMjY1LDcgKzEzMTcsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMjc0LDcgKzEzMjUsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9jYXltYW5fZGVmY29uZmlnCmluZGV4IDZiODYzY2IuLjkyNTg5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9jYXltYW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9jYXltYW5fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MjE6NTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjE0OjUwIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogIyBDT05GSUdfU1VQRVJIMzIgaXMgbm90IHNldApAQCAtMTQsMTEgKzE0LDEzIEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0yOCw3ICszMCwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDQsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNTAsMTEgKzYxLDEzIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg1LDI0ICs5OCwzMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNSw3ICsxMzYsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTIzLDE0ICsxNDQsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNzgsOCArMjI2LDcgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjU1LDEzICszMDIsMTMgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA0MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKQEAgLTMzMCw2ICszNzcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM1OSwxNCArNDA3LDExIEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zNzksNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zOTUsNiArNDQxLDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC00MDUsNiArNDU1LDcgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldApAQCAtNDEyLDYgKzQ2Myw3IEBACiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC00NjIsOCArNTE0LDExIEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldApAQCAtNDk1LDcgKzU1MCwxMCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNTA3LDcgKzU2NSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTU0Niw2ICs2MDgsNyBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKQEAgLTU2NSw2ICs2MjgsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTU5MCwxMiArNjU0LDEwIEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjA5LDYgKzY3MSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02MTgsNiArNjgxLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjgyLDYgKzc0Niw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03MTAsNiArNzc1LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC03MjEsMTEgKzc4Nyw2IEBACiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldApAQCAtNzM0LDIwICs3OTUsMjYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTc3MSw2ICs4MzgsNyBAQAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKQEAgLTc5Nyw2ICs4NjUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04MDgsOSArODc3LDggQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC04MzcsMTcgKzkwNSwyMCBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTkzOSw3ICsxMDEwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwMDIsOCArMTA3MiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTA2Nyw3ICsxMTM5LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTExMjAsNiArMTE5MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNTUsMjEgKzEyMjcsMjUgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTE4MCwxMSArMTI1Niw5IEBACiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogQ09ORklHX1NINjRfU1JfV0FUQ0g9eQogCkBAIC0xMTk0LDEzICsxMjY4LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTIzMiwxMSArMTMwOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMjk5LDUgKzEzNzgsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCmluZGV4IGFlZGJkNGYuLjU1ZjY1MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTc6NTY6MDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjE3OjM1IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIxLDYgKzIxLDcgQEAKIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMxLDYgKzMyLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYzLDYgKzY1LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05Nyw2ICsxMDAsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTcsNiArMTIxLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDMsMTQgKzE0OCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMzIsOCArMjY0LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjk0LDkgKzMyNCw5IEBACiAjCiAjIERNQSBzdXBwb3J0CiAjCi1DT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfU0hfRE1BPXkKIENPTkZJR19TSF9ETUFfSVJRX01VTFRJPXkKK0NPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTQKIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTD15CiBDT05GSUdfTlJfRE1BX0NIQU5ORUxTPTkKQEAgLTMzOCw3ICszNjgsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX09WRVJXUklURT15CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHBhbmljPTMiCkBAIC0zNDgsNyArMzc3LDYgQEAKICMKIENPTkZJR19NQVBMRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQpAQCAtNDQzLDkgKzQ3MSw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNDc4LDYgKzUwMywxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKQEAgLTU3OSw2ICs2MDgsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTU4Niw4ICs2MTYsOSBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjAwLDYgKzYzMSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02MDksNiArNjQxLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjU1LDYgKzY4OCw3IEBACiAjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTczNCw2ICs3NjgsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC04ODMsNiArOTE4LDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC05ODEsMTAgKzEwMTcsMTEgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtOTk3LDcgKzEwMzQsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMDA2LDcgKzEwNDIsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZwppbmRleCA0Njg3NDcwLi42NjJjMWFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxNzo1Njo0MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MTg6MTcgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYxLDYgKzYzLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDMsNiArMTA2LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTIwLDYgKzEyNCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQyLDE0ICsxNDcsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMDUsNiArMjM3LDcgQEAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MTAwMDAwMDAKIENPTkZJR18yOUJJVD15CisjIENPTkZJR19QTUJfRU5BQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0yMjksOCArMjYyLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjY0LDcgKzI5NSw2IEBACiAjCiAjIENPTkZJR19TSF9USU1FUl9UTVUgaXMgbm90IHNldAogQ09ORklHX1NIX1RJTUVSX0NNVD15Ci1DT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX0NQRz15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldApAQCAtNDA2LDcgKzQzNiwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzMiw2ICs0NjgsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldApAQCAtNTI2LDExICs1NjYsMTIgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTU5LDYgKzYwMCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY1Miw3ICs2OTQsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzA3LDE2ICs3NDgsMTkgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtODY3LDYgKzkxMSw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTk3OSw3ICsxMDI0LDcgQEAKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC05OTcsNyArMTA0Miw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDYsNyArMTA1MCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZwppbmRleCBjYWQ5MTg0Li4xOGUzMzU2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxNzo0NTozOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MjA6MzYgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYyLDYgKzY0LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05OSw2ICsxMDIsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTYsNiArMTIwLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDMsMTQgKzE0OCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yMDYsNiArMjM4LDcgQEAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MTAwMDAwMDAKIENPTkZJR18yOUJJVD15CisjIENPTkZJR19QTUJfRU5BQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0yMzAsOCArMjYzLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjY1LDcgKzI5Niw2IEBACiAjCiBDT05GSUdfU0hfVElNRVJfVE1VPXkKICMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX0NQRz15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldApAQCAtNDIwLDkgKzQ1MCw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUyLDYgKzU3OSwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTYyLDkgKzU5MywxMiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC01NzUsNiArNjA5LDcgQEAKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02NjksMTEgKzcwNCwxMiBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC03MDIsNiArNzM4LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtODEwLDcgKzg0Nyw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MjQsNyArODYwLDEwIEBACiAjCiBDT05GSUdfU1BJX0JJVEJBTkc9eQogIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NIX01TSU9GIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9TSF9TQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKQEAgLTg4MiwxMSArOTIxLDEzIEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldApAQCAtODk0LDYgKzkzNSw4IEBACiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtOTEwLDYgKzk1Myw4IEBACiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIworQ09ORklHX0lSX0NPUkU9eQorQ09ORklHX1ZJREVPX0lSPXkKICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVI9eQogIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKQEAgLTkzMCw2ICs5NzUsNyBAQAogIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorQ09ORklHX1ZJREVPX0lSX0kyQz15CiAjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fQ1BJQTIgaXMgbm90IHNldApAQCAtOTM5LDEwICs5ODUsMTMgQEAKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDExMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOVYwMjIgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9SSjU0TjEgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9UVzk5MTAgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX09WOTY0MCBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVT15CiAjIENPTkZJR19WNExfVVNCX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX1JBRElPX0FEQVBURVJTPXkKQEAgLTk1Miw2ICsxMDAxLDcgQEAKICMgQ09ORklHX1JBRElPX1NJNDcwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAogIyBDT05GSUdfUkFESU9fVEVBNTc2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzcsNiArMTIyNyw3IEBACiAjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9eQorIyBDT05GSUdfTU1DX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC0xMjA4LDYgKzEyNTksNyBAQAogQ09ORklHX1JUQ19EUlZfUENGODU2Mz15CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTIzNiw3ICsxMjg4LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQzMCw3ICsxNDg0LDcgQEAKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xNDQ4LDcgKzE1MDIsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xNDU3LDcgKzE1MTAsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCmluZGV4IDg2YzliYzAuLjcyZjg3MTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTc6NTc6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjI0OjI2IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTI4LDYgKzI4LDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTUzLDYgKzU0LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC02Niw3ICs2OCw2IEBACiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUklOVEsgaXMgbm90IHNldApAQCAtODEsNiArODIsNyBAQAogQ09ORklHX1NITUVNPXkKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTk4LDYgKzEwMCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTA5LDYgKzExMiwzNSBAQAogQ09ORklHX0JBU0VfU01BTEw9MQogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE4Niw4ICsyMTgsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zNTksNiArMzg5LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtNDE2LDcgKzQ0Nyw2IEBACiAjIENPTkZJR19QUk9DX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKQEAgLTQ0OCw3ICs0NzgsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC00NTYsNyArNDg1LDExIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcKaW5kZXggNGMwZjgyYi4uMDkzMmU2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxNzo1NzozMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MjQ6NDQgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Miw2ICs2NCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAyLDYgKzEwNSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyMSw2ICsxMjUsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0NywxNCArMTUyLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMwLDggKzI2Miw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI3OCw5ICszMDgsOSBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CiBDT05GSUdfU0hfRE1BX0lSUV9NVUxUST15CitDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz04CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9ETUFCUkcgaXMgbm90IHNldApAQCAtMzIwLDcgKzM1MCw2IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAyMDAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKICMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5U0MyLDExNTIwMCByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9MTkyLjE2OC4wLjM6L3NjcmlwdHMvZmlsZXN5cyBpcD0xOTIuMTY4LjAuNCIKQEAgLTQxNSw5ICs0NDQsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTUzNCw2ICs1NjAsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTU4MSwxMSArNjExLDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02MDUsNiArNjM1LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjk4LDcgKzcyOSw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKQEAgLTcyNywxNSArNzU3LDE4IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTEwNzIsOSArMTEwNSw2IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldApAQCAtMTA4OCw3ICsxMTE4LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCmluZGV4IDliNzg1NTEuLmY4OTllNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxNzo1ODoxOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MjY6NTUgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01OSw2ICs2MSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAzLDYgKzEwNiw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyNCw2ICsxMjgsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE1MCwxNCArMTU1LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIxMSw2ICsyNDMsNyBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAogQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1BNQl9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpAQCAtMjM3LDggKzI3MCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTQxOSw3ICs0NTAsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00OTgsNyArNTM1LDYgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MzEsNiArNTY3LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKQEAgLTYyOSwxMSArNjY5LDEyIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY2Miw2ICs3MDMsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NDUsNiArNzg3LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTEwMiwxMCArMTE0NSwxMSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CkBAIC0xMTI1LDcgKzExNjksNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMTM0LDcgKzExNzcsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwppbmRleCBmNTliZTQ0Li4wNjY0NDkwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxNzo1OTo0NSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MzA6MzEgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMzAsNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNTcsNiArNTgsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTkyLDYgKzk0LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTA5LDYgKzExMiw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTMwLDE0ICsxMzQsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTIxMyw4ICsyNDQsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNjEsOCArMjkwLDggQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLUNPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQorQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC0zMTMsNyArMzQyLDYgQEAKICMKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CiBDT05GSUdfUENNQ0lBX0lPQ1RMPXkKQEAgLTM2Myw2ICszOTEsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC00MzIsNiArNDY0LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9QT0xMREVWPXkKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTQ2MCw2ICs0OTMsNyBAQAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CkBAIC00ODMsNiArNTE3LDcgQEAKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUwLDYgKzU4NSw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTY1OSw3ICs2OTUsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC02ODQsNiArNzIyLDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNzMxLDcgKzc3MCw2IEBACiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtODEzLDEwICs4NTEsMTEgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtODI5LDcgKzg2OCw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTgzOCw3ICs4NzYsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOS1yb21pbWFnZV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOS1yb21pbWFnZV9kZWZjb25maWcKaW5kZXggMDI1OTBlMS4uM2Q4MzRlNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjAxOjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMTozMTowOSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjAsNiArNjIsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMiw2ICsxMDUsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTksNiArMTIzLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzMsNiArMTM4LDM1IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTg4LDYgKzIyMiw3IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCiBDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMjEyLDggKzI0Nyw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI0Nyw3ICsyODAsNiBAQAogIwogIyBDT05GSUdfU0hfVElNRVJfVE1VIGlzIG5vdCBzZXQKIENPTkZJR19TSF9USU1FUl9DTVQ9eQotQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1NIX0NMS19DUEc9eQogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKQEAgLTQyOSw2ICs0NjEsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01MjAsNyArNTUzLDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTU3NSwxNiArNjA3LDE5IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTY1MCwxMCArNjg1LDEyIEBACiAjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURT15CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CiAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCkBAIC03MjUsNyArNzYyLDcgQEAKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC03NDMsNyArNzgwLDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNzUyLDcgKzc4OCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcKaW5kZXggOGFlNjVkMi4uZjIyYmU0OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDlfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBGcmkgU2VwIDI1IDExOjU0OjIyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMTozMjo1NSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjIsNiArNjQsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwNCw2ICsxMDcsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjEsNiArMTI1LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDgsMTQgKzE1Myw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMTEsNiArMjQzLDcgQEAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKIENPTkZJR18yOUJJVD15CisjIENPTkZJR19QTUJfRU5BQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0yMzUsOCArMjY4LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjcwLDcgKzMwMSw2IEBACiAjCiAjIENPTkZJR19TSF9USU1FUl9UTVUgaXMgbm90IHNldAogQ09ORklHX1NIX1RJTUVSX0NNVD15Ci1DT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX0NQRz15CiBDT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CkBAIC01MzQsNiArNTY0LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKQEAgLTU2Miw2ICs1OTYsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02NjgsNyArNzAzLDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTcyMywxNiArNzU3LDE5IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTg0NywxMCArODg0LDEyIEBACiAjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQ0RDX0NPTVBPU0lURT15CitDT05GSUdfVVNCX0NEQ19DT01QT1NJVEU9bQorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQpAQCAtODc1LDYgKzkxNCw3IEBACiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtOTA2LDYgKzk0Niw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTkyNiw3ICs5NjcsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC05NTMsNiArOTk2LDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMDI3LDcgKzEwNzEsNyBAQAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTEwNDUsNyArMTA4OSw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNTQsNyArMTA5NywxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKaW5kZXggYzJhOWEzOS4uMmE0MmQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjA1OjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMTozNTozMSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MCw2ICs2Miw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTQsNiArOTcsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTMsNiArMTE3LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzksMTQgKzE0NCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjIsOCArMjU0LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzExLDcgKzM0MSw2IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAogIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCkBAIC0zMTksMTQgKzM0OCwxMiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKIENPTkZJR19QQ01DSUFfSU9DVEw9eQpAQCAtNDYxLDkgKzQ4OCw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNDk4LDYgKzUyMiwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTYxOCw4ICs2NDYsMTEgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC02NTIsNyArNjgzLDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtNzMzLDYgKzc2Niw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldApAQCAtNzgxLDggKzgxNSwxMyBAQAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTgwNiw2ICs4NDUsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtODE1LDYgKzg1NSw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC05MzMsNiArOTc0LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTM3MSwxMCArMTQxMywxMSBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC0xMzg3LDggKzE0MzAsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzOTcsNyArMTQzOCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZwppbmRleCBlYzBjMGI0Li5mMmYxZjhjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6MDk6NTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjM3OjAxIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYwLDYgKzYyLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05NCw2ICs5Nyw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMyw2ICsxMTcsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzOSwxNCArMTQ0LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyMiw4ICsyNTQsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zMTEsNyArMzQxLDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCByb290PS9kZXYvc2RhMSIKQEAgLTMyMCwxNCArMzQ5LDEyIEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLUNPTkZJR19QQ01DSUFfREVCVUc9eQogQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKIENPTkZJR19QQ01DSUFfSU9DVEw9eQpAQCAtNDU5LDkgKzQ4Niw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNDk2LDYgKzUyMCwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTU4LDggKzU4NiwxMSBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTU5Myw3ICs2MjQsOSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CkBAIC02NDgsMTUgKzY4MSwxNiBAQAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUExBVEZPUk09eQpAQCAtNzMyLDYgKzc2Niw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldApAQCAtNzgwLDggKzgxNSwxMiBAQAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04MDQsNiArODQzLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTgxMyw2ICs4NTMsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC05MzEsNiArOTcyLDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTAyMCw3ICsxMDYyLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE5NSwxMCArMTIzOSwxMSBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC0xMjExLDggKzEyNTYsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMjEsNyArMTI2NCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL21hZ2ljcGFuZWxyMl9kZWZjb25maWcKaW5kZXggNzkwOTFlMy4uYTdhMTZjZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21hZ2ljcGFuZWxyMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL21hZ2ljcGFuZWxyMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODoxMDo0OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6Mzc6NDIgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMzAsNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjMsNiArNjQsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMiw2ICsxMDQsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjAsNiArMTIzLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDYsMTQgKzE1MCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjksOCArMjYwLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjgzLDggKzMxMiw4IEBACiAjCiAjIERNQSBzdXBwb3J0CiAjCi1DT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTYKICMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIApAQCAtNDE2LDkgKzQ0NSw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTM0LDYgKzU2MCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNjA3LDExICs2MzcsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYzMSw2ICs2NjEsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02NzUsNiArNzA2LDcgQEAKIENPTkZJR19TRVJJT19TRVJQT1JUPXkKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03NjYsNiArNzk4LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtODI0LDcgKzg1Nyw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTg5OCw3ICs5MzMsNiBAQAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC0xMDcyLDkgKzExMDYsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGE0NDMwMDAwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTEwODgsNyArMTExOSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZwppbmRleCA2YmI1OTc2Li43ZDQzZmFiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODoxNDozNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6NDA6NDEgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MCw2ICs2Miw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTgsNiArMTAxLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE1LDYgKzExOSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTM2LDE0ICsxNDEsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjI1LDggKzI1Nyw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI3Miw4ICszMDIsOCBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CitDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz02CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKQEAgLTMxMiw3ICszNDIsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX09WRVJXUklURT15CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9oZGExIgpAQCAtNDEyLDkgKzQ0MSw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNDQzLDYgKzQ2OSwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNTE3LDExICs1NDcsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjE2LDYgKzY0Niw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTgzNSwxMCArODY2LDExIEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTg1MSw3ICs4ODMsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC04NjAsNyArODkxLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKaW5kZXggNjUwMTgyOC4uZDJiMTgzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6MTc6NDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjQxOjQxIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKQEAgLTMxLDYgKzMyLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYxLDYgKzYzLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDAsNiArMTAzLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTIxLDYgKzEyNSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQ3LDE0ICsxNTIsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTI0MCw4ICsyNzIsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNzcsNyArMzA3LDYgQEAKICMKIENPTkZJR19TSF9USU1FUl9UTVU9eQogIyBDT05GSUdfU0hfVElNRVJfQ01UIGlzIG5vdCBzZXQKLUNPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19TSF9DTEtfQ1BHPXkKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CkBAIC00MzMsMTAgKzQ2Miw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU0LDYgKzU3OSwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNTYzLDkgKzU5MiwxMSBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjQ2LDExICs2NzcsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY3MCw2ICs3MDEsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NzYsNyArODA4LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTgzMSwxNiArODYyLDE5IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogQ09ORklHX01FRElBX1NVUFBPUlQ9eQogCkBAIC04NTcsNiArODkxLDggQEAKICMKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCitDT05GSUdfSVJfQ09SRT15CitDT05GSUdfVklERU9fSVI9eQogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9UVU5FUj15CiAjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldApAQCAtODc2LDYgKzkxMiw3IEBACiAjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15CitDT05GSUdfVklERU9fSVJfSTJDPXkKICMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CkBAIC04ODMsMTAgKzkyMCwxMyBAQAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX1JKNTROMSBpcyBub3Qgc2V0CiBDT05GSUdfU09DX0NBTUVSQV9UVzk5MTA9eQogIyBDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfU09DX0NBTUVSQV9PVjc3Mlg9eQorIyBDT05GSUdfU09DX0NBTUVSQV9PVjk2NDAgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVU9eQogIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKQEAgLTEwMDksMTAgKzEwNDksMTIgQEAKICMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotQ09ORklHX1VTQl9HX1NFUklBTD15CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQpAQCAtMTA1MSw2ICsxMDkzLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTA3MSw3ICsxMTE0LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5OCw2ICsxMTQzLDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMjA2LDEwICsxMjUyLDExIEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQEAgLTEyMjksOSArMTI3Niw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlMDAwMDAKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMjQwLDcgKzEyODQsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKaW5kZXggN2ZjMTk1Mi4uZDUwYzAzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjIwOjUzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMTo0NToyNSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Myw2ICs2NCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAyLDYgKzEwNCw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyMCw2ICsxMjMsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0NiwxNCArMTUwLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyNSwxMiArMjU2LDEwIEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNzksOCArMzA4LDggQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLUNPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQorQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC00MDksNyArNDM4LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNTI1LDYgKzU2MCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CkBAIC01OTUsMTEgKzYzNCwxMSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjE5LDYgKzY1OCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY1Nyw3ICs2OTcsNiBAQAogIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAogIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKIAogIwpAQCAtNzA1LDYgKzc0NCw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTc2NCw3ICs4MDQsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC03ODcsNiArODI5LDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC04MzMsNyArODc2LDYgQEAKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtOTc3LDkgKzEwMTksNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGE0MDAwMTUwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTk5Myw3ICsxMDMyLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwppbmRleCA5MDNiMDIxLi5lZmRhNjNkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6MjQ6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjE2OjEzIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMxLDYgKzMyLDcgQEAKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYzLDYgKzY1LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDMsNiArMTA2LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTEwLDYgKzExNCw3IEBACiBDT05GSUdfUEVSRl9FVkVOVFM9eQogQ09ORklHX0VWRU5UX1BST0ZJTEU9eQogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsNiArMTMwLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzUsNiArMTQxLDcgQEAKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTUxLDE0ICsxNTgsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjQ1LDggKzI3OSw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTM0Miw3ICszNzQsNiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKQEAgLTQ0OSwxMCArNDgwLDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01MzUsNyArNTYyLDYgQEAKIENPTkZJR19NVERfUEhZU01BUD15CiAjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC01NzMsNiArNTk5LDEwIEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTU4Myw2ICs2MTMsNyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CkBAIC01OTAsNiArNjIxLDcgQEAKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY0MCw4ICs2NzIsMTEgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC02NzUsNyArNzEwLDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CkBAIC03MjgsMTUgKzc2NSwxNiBAQAogIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKQEAgLTgxMyw2ICs4NTEsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfVklBX1JISU5FPW0KIENPTkZJR19WSUFfUkhJTkVfTU1JTz15CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKQEAgLTg2Miw4ICs5MDEsOSBAQAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODc3LDYgKzkxNyw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC04ODYsNiArOTI3LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtOTI4LDYgKzk3MCw3IEBACiAjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDgsMTEgKzEwNTEsNiBAQAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTEwMjEsNyArMTA1OSw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDY1LDYgKzExMDIsNyBAQAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKQEAgLTExMDMsNiArMTE0MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CkBAIC0xMTE4LDE1ICsxMTU3LDE4IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTEyMTEsNiArMTI1Myw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEyMzEsNyArMTI3NCw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0MzYsNiArMTQ4MSw4IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtMTQ2Miw2ICsxNTA5LDcgQEAKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQpAQCAtMTQ5OCw5ICsxNTQ2LDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAotIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTE1MTQsNyArMTU1OSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwppbmRleCAyN2ZmNDZjLi5mNGIwMDQ1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6Mjk6MjMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjE5OjM1IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQpAQCAtMzIsNiArMzMsNyBAQAogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjcsNiArNjksNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogQ09ORklHX1JDVV9UUkFDRT15CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDMsNiArMTA2LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTEwLDYgKzExNCw3IEBACiBDT05GSUdfUEVSRl9FVkVOVFM9eQogQ09ORklHX0VWRU5UX1BST0ZJTEU9eQogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjYsNiArMTMxLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNTMsMTQgKzE1OSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yNDgsMTMgKzI4MSwxMSBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yODksNyArMzIwLDYgQEAKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9USU1FUl9UTVU9eQotQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1NIX0NMS19DUEc9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQpAQCAtMzYzLDcgKzM5Myw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CkBAIC00NzEsMTAgKzUwMCw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTEwLDYgKzUzNSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01MjAsNiArNTQ5LDcgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldApAQCAtNTI3LDYgKzU1Nyw3IEBACiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC01NzcsOCArNjA4LDExIEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldApAQCAtNjEyLDcgKzY0Niw5IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQpAQCAtNjY1LDE1ICs3MDEsMTYgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9QTEFURk9STT15CkBAIC03MzAsNiArNzY3LDcgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03NzYsOCArODE0LDkgQEAKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTc5MSw2ICs4MzAsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtODAwLDYgKzg0MCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg0NCw2ICs4ODUsNyBAQAogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MjUsMTEgKzk2Nyw2IEBACiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldApAQCAtOTM4LDcgKzk3NSw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05NjksNiArMTAwNSw3IEBACiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKQEAgLTEwMTEsNiArMTA0OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldApAQCAtMTA1MCw2ICsxMDg4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQpAQCAtMTA2NCwxNiArMTEwMywxOSBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC0xMjExLDYgKzEyNTMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC0xMjMxLDcgKzEyNzQsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xNDYzLDYgKzE1MDgsNyBAQAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKQEAgLTE0OTksOCArMTU0NSw2IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHXzRLU1RBQ0tTPXkKQEAgLTE1MTQsNyArMTU1OCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZwppbmRleCBjNDBkYjEyLi4yZmM2MzVhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6MzQ6MjkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjIzOjEyIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTI5LDYgKzI5LDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTU2LDYgKzU3LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05Nyw2ICs5OSw3IEBACiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMDksNiArMTEyLDcgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CisjIENPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPXkKQEAgLTExNyw2ICsxMjEsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0MiwxNCArMTQ3LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyNCw3ICsyNTYsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MQogCiAjCkBAIC00MzMsNiArNDY0LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNDY0LDYgKzQ5OSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTU0MCw2ICs1NzYsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC01OTQsNyArNjMxLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtNjE4LDYgKzY1Nyw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNzE3LDcgKzc1Nyw3IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC03NDEsNyArNzgxLDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNzUwLDcgKzc4OSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIENPTkZJR19CSU5BUllfUFJJTlRGPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCmluZGV4IDVjYWJkYjMuLjAxNjllNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODozNTowNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6MjM6NTQgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMzAsNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjEsNiArNjIsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwNCw2ICsxMDYsNyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMSwxMSArMTE0LDEzIEBACiBDT05GSUdfUEVSRl9FVkVOVFM9eQogQ09ORklHX0VWRU5UX1BST0ZJTEU9eQogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQorIyBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKIENPTkZJR19PUFJPRklMRT15CkBAIC0xMjQsNiArMTI5LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDksMTQgKzE1NSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMzEsNyArMjY0LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTEKIAogIwpAQCAtNDI0LDkgKzQ1Niw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTM5LDYgKzU2OCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CkBAIC02MTAsMTEgKzY0MywxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02NDMsNiArNjc3LDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTc0Myw2ICs3NzgsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1I9eQpAQCAtOTEwLDYgKzk0Niw4IEBACiAjCiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwpAQCAtOTU1LDcgKzk5Myw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTk3OCw2ICsxMDE4LDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMTM3LDYgKzExNzgsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUU19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTX0ZSRUUgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUU19USU1FUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUU19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19PQkpFQ1RTX0VOQUJMRV9ERUZBVUxUPTEKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTEyMDMsOSArMTI0NSw2IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZmZTgwMDAKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQpAQCAtMTIxOCw3ICsxMjU3LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwppbmRleCA2ZjExMjZiLi5mYmExZjYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODozNjoyNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6MjU6MzYgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzEsNiArMzIsNyBAQAogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjEsNiArNjMsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk1LDYgKzk4LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE3LDYgKzEyMSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQzLDE0ICsxNDgsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjI2LDggKzI1OCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTMyMSw3ICszNTEsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAxMDAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX09WRVJXUklURT15CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MxLDExNTIwMCByb290PS9kZXYvc2RhMSIKQEAgLTMzMCw3ICszNTksNiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKQEAgLTQyOSwxMCArNDU3LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC00NjYsNiArNDkwLDEwIEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC00ODIsNiArNTEwLDcgQEAKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNTMwLDggKzU1OSwxMSBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTU2NSw3ICs1OTcsOSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKQEAgLTYxOCwxNSArNjUyLDE2IEBACiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUExBVEZPUk09eQpAQCAtNzA0LDYgKzczOSw3IEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc1Miw4ICs3ODgsMTAgQEAKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzc2LDYgKzgxNCw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC03ODUsNiArODI0LDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg2Miw3ICs5MDIsMTAgQEAKICMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19TUElfQklUQkFORz15CisjIENPTkZJR19TUElfU0hfTVNJT0YgaXMgbm90IHNldAogQ09ORklHX1NQSV9TSF9TQ0k9eQorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKQEAgLTkxNSwxMCArOTU4LDEyIEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTA1NSw2ICsxMTAwLDcgQEAKICMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzVBVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CkBAIC0xMzA4LDcgKzEzNTQsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xMzMzLDYgKzEzODEsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xNDc0LDEwICsxNTIzLDExIEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQEAgLTE0OTcsOSArMTU0Nyw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTA4LDcgKzE1NTUsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZwppbmRleCA5MjE1YmJiMS4uYThkNTM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6Mzk6NDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjI2OjM5IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMxLDYgKzMyLDcgQEAKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYxLDYgKzYzLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05NSw2ICs5OCw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExNyw2ICsxMjEsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0MywxNCArMTQ4LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyNiw4ICsyNTgsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zMjEsNyArMzUxLDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCkBAIC0zMzAsNyArMzU5LDYgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CkBAIC00MjksMTAgKzQ1Nyw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUyLDYgKzU3NiwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNTY4LDYgKzU5Niw3IEBACiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTYxNiw4ICs2NDUsMTEgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC02NTEsNyArNjgzLDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CkBAIC03MDQsMTUgKzczOCwxNiBAQAogIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKQEAgLTc5MCw2ICs4MjUsNyBAQAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC04MzgsOCArODc0LDEwIEBACiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTg2Miw2ICs5MDAsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtODcxLDYgKzkxMCw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC05NDgsNyArOTg4LDEwIEBACiAjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX1NIX01TSU9GIGlzIG5vdCBzZXQKIENPTkZJR19TUElfU0hfU0NJPXkKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC0xMDAxLDEwICsxMDQ0LDEyIEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTE0MSw2ICsxMTg2LDcgQEAKICMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzVBVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CkBAIC0xMzk0LDcgKzE0NDAsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xNDE5LDYgKzE0NjcsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xNTYxLDEwICsxNjEwLDExIEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQEAgLTE1ODQsOSArMTYzNCw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTk1LDcgKzE2NDIsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKaW5kZXggMDU1NTM2Yi4uMTg1OWJhMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjQwOjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzoyNzoyMCAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Myw2ICs2NSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTksNiArMTAyLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE5LDYgKzEyMyw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQ1LDE0ICsxNTAsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM5LDggKzI3MSw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI5MSw5ICszMjEsOSBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CiBDT05GSUdfU0hfRE1BX0lSUV9NVUxUST15CitDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz0xMgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC0zMzksNyArMzY5LDYgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKQEAgLTM0Nyw3ICszNzYsNiBAQAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQogQ09ORklHX1BDTUNJQV9JT0NUTD15CkBAIC00NDUsNiArNDczLDcgQEAKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9eQorIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTUxNSw5ICs1NDQsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU1OCw2ICs1ODQsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC02NjMsOCArNjkzLDExIEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTY5OCw3ICs3MzEsOSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CkBAIC03NTMsMTUgKzc4OCwxNiBAQAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC04MjcsMTQgKzg2MywyMCBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04NjEsNiArOTAzLDcgQEAKIENPTkZJR19ORVRQT0xMPXkKICMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC04NzAsNiArOTEzLDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTkyMiw2ICs5NjYsNyBAQAogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMDA5LDYgKzEwNTQsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xNTM0LDggKzE1ODAsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CkBAIC0xNTQ5LDcgKzE1OTMsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCmluZGV4IDFjZDE3NzcuLjQzZTY3ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6NDU6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjMwOjAwIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTMwLDYgKzMwLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTY0LDYgKzY1LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfVFJBQ0U9eQogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTE1LDYgKzExNyw3IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTIyLDExICsxMjUsMTMgQEAKIENPTkZJR19QRVJGX0VWRU5UUz15CiBDT05GSUdfRVZFTlRfUFJPRklMRT15CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKKyMgQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfT1BST0ZJTEU9eQpAQCAtMTM1LDYgKzE0MCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTU2LDE5ICsxNjIsNDcgQEAKIENPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ0dST1VQIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yNDMsNyArMjc3LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTEKIAogIwpAQCAtNDM4LDkgKzQ3MSw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUxLDYgKzU4MSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CkBAIC02MDUsMTEgKzYzOSwxMSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjg1LDYgKzcxOSw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTczOCw3ICs3NzMsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC03NjIsNiArNzk5LDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC05MTEsNiArOTQ5LDcgQEAKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQpAQCAtOTQ3LDcgKzk4Niw2IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX0RVTVBfQ09ERT15CkBAIC05NjAsNyArOTk4LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZwppbmRleCA1NTMxNDQ0Li5lYzQ5NGUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjQ2OjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzozMDo0MSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjEsNiArNjMsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk5LDYgKzEwMiw3IEBACiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE3LDYgKzEyMSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTI2LDYgKzEzMSw3IEBACiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTE0MiwxNCArMTQ4LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTIyOCw4ICsyNjEsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNjMsNyArMjk0LDYgQEAKICMKIENPTkZJR19TSF9USU1FUl9UTVU9eQogIyBDT05GSUdfU0hfVElNRVJfQ01UIGlzIG5vdCBzZXQKLUNPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19TSF9DTEtfQ1BHPXkKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CkBAIC00MTMsOSArNDQzLDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01MjUsNiArNTUyLDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKQEAgLTU4NSw4ICs2MTYsOCBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjI4LDYgKzY1OSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTcyNCw3ICs3NTYsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzUzLDE1ICs3ODQsMTggQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTE3MywxMCArMTIwNywxMSBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC0xMTg5LDkgKzEyMjQsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTAwMDAwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwMCw3ICsxMjMyLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZwppbmRleCA2OTIxYjE5Li5lZTg3ZTJiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjUwOjA1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzozNDoxNSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01NCw2ICs1NSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtODQsNiArODYsNyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTk1LDExICs5OCwxMyBAQAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEyMCwxNCArMTI1LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIwMSw3ICsyMzMsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MQogCiAjCkBAIC00MDEsNiArNDMyLDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNDMyLDYgKzQ2Nyw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTUwOCw2ICs1NDQsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC01NzUsNiArNjEyLDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC02NjEsMTAgKzY5OSwxMSBAQAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC02NzcsNyArNzE2LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjg1LDcgKzcyMywxMSBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCmluZGV4IDNhYmIwNjguLjAzZjQyMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6NTA6NTIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjM0OjM3IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTI5LDYgKzI5LDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTU5LDYgKzYwLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05NCw2ICs5Niw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMSw2ICsxMTQsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzNiwxNCArMTQwLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIxOSw4ICsyNTAsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC00MDMsOSArNDMyLDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01MTAsNiArNTM2LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CkBAIC01NjQsMTEgKzU5NCwxMSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC01OTgsNiArNjI4LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjI1LDYgKzY1Niw3IEBACiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY5Niw2ICs3MjgsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC03NjUsNiArNzk4LDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtODA5LDcgKzg0Myw2IEBACiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg3NywxMCArOTEwLDExIEBACiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTg5Myw3ICs5MjcsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC05MDEsNyArOTM0LDExIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwppbmRleCAxYTQzY2ZlLi5jZmE1ODE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjUzOjMyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzo0NDo1NiAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MCw2ICs2MSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTUsNiArOTcsNyBAQAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMyw2ICsxMTYsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzOCwxNCArMTQyLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyMSw4ICsyNTIsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC00NTIsOSArNDgxLDYgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU2NSw2ICs1OTEsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldApAQCAtNjc1LDExICs3MDUsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzU3LDYgKzc4Nyw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTg4OCw3ICs5MTksNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC0xMDIxLDcgKzEwNTEsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldApAQCAtMTAzNSw3ICsxMDY0LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwppbmRleCBiOGEzYzhjLi4yMDEyODNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjU3OjExIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzo0Njo1OCAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MSw2ICs2Miw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAwLDYgKzEwMiw3IEBACiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE4LDYgKzEyMSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQzLDE0ICsxNDcsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjI2LDggKzI1Nyw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTQ1Nyw5ICs0ODYsNiBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTcwLDYgKzU5NiwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CkBAIC02NDIsOCArNjcyLDggQEAKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjcyLDYgKzcwMiw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NjUsNiArNzk2LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTAyOSw3ICsxMDYxLDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtMTE4Niw3ICsxMjE3LDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTEyMDAsNyArMTIzMCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKaW5kZXggZDcwOWI3Zi4uNGE0ZWZkMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODo1Nzo0MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6NDk6MTUgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQpAQCAtMzEsNiArMzIsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjMsNiArNjUsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMiw2ICsxMDUsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjIsNiArMTI2LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDksMTQgKzE1NCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMjQ4LDggKzI4MCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI4NCw3ICszMTQsNiBAQAogIwogQ09ORklHX1NIX1RJTUVSX1RNVT15CiAjIENPTkZJR19TSF9USU1FUl9DTVQgaXMgbm90IHNldAotQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1NIX0NMS19DUEc9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQpAQCAtNDM2LDkgKzQ2NSw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNDY3LDYgKzQ5MywxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNTYwLDExICs1OTAsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTg0LDYgKzYxNCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTYyMiw2ICs2NTMsNyBAQAogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjk0LDYgKzcyNiw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTc3NCw3ICs4MDcsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC05MDYsNyArOTQxLDcgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtOTI0LDggKzk1OSw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM0LDcgKzk2NywxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKaW5kZXggNTZiMGI5Zi4uYWIzNzFhZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgRnJpIFNlcCAyNSAxMTo1MDo1OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTQ6MzY6NTYgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYyLDYgKzY0LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05OSw2ICsxMDIsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTYsNiArMTIwLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDIsMTQgKzE0Nyw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yMDUsNiArMjM3LDcgQEAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKIENPTkZJR18yOUJJVD15CisjIENPTkZJR19QTUJfRU5BQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0yMjksOCArMjYyLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjY1LDcgKzI5Niw2IEBACiAjCiBDT05GSUdfU0hfVElNRVJfVE1VPXkKICMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX0NQRz15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldApAQCAtMjc5LDggKzMwOSw4IEBACiAjCiAjIERNQSBzdXBwb3J0CiAjCi1DT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTEyCiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKQEAgLTQyMyw5ICs0NTMsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU1NSw2ICs1ODIsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTU2NSw5ICs1OTYsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNTc4LDYgKzYxMiw3IEBACiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNjcyLDExICs3MDcsMTIgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzA1LDYgKzc0MSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTgxMyw3ICs4NTAsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODI3LDcgKzg2MywxMCBAQAogIwogQ09ORklHX1NQSV9CSVRCQU5HPXkKICMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TSF9NU0lPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfU0hfU0NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC04ODUsMTEgKzkyNCwxMyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKQEAgLTg5Nyw2ICs5MzgsOCBAQAogIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTkxMyw2ICs5NTYsOCBAQAogIwogIyBNdWx0aW1lZGlhIGRyaXZlcnMKICMKK0NPTkZJR19JUl9DT1JFPXkKK0NPTkZJR19WSURFT19JUj15CiAjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAogQ09ORklHX01FRElBX1RVTkVSPW0KICMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CkBAIC05MzIsNiArOTc3LDcgQEAKICMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPPXkKK0NPTkZJR19WSURFT19JUl9JMkM9eQogIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKQEAgLTk0MCwxMCArOTg2LDEzIEBACiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQxMTIgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfUko1NE4xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1NPQ19DQU1FUkFfT1Y3NzJYPXkKKyMgQ09ORklHX1NPQ19DQU1FUkFfT1Y5NjQwIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVPXkKIENPTkZJR19WNExfVVNCX0RSSVZFUlM9eQogIyBDT05GSUdfVVNCX1ZJREVPX0NMQVNTIGlzIG5vdCBzZXQKQEAgLTk2MSw2ICsxMDEwLDcgQEAKICMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1BBQzIwNyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKQEAgLTk3NCw2ICsxMDI0LDcgQEAKICMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TVEswMTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NUVjA2ODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1Q2MTMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1RWODUzMiBpcyBub3Qgc2V0CkBAIC0xMTEwLDkgKzExNjEsMTEgQEAKIENPTkZJR19TTkRfU09DX0FEMTgzNj1tCiBDT05GSUdfU05EX1NPQ19BRDE5Mzg9bQogQ09ORklHX1NORF9TT0NfQUQ3MzMxMT1tCitDT05GSUdfU05EX1NPQ19BRFMxMTdYPW0KIENPTkZJR19TTkRfU09DX0FLNDEwND1tCiBDT05GSUdfU05EX1NPQ19BSzQ1MzU9bQogQ09ORklHX1NORF9TT0NfQUs0NjQyPW0KK0NPTkZJR19TTkRfU09DX0FLNDY3MT1tCiBDT05GSUdfU05EX1NPQ19DUzQyNzA9bQogQ09ORklHX1NORF9TT0NfTDM9bQogQ09ORklHX1NORF9TT0NfUENNMzAwOD1tCkBAIC0xMTIxLDExICsxMTc0LDE0IEBACiBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyMz1tCiBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyNj1tCiBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMzWD1tCitDT05GSUdfU05EX1NPQ19UTFYzMjBEQUMzMz1tCiBDT05GSUdfU05EX1NPQ19VREExMzRYPW0KIENPTkZJR19TTkRfU09DX1VEQTEzODA9bQogQ09ORklHX1NORF9TT0NfV004NTEwPW0KIENPTkZJR19TTkRfU09DX1dNODUyMz1tCiBDT05GSUdfU05EX1NPQ19XTTg1ODA9bQorQ09ORklHX1NORF9TT0NfV004NzExPW0KK0NPTkZJR19TTkRfU09DX1dNODcyNz1tCiBDT05GSUdfU05EX1NPQ19XTTg3Mjg9bQogQ09ORklHX1NORF9TT0NfV004NzMxPW0KIENPTkZJR19TTkRfU09DX1dNODc1MD1tCkBAIC0xMTQzLDYgKzExOTksNyBAQAogQ09ORklHX1NORF9TT0NfV004OTkzPW0KIENPTkZJR19TTkRfU09DX1dNOTA4MT1tCiBDT05GSUdfU05EX1NPQ19NQVg5ODc3PW0KK0NPTkZJR19TTkRfU09DX1RQQTYxMzBBMj1tCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CkBAIC0xMzE2LDEwICsxMzczLDEyIEBACiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQpAQCAtMTM0NSw2ICsxNDA0LDcgQEAKICMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST15CisjIENPTkZJR19NTUNfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTEzNzYsNiArMTQzNiw3IEBACiBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPXkKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC0xNDA0LDcgKzE0NjUsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xNTk3LDcgKzE2NjAsNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtMTYxNCw3ICsxNjc3LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTYyMyw3ICsxNjg1LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZwppbmRleCA3YmM5MjZjLi5iMTVhNDRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjU4OjU4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNDozOToxMCAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYwLDYgKzYyLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05NSw2ICs5OCw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMyw2ICsxMTcsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzOCwxNCArMTQzLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyMSw4ICsyNTMsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zMDcsNyArMzM3LDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKQEAgLTQwNiw5ICs0MzUsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTUxMyw2ICs1MzksMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldApAQCAtNjE1LDExICs2NDUsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzI2LDYgKzc1Niw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTc4NSw2ICs4MTYsNyBAQAogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTkxNCwxMCArOTQ2LDExIEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTkzMCw3ICs5NjMsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC05MzksNyArOTcxLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZwppbmRleCBjMjBhZTVlLi5kMWVmZmRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjAxOjQxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNDozOTo1NiAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYwLDYgKzYyLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05OCw2ICsxMDEsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTYsNiArMTIwLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDEsMTQgKzE0Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjQsOCArMjU2LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzExLDcgKzM0MSw2IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDEwMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKICMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwzODQwMCIKQEAgLTQzMCw5ICs0NTksNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTUzNyw2ICs1NjMsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTU5MSwxMSArNjIxLDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY5Myw2ICs3MjMsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC03NTQsNiArNzg1LDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtODYzLDEwICs4OTUsMTEgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtODc5LDcgKzkxMiw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTg4OCw3ICs5MjAsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnCmluZGV4IDgyYmFlZWYuLjU4NTMzZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6MDM6NTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE0OjQwOjMyIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTU5LDYgKzYxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05Miw2ICs5NSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMCw2ICsxMTQsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzNiwxNCArMTQxLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjIyLDggKzI1NCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTMxMyw3ICszNDMsNiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKQEAgLTQwMSw5ICs0MzAsNiBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTUxNyw2ICs1NDMsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC01NzQsOCArNjA0LDExIEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTYwOCw3ICs2NDEsOSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKQEAgLTY0Miw2ICs2NzcsOCBAQAogIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldApAQCAtNjUwLDE0ICs2ODcsMTUgQEAKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldApAQCAtNzQ4LDE0ICs3ODYsMTYgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzc0LDYgKzgxNCw3IEBACiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTc4Myw2ICs4MjQsNyBAQAogQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtODgzLDYgKzkyNSw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTExNDksNiArMTE5Miw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTEyODUsNyArMTMyOSw3IEBACiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtMTMwMyw3ICsxMzQ3LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMxMiw3ICsxMzU1LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCmluZGV4IGRkMGU4OTAuLjY2NmZkZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOTowNzoxNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTQ6NDE6MjUgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjEsNiArMjEsNyBAQAogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzEsNiArMzIsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjQsNiArNjYsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMiw2ICsxMDUsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjQsNiArMTI4LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNTEsMTQgKzE1Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMzQsOCArMjY2LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzIwLDcgKzM1MCw2IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDA0MDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKICMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgbWVtPTY0TSByb290PS9kZXYvbmZzIgpAQCAtMzI5LDcgKzM1OCw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQpAQCAtNDMzLDkgKzQ2MSw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNDY4LDYgKzQ5MywxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiBDT05GSUdfQkxLX0RFVl9OQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTU4MCw4ICs2MDksMTEgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC02MTQsNyArNjQ2LDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTY4NSw2ICs3MTksNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTczMyw4ICs3NjgsOSBAQAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzQ4LDYgKzc4NCw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC03NTcsNiArNzk0LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtODg2LDYgKzkyNCw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTExNDksMTAgKzExODgsMTEgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQpAQCAtMTE3Miw4ICsxMjEyLDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMTgyLDcgKzEyMjAsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCmluZGV4IDY2MjE1NmUuLjM1YTNiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6MTE6NDkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE0OjQzOjA0IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTI5LDYgKzI5LDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYwLDYgKzYxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05OCw2ICsxMDAsNyBAQAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExNiw2ICsxMTksNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0MiwxNCArMTQ2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjI1LDggKzI1Niw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTQ2MCw5ICs0ODksNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU3MSw2ICs1OTcsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldApAQCAtNjIzLDExICs2NTMsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjQ3LDYgKzY3Nyw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTcyNSw2ICs3NTYsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC03OTIsNiArODI0LDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC04MzYsNyArODY5LDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtODk5LDEwICs5MzEsMTEgQEAKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTkxNiw3ICs5NDksNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC05MjUsNyArOTU3LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzcyNF9nZW5lcmljX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcKaW5kZXggZTA2NzE5YS4uYTMwNTZiNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzcyNF9nZW5lcmljX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6MTQ6MDAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE1OjAzOjQ1IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC00OSw3ICs1MSw2IEBACiAjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAKICMKQEAgLTU3LDYgKzU4LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC04MCwxMSArODIsOSBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xMDAsNiArMTAwLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTIwLDYgKzEyMSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTM2LDE5ICsxMzgsNDggQEAKIENPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ0dST1VQIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMjA0LDYgKzIzNSw3IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCiBDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMjI1LDE3ICsyNTcsMTIgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotCi0jCi0jIE1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kCi0jCisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI2OSw3ICsyOTYsNiBAQAogIwogQ09ORklHX1NIX1RJTUVSX1RNVT15CiBDT05GSUdfU0hfVElNRVJfQ01UPXkKLUNPTkZJR19TSF9QQ0xLX0ZSRVE9NDE2NjY2NjYKIENPTkZJR19TSF9DTEtfQ1BHPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKQEAgLTM4OCw2ICs0MTQsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC00NzYsNyArNTA2LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTUwNSwxNSArNTM0LDE4IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTU2MSw2ICs1OTMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC01ODEsNyArNjE0LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtNjA4LDYgKzY0Myw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNjc1LDExICs3MTEsMTAgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQpAQCAtNjk5LDcgKzczNCw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTcwNyw3ICs3NDEsMTEgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiBDT05GSUdfQklOQVJZX1BSSU5URj15CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKaW5kZXggMTk0ZmY3MC4uMDRiODQxYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOToxNTozNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6MDU6MjkgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01OSw2ICs2MSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAzLDYgKzEwNiw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyNCw2ICsxMjgsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE1MCwxNCArMTU1LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIxMSw2ICsyNDMsNyBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAogQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1BNQl9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpAQCAtMjM3LDggKzI3MCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTQyMSwxMCArNDUyLDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01MDksNyArNTM2LDYgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01NDIsNiArNTY4LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKQEAgLTY0MCwxMSArNjcwLDEyIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY3Myw2ICs3MDQsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NTYsNiArNzg4LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTQ5LDYgKzk4Miw3IEBACiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTEyOSwxMCArMTE2MywxMSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CkBAIC0xMTUyLDcgKzExODcsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMTYxLDcgKzExOTUsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzcwX2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZwppbmRleCAzNGJlZDU1Li43YjI0NzA1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzcwX2dlbmVyaWNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOToxNzoxNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6MDY6MjggMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC00OCw3ICs1MCw2IEBACiAjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAKICMKQEAgLTU2LDYgKzU3LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC03OSwxMSArODEsOSBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC05OSw2ICs5OSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExOSw2ICsxMjAsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzNSwxOSArMTM3LDQ4IEBACiBDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfQ0ZRX0dST1VQX0lPU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTIwMSw2ICsyMzIsNyBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAogQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1BNQl9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpAQCAtMjIxLDE3ICsyNTMsMTIgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotCi0jCi0jIE1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kCi0jCisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTM3OSw2ICs0MDYsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC00NjcsNyArNDk4LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTQ5NiwxNSArNTI2LDE4IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTU1Miw2ICs1ODUsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC01NzIsNyArNjA2LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtNTk5LDYgKzYzNSw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNjY2LDExICs3MDMsMTAgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQpAQCAtNjkwLDcgKzcyNiw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY5OCw3ICs3MzMsMTEgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiBDT05GSUdfQklOQVJZX1BSSU5URj15CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcKaW5kZXggNTFjYmFlZC4uODMzMDgxMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgRnJpIFNlcCAyNSAxMTozOToyMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6MDc6NDAgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CkBAIC0zMSw2ICszMiw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02NCw2ICs2Niw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAzLDYgKzEwNiw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyNiw2ICsxMzAsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE1MywxNCArMTU4LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjUzLDggKzI4NSw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI4Nyw3ICszMTcsNiBAQAogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NIX1RJTUVSX1RNVT15Ci1DT05GSUdfU0hfUENMS19GUkVRPTUwMDAwMDAwCiBDT05GSUdfU0hfQ0xLX0NQRz15CiBDT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CkBAIC0zNjAsNyArMzg5LDYgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKQEAgLTQ3MCwxMCArNDk4LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01ODgsNiArNjEyLDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTY4OCwxNSArNzE2LDE2IEBACiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC03NzcsNiArODA2LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTc4Niw2ICs4MTYsNyBAQAogQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtODQxLDYgKzg3Miw3IEBACiAjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTkyNCwxMSArOTU2LDYgQEAKICMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQpAQCAtOTM3LDcgKzk2NCw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05ODYsMTUgKzEwMTIsMTggQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTExMjksNiArMTE1OCw3IEBACiAjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTM1QVVESU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldApAQCAtMTM2Myw2ICsxMzkzLDcgQEAKICMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfQ0I3MTAgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1ZJQV9TRE1NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMzk3LDYgKzE0MjgsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC0xNDE3LDcgKzE0NDksOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xNjIyLDEzICsxNjU2LDE0IEBACiBDT05GSUdfU0NIRURTVEFUUz15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQogQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19MQVRFTkNZVE9QPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0VfTk1JX0VOVEVSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtMTYzNyw2ICsxNjcyLDcgQEAKIENPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19GVFJBQ0VfTk1JX0VOVEVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQogQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQpAQCAtMTY2OCw3ICsxNzA0LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EV0FSRl9VTldJTkRFUj15CiBDT05GSUdfTUNPVU5UPXkKIApAQCAtMTY3OCw3ICsxNzEzLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZwppbmRleCA4YzJjNDdlLi5mMTk2ZTg3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjIzOjE4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNTowOTowOSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKQEAgLTMxLDYgKzMyLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYzLDYgKzY1LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDMsMTIgKzEwNiwxNCBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiBDT05GSUdfUEVSRl9FVkVOVFM9eQogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjMsNiArMTI4LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDksMTQgKzE1NSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIzNyw4ICsyNzAsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNzEsNyArMzAyLDYgQEAKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9USU1FUl9UTVU9eQotQ09ORklHX1NIX1BDTEtfRlJFUT01MDAwMDAwMAogQ09ORklHX1NIX0NMS19DUEc9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkBAIC0zMjksNyArMzU5LDYgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CkBAIC00MzMsMTAgKzQ2Miw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUyLDYgKzU3NywxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNjUyLDE1ICs2ODEsMTYgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTcxOSw4ICs3NDksMTAgQEAKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzQzLDYgKzc3NSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC03NTIsNiArNzg1LDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg3NCwxMSArOTA4LDYgQEAKICMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQpAQCAtODg3LDcgKzkxNiw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MTYsMTUgKzk0NCwxOCBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogQ09ORklHX01GRF9TTTUwMT15CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTIwNSw2ICsxMjM2LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTIyNSw3ICsxMjU3LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ4NCw3ICsxNTE4LDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTE0OTgsNyArMTUzMSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCmluZGV4IDkyMTE1ZTYuLjQ1NDQxYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjI3OjE3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNToxMDowOSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01Nyw2ICs1OCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtODgsNiArOTAsNyBAQAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEwNSw2ICsxMDgsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEyNCwxNCArMTI4LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIwNyw4ICsyMzgsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zODcsOSArNDE2LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC00OTUsNiArNTIxLDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldApAQCAtNTQ2LDExICs1NzYsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjI5LDYgKzY1OSw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTY4OCw2ICs3MTksNyBAQAogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTczMSw3ICs3NjMsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiAjIENPTkZJR19TWVNGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldApAQCAtNzk0LDYgKzgyNSw3IEBACiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC04MDYsOCArODM4LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtODE1LDcgKzg0NSwxMSBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZwppbmRleCBlMzg1OGQ3Li5lY2Y1MGNkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6Mjk6MjYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE1OjEwOjQ1IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIyLDYgKzIyLDcgQEAKIENPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19TTVA9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKQEAgLTMyLDYgKzMzLDggQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9DT0hFUkVOVD15CisjIENPTkZJR19ETUFfTk9OQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Niw2ICs2OSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX1RSQUNFPXkKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEyMSw2ICsxMjUsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjgsNiArMTMzLDcgQEAKIENPTkZJR19QRVJGX0VWRU5UUz15CiBDT05GSUdfRVZFTlRfUFJPRklMRT15CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldApAQCAtMTQzLDYgKzE0OSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CkBAIC0xNjYsMTkgKzE3Myw0OCBAQAogQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DR1JPVVAgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0NGUV9HUk9VUF9JT1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMjMzLDYgKzI2OSw3IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCiBDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogQ09ORklHX05VTUE9eQpAQCAtMjcxLDEwICszMDgsOSBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1NDSEVEX01DPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCkBAIC00NDksNiArNDg1LDcgQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPW0KKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CkBAIC00OTYsNyArNTMzLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNTIyLDYgKzU2NSwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTMyLDkgKzU3OSwxMiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC02MjQsMTEgKzY3NCwxMiBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC03MjYsNyArNzc3LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTc0MCw3ICs3OTAsMTAgQEAKICMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TSF9NU0lPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfU0hfU0NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC03ODEsMTUgKzgzNCwxNiBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC05MjQsMTAgKzk3OCwxMiBAQAogIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CiAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCkBAIC05NjUsNiArMTAyMSw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTk5Myw3ICsxMDUwLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI0NCw4ICsxMzAzLDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiBDT05GSUdfRFVNUF9DT0RFPXkKQEAgLTEyNTgsNyArMTMxNSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCmluZGV4IGNiOTE5YTAuLjk4MzUyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjMzOjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNToxNDoxOCAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01OSw2ICs2MSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTcsNiArMTAwLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE1LDYgKzExOSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTM2LDE0ICsxNDEsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjE5LDggKzI1MSw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI3Miw5ICszMDIsOSBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CiBDT05GSUdfU0hfRE1BX0lSUV9NVUxUST15CitDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz04CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKQEAgLTMxMyw3ICszNDMsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIApAQCAtMzIxLDcgKzM1MCw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQpAQCAtNDA3LDkgKzQzNSw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTI0LDYgKzU0OSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC02MTYsNiArNjQ1LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC02MjMsOCArNjUzLDkgQEAKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYzNyw2ICs2NjgsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjQ2LDYgKzY3OCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTcyOCw2ICs3NjEsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC03ODcsNyArODIxLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtODEyLDYgKzg0OCw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTkxNSwxMCArOTUyLDExIEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTkzMSw3ICs5NjksNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC05NDAsNyArOTc3LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwppbmRleCBiOWZlOTYwLi43Mjk4MmUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6MzU6MDMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE1OjE0OjUwIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNTYsNiArNTgsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk0LDYgKzk3LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTEyLDYgKzExNiw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTM4LDE0ICsxNDMsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjIxLDggKzI1Myw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTMxMCw3ICszNDAsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIApAQCAtMzQ5LDYgKzM3OCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTAyNApAQCAtMzkwLDYgKzQyMyw3IEBACiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ1OCw2ICs0OTIsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC01MTcsNiArNTUyLDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC02MDksMTAgKzY0NSwxMSBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC02MjUsNyArNjYyLDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjM0LDcgKzY3MCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwppbmRleCAyY2E3OWVkLi43OGMyNTcwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOTozNjozNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6MTc6MjAgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjEsNiArNjMsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMSw2ICsxMDQsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjAsMTMgKzEyNCwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTQ2LDE0ICsxNTEsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjI5LDggKzI2MSw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI4Miw5ICszMTIsOSBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CiBDT05GSUdfU0hfRE1BX0lSUV9NVUxUST15CitDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz04CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKQEAgLTMyMyw3ICszNTMsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDllMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX09WRVJXUklURT15CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMzg0MDBOODEgcm9vdD0vZGV2L25mcyBpcD06Ojo6OmV0aDE6YXV0b2NvbmYgcnciCkBAIC0zMzIsNyArMzYxLDYgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CkBAIC00MjUsNiArNDUzLDcgQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPW0KKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9eQogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldApAQCAtNjE0LDEwICs2NDMsNiBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNzQzLDYgKzc2OCwxMSBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtODA3LDggKzgzNywxMSBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTg0MSw3ICs4NzQsOSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtOTM1LDYgKzk3MCw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldApAQCAtOTgzLDggKzEwMTksMTAgQEAKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtMTAzMyw2ICsxMDcxLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTEwNDIsNiArMTA4MSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTExNzIsNiArMTIxMiw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTE0MDksNyArMTQ1MCw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2NjQsNiArMTcwNyw3IEBACiAjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CkBAIC0xNjkxLDcgKzE3MzUsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldApAQCAtMTcwNSw3ICsxNzQ4LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZwppbmRleCBiMDEyY2E3Li40ZmEwM2JmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjQyOjMzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNToxODo1MyAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CkBAIC0zMSw2ICszMiw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Myw2ICs2NSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAyLDYgKzEwNSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyMiw2ICsxMjYsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0OCwxNCArMTUzLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yNDcsOCArMjc5LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjgwLDcgKzMxMCw2IEBACiAjCiBDT05GSUdfU0hfVElNRVJfVE1VPXkKICMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX0NQRz15CiBDT05GSUdfVElDS19PTkVTSE9UPXkKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKQEAgLTQzNSwxNCArNDY0LDE3IEBACiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0VYVF9DT1JFPXkKK0NPTkZJR19XRVhUX1BST0M9eQorQ09ORklHX1dFWFRfU1BZPXkKIENPTkZJR19DRkc4MDIxMT15CiAjIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MQogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfQ0ZHODAyMTFfV0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19MSUI4MDIxMT1tCiAjIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01NTksNiArNTkxLDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01NzYsNiArNjEyLDcgQEAKICMgRUVQUk9NIHN1cHBvcnQKICMKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNjUzLDMwICs2OTAsMjkgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotQ09ORklHX0xJQkVSVEFTPW0KLSMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0Ci1DT05GSUdfTElCRVJUQVNfU0RJTz1tCi1DT05GSUdfTElCRVJUQVNfREVCVUc9eQogIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAogIyBDT05GSUdfQVQ3NkM1MFhfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAotIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDMgaXMgbm90IHNldAogIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19JV00gaXMgbm90IHNldAorQ09ORklHX0xJQkVSVEFTPW0KKyMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVNfU0RJTz1tCitDT05GSUdfTElCRVJUQVNfREVCVUc9eQorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzE4LDYgKzc1NCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTgxMCw2ICs4NDcsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC05NTEsNiArOTg5LDcgQEAKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC0xMTMzLDcgKzExNzIsNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xMTUwLDcgKzExODksNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMTU5LDcgKzExOTcsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKaW5kZXggOWY4YWVlNS4uMjNiZGExOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjQ2OjEzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNToyNzo1MyAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19TTVA9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKQEAgLTMyLDYgKzMzLDggQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9DT0hFUkVOVD15CisjIENPTkZJR19ETUFfTk9OQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Niw2ICs2OSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTIwLDEyICsxMjQsMTQgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIwogQ09ORklHX1BFUkZfRVZFTlRTPXkKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTQwLDYgKzE0Niw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTYyLDE5ICsxNjksNDggQEAKIENPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ0dST1VQIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMjI5LDYgKzI2NSw3IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCiBDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CkBAIC0yNjMsOCArMzAwLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzU2LDcgKzM5MSw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLSMgQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfUENJRVBPUlRCVVM9eQogQ09ORklHX1BDSUVBRVI9eQogIyBDT05GSUdfUENJRV9FQ1JDIGlzIG5vdCBzZXQKQEAgLTQ2OSwxMCArNTAzLDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01ODgsNiArNjE4LDEwIEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC02ODgsMTUgKzcyMiwxNiBAQAogIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldApAQCAtNzg3LDYgKzgyMiw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldApAQCAtODE4LDggKzg1NCwxMCBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04NDIsNiArODgwLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTg1MSw2ICs4OTAsNyBAQAogQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtOTc2LDExICsxMDE2LDYgQEAKICMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQpAQCAtOTg5LDcgKzEwMjQsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTAyMCw2ICsxMDU0LDcgQEAKICMKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19DUzU1MzUgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIApAQCAtMTA2Miw2ICsxMDk3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CkBAIC0xMTAxLDYgKzExMzcsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CkBAIC0xMTE2LDE2ICsxMTUzLDE5IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX1NNNTAxPXkKICMgQ09ORklHX01GRF9TTTUwMV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtMTEzOSw2ICsxMTc5LDggQEAKICMKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCitDT05GSUdfSVJfQ09SRT15CitDT05GSUdfVklERU9fSVI9eQogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQxNyw2ICsxNDU5LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTQzNyw3ICsxNDgwLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ2Niw3ICsxNTExLDYgQEAKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogQ09ORklHX0VYVDRfRlM9eQotIyBDT05GSUdfRVhUNERFVl9DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0VYVDRfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CkBAIC0xNjg3LDkgKzE3MzEsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZWIwMDAwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTE3MDMsNyArMTc0NCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCmluZGV4IDA0YWQwZTEuLjA3MzczYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMTksOSArMTksMTEgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEuaD4KIAogI2lmZGVmIENPTkZJR19OUl9ETUFfQ0hBTk5FTFMKLSMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTICAgKENPTkZJR19OUl9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX0RNQV9DSEFOTkVMUykKKyNlbGlmIGRlZmluZWQoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCiAjZWxzZQotIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkwCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXguaAppbmRleCBiNTU2ZDQ5Li4xOGJmMDZkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWV4LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC02LDcgKzYsMTcgQEAKICNpZm5kZWYgX19BU01fU0hfVElNRVhfSAogI2RlZmluZSBfX0FTTV9TSF9USU1FWF9ICiAKKy8qCisgKiBPbmx5IHBhcnRzIHVzaW5nIHRoZSBsZWdhY3kgQ1BHIGNvZGUgZm9yIHRoZWlyIGNsb2NrIGZyYW1ld29yaworICogaW1wbGVtZW50YXRpb24gbmVlZCB0byBkZWZpbmUgdGhlaXIgb3duIFBjbGsgdmFsdWUuIElmIHByb3ZpZGVkLCB0aGlzCisgKiBjYW4gYmUgdXNlZCBmb3IgYWNjdXJhdGVseSBzZXR0aW5nIENMT0NLX1RJQ0tfUkFURSwgb3RoZXJ3aXNlIHdlCisgKiBzaW1wbHkgZmFsbCBiYWNrIG9uIHRoZSBpODI1MyBQSVQgdmFsdWUuCisgKi8KKyNpZmRlZiBDT05GSUdfU0hfUENMS19GUkVRCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKENPTkZJR19TSF9QQ0xLX0ZSRVEgLyA0KSAvKiBVbmRlcmx5aW5nIEhaICovCisjZWxzZQorI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTExOTMxODAKKyNlbmRpZgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGltZXguaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAppbmRleCBmMDg4NmJjLi5jNGVkNjYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApAQCAtMTksMTAgKzE5LDEwIEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKICNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCi0jZGVmaW5lIERNVEU0X0lSUQk0MAkvKiBETUFDMEIgKi8KLSNkZWZpbmUgRE1URTZfSVJRCTQyCi0jZGVmaW5lIERNVEU4X0lSUQk3NgkvKiBETUFDMUEgKi8KLSNkZWZpbmUgRE1URTlfSVJRCTc3CisjZGVmaW5lIERNVEU0X0lSUQk3NgkvKiBETUFDMEIgKi8KKyNkZWZpbmUgRE1URTZfSVJRCTQwCisjZGVmaW5lIERNVEU4X0lSUQk0MgkvKiBETUFDMUEgKi8KKyNkZWZpbmUgRE1URTlfSVJRCTQzCiAjZGVmaW5lIERNVEUxMF9JUlEJNzIJLyogRE1BQzFCICovCiAjZGVmaW5lIERNVEUxMV9JUlEJNzMKICNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwppbmRleCBhNTJmMzUxLi5kMzJmOTZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwpAQCAtMjMsOSArMjMsMjMgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KICNpbmNsdWRlIDxjcHUvc2g3NzI0Lmg+CiAKKy8qIERNQSAqLworc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0geworCS5tb2RlID0gU0hETUFfRE1BT1IxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKKwkubmFtZQk9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIC8qIFNlcmlhbCAqLwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKQEAgLTY0OSw2ICs2NjMsNyBAQAogCSZ0bXUzX2RldmljZSwKIAkmdG11NF9kZXZpY2UsCiAJJnRtdTVfZGV2aWNlLAorCSZkbWFfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZpaWMwX2RldmljZSwKIAkmaWljMV9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IGVmMjZlYmQuLmY2ODViOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CkBAIC0yOTQsNiArMjk1LDE4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTVfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZSA9IChTSERNQV9NSVhfSVJRIHwgU0hETUFfRE1BT1IxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLWRtYS1lbmdpbmUiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3Nzg1X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzY2lmMF9kZXZpY2UsCiAJJnNjaWYxX2RldmljZSwKQEAgLTMwNyw2ICszMjAsNyBAQAogCSZ0bXUzX2RldmljZSwKIAkmdG11NF9kZXZpY2UsCiAJJnRtdTVfZGV2aWNlLAorCSZkbWFfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3Nzg1X2RldmljZXNfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lkbGUuYyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwppbmRleCBhYWZmMDAzLi42YjNkNzA2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCkBAIC02Miw2ICs2Miw3IEBACiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAKKwkJc2V0X2JsX2JpdCgpOwogCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCQljcHVfc2xlZXAoKTsKQEAgLTY5LDYgKzcwLDcgQEAKIAkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwkJY2xlYXJfYmxfYml0KCk7CiAJfSBlbHNlCiAJCXBvbGxfaWRsZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDBlN2JhOGUuLjk4NmE3MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTgyLDggKzgyLDcgQEAKIAogY29uZmlnIFBNQl9FTkFCTEUKIAlib29sICJTdXBwb3J0IDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHRocm91Z2ggUE1CIgotCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QQotCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QSAmJiAhQ1BVX1NINEFMX0RTUAogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KIAkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQpAQCAtOTYsNyArOTUsNyBAQAogCiBjb25maWcgUE1CCiAJYm9vbCAiUE1CIgotCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QQorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QSAmJiAhQ1BVX1NINEFMX0RTUAogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KIAkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQpAQCAtMTA0LDcgKzEwMyw3IEBACiAKIGNvbmZpZyBQTUJfRklYRUQKIAlib29sICJmaXhlZCBQTUIiCi0JZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIENQVV9TSDRBCisJZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIENQVV9TSDRBICYmICFDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IDMyQklUCiAJaGVscAogCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgZml4ZWQgUE1CIG1hcHBpbmdzIGFyZSBpbmhlcml0ZWQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUuYyBiL2FyY2gvc2gvbW0vY2FjaGUuYwppbmRleCBlOTQxNWQzLi5iODYwN2ZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS5jCkBAIC0xMzMsMTIgKzEzMyw4IEBACiAJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAJaWYgKHBmbl92YWxpZChwZm4pKSB7CiAJCWludCBkaXJ0eSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7Ci0JCWlmIChkaXJ0eSkgewotCQkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwotCi0JCQlpZiAocGFnZXNfZG9fYWxpYXMoYWRkciwgYWRkcmVzcyAmIFBBR0VfTUFTSykpCi0JCQkJX19mbHVzaF9wdXJnZV9yZWdpb24oKHZvaWQgKilhZGRyLCBQQUdFX1NJWkUpOwotCQl9CisJCWlmIChkaXJ0eSkKKwkJCV9fZmx1c2hfcHVyZ2VfcmVnaW9uKHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFHRV9TSVpFKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL25taS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKaW5kZXggZjMwZjRhMS4uZDI0MmE3MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKQEAgLTk2LDcgKzk2LDYgQEAKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJY2xlYXJfc29mdGludCgxIDw8IGlycSk7Ci0JcGNyX29wcy0+d3JpdGUoUENSX1BJQ19QUklWKTsKIAogCWxvY2FsX2NwdV9kYXRhKCkuX19ubWlfY291bnQrKzsKIApAQCAtMTA1LDYgKzEwNCw4IEBACiAJaWYgKG5vdGlmeV9kaWUoRElFX05NSSwgIm5taSIsIHJlZ3MsIDAsCiAJCSAgICAgICBwdF9yZWdzX3RyYXBfdHlwZShyZWdzKSwgU0lHSU5UKSA9PSBOT1RJRllfU1RPUCkKIAkJdG91Y2hlZCA9IDE7CisJZWxzZQorCQlwY3Jfb3BzLT53cml0ZShQQ1JfUElDX1BSSVYpOwogCiAJc3VtID0ga3N0YXRfaXJxc19jcHUoMCwgY3B1KTsKIAlpZiAoX19nZXRfY3B1X3ZhcihubWlfdG91Y2gpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggZmE1OTM2ZS4uMTk4ZmI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtOTg2LDYgKzk4NiwxNyBAQAogCWRhdGEuYWRkciA9IDA7CiAKIAljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwkvKiBJZiB0aGUgUE1VIGhhcyB0aGUgVE9FIElSUSBlbmFibGUgYml0cywgd2UgbmVlZCB0byBkbyBhCisJICogZHVtbXkgd3JpdGUgdG8gdGhlICVwY3IgdG8gY2xlYXIgdGhlIG92ZXJmbG93IGJpdHMgYW5kIHRodXMKKwkgKiB0aGUgaW50ZXJydXB0LgorCSAqCisJICogRG8gdGhpcyBiZWZvcmUgd2UgcGVlayBhdCB0aGUgY291bnRlcnMgdG8gZGV0ZXJtaW5lCisJICogb3ZlcmZsb3cgc28gd2UgZG9uJ3QgbG9zZSBhbnkgZXZlbnRzLgorCSAqLworCWlmIChzcGFyY19wbXUtPmlycV9iaXQpCisJCXBjcl9vcHMtPndyaXRlKGNwdWMtPnBjcik7CisKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9IV0VWRU5UUzsgaWR4KyspIHsKIAkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CiAJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCAzYjJhNWFjLi41NTI5OGU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTUwLDYgKzUwLDggQEAKIAlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCXNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQKKwlzZWxlY3QgUEVSRl9FVkVOVFMKKwlzZWxlY3QgQU5PTl9JTk9ERVMKIAlzZWxlY3QgSEFWRV9BUkNIX0tNRU1DSEVDSwogCXNlbGVjdCBIQVZFX1VTRVJfUkVUVVJOX05PVElGSUVSCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCA2MGQyYjJkLi41NmY0NjJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC0xNDIsNiArMTQyLDMyIEBACiAJCXJldHVybiBtYXhfY3N0YXRlOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfYWNwaV9wZGModm9pZCkKK3sKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CisJcmV0dXJuIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgfHwKKwkJYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0NFTlRBVVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hY3BpX3NldF9wZGNfYml0cyh1MzIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CisKKwlidWZbMl0gfD0gQUNQSV9QRENfQ19DQVBBQklMSVRZX1NNUDsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCisJCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TV1NNUDsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FDUEkpKQorCQlidWZbMl0gfD0gQUNQSV9QRENfVF9GRkg7CisKKwkvKgorCSAqIElmIG13YWl0L21vbml0b3IgaXMgdW5zdXBwb3J0ZWQsIEMyL0MzX0ZGSCB3aWxsIGJlIGRpc2FibGVkCisJICovCisJaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01XQUlUKSkKKwkJYnVmWzJdICY9IH4oQUNQSV9QRENfQ19DMkMzX0ZGSCk7Cit9CisKICNlbHNlIC8qICFDT05GSUdfQUNQSSAqLwogCiAjZGVmaW5lIGFjcGlfbGFwaWMgMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaAppbmRleCA5NTBkZjQzLi5mNDZiNzlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMjU0LDYgKzI1NCwxMCBAQAogCV9fdTggcmVzZXJ2ZWRbMzFdOwogfTsKIAorLyogV2hlbiBzZXQgaW4gZmxhZ3MsIGluY2x1ZGUgY29ycmVzcG9uZGluZyBmaWVsZHMgb24gS1ZNX1NFVF9WQ1BVX0VWRU5UUyAqLworI2RlZmluZSBLVk1fVkNQVUVWRU5UX1ZBTElEX05NSV9QRU5ESU5HCTB4MDAwMDAwMDEKKyNkZWZpbmUgS1ZNX1ZDUFVFVkVOVF9WQUxJRF9TSVBJX1ZFQ1RPUgkweDAwMDAwMDAyCisKIC8qIGZvciBLVk1fR0VUL1NFVF9WQ1BVX0VWRU5UUyAqLwogc3RydWN0IGt2bV92Y3B1X2V2ZW50cyB7CiAJc3RydWN0IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAppbmRleCBjZjg2YTVlLi4zNWU4OTEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCkBAIC01LDYgKzUsMjkgQEAKIAogaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpOwogCitzdHJ1Y3QgdGhyZWFkX2luZm87CitzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHM7CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAoKndhbGtfc3RhY2tfdCkoc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpzdGFjaywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGJwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLAorCQkJCSAgICAgIHZvaWQgKmRhdGEsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqZW5kLAorCQkJCSAgICAgIGludCAqZ3JhcGgpOworCitleHRlcm4gdW5zaWduZWQgbG9uZworcHJpbnRfY29udGV4dF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAorCQkgICAgdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCSAgICBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgKmVuZCwgaW50ICpncmFwaCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nCitwcmludF9jb250ZXh0X3N0YWNrX2JwKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kLCBpbnQgKmdyYXBoKTsKKwogLyogR2VuZXJpYyBzdGFjayB0cmFjZXIgd2l0aCBjYWxsYmFja3MgKi8KIAogc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHsKQEAgLTE0LDYgKzM3LDcgQEAKIAl2b2lkICgqYWRkcmVzcykodm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpOwogCS8qIE9uIG5lZ2F0aXZlIHJldHVybiBzdG9wIGR1bXBpbmcgKi8KIAlpbnQgKCpzdGFjaykodm9pZCAqZGF0YSwgY2hhciAqbmFtZSk7CisJd2Fsa19zdGFja190CXdhbGtfc3RhY2s7CiB9OwogCiB2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZQppbmRleCBmZDVjYTk3Li42ZjM1MjYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIG9iai0kKENPTkZJR19BQ1BJX1NMRUVQKQkrPSBzbGVlcC5vIHdha2V1cF9ybS5vIHdha2V1cF8kKEJJVFMpLm8KIAogaWZuZXEgKCQoQ09ORklHX0FDUElfUFJPQ0VTU09SKSwpCi1vYmoteQkJCQkrPSBjc3RhdGUubyBwcm9jZXNzb3Iubworb2JqLXkJCQkJKz0gY3N0YXRlLm8KIGVuZGlmCiAKICQob2JqKS93YWtldXBfcm0ubzogICAgJChvYmopL3JlYWxtb2RlL3dha2V1cC5iaW4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3Byb2Nlc3Nvci5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcHJvY2Vzc29yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NWQxYjIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvcHJvY2Vzc29yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbgotICogCVZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgotICogCS0gQWRkZWQgX1BEQyBmb3IgcGxhdGZvcm1zIHdpdGggSW50ZWwgQ1BVcwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotCi0jaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotCi1zdGF0aWMgdm9pZCBpbml0X2ludGVsX3BkYyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKm9ial9saXN0OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7Ci0JdTMyICpidWY7Ci0KLQkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBwZGMuIEl0IHdpbGwgYmUgdXNlZCBsYXRlci4gKi8KLQlvYmpfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX29iamVjdF9saXN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvYmpfbGlzdCkgewotCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW9iaiA9IGttYWxsb2Moc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvYmopIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCWtmcmVlKG9ial9saXN0KTsKLQkJcmV0dXJuOwotCX0KLQotCWJ1ZiA9IGttYWxsb2MoMTIsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQlrZnJlZShvYmopOwotCQlrZnJlZShvYmpfbGlzdCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlidWZbMF0gPSBBQ1BJX1BEQ19SRVZJU0lPTl9JRDsKLQlidWZbMV0gPSAxOwotCWJ1ZlsyXSA9IEFDUElfUERDX0NfQ0FQQUJJTElUWV9TTVA7Ci0KLQkvKgotCSAqIFRoZSBkZWZhdWx0IG9mIFBEQ19TTVBfVF9TV0NPT1JEIGJpdCBpcyBzZXQgZm9yIGludGVsIHg4NiBjcHUgc28KLQkgKiB0aGF0IE9TUE0gaXMgY2FwYWJsZSBvZiBuYXRpdmUgQUNQSSB0aHJvdHRsaW5nIHNvZnR3YXJlCi0JICogY29vcmRpbmF0aW9uIHVzaW5nIEJJT1Mgc3VwcGxpZWQgX1RTRCBpbmZvLgotCSAqLwotCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19TTVBfVF9TV0NPT1JEOwotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCi0JCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TV1NNUDsKLQotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FDUEkpKQotCQlidWZbMl0gfD0gQUNQSV9QRENfVF9GRkg7Ci0KLQkvKgotCSAqIElmIG13YWl0L21vbml0b3IgaXMgdW5zdXBwb3J0ZWQsIEMyL0MzX0ZGSCB3aWxsIGJlIGRpc2FibGVkCi0JICovCi0JaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01XQUlUKSkKLQkJYnVmWzJdICY9IH4oQUNQSV9QRENfQ19DMkMzX0ZGSCk7Ci0KLQlvYmotPnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCW9iai0+YnVmZmVyLmxlbmd0aCA9IDEyOwotCW9iai0+YnVmZmVyLnBvaW50ZXIgPSAodTggKikgYnVmOwotCW9ial9saXN0LT5jb3VudCA9IDE7Ci0Jb2JqX2xpc3QtPnBvaW50ZXIgPSBvYmo7Ci0JcHItPnBkYyA9IG9ial9saXN0OwotCi0JcmV0dXJuOwotfQotCi0KLS8qIEluaXRpYWxpemUgX1BEQyBkYXRhIGJhc2VkIG9uIHRoZSBDUFUgdmVuZG9yICovCi12b2lkIGFyY2hfYWNwaV9wcm9jZXNzb3JfaW5pdF9wZGMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKLXsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEocHItPmlkKTsKLQotCXByLT5wZGMgPSBOVUxMOwotCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgfHwKLQkgICAgYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0NFTlRBVVIpCi0JCWluaXRfaW50ZWxfcGRjKHByLCBjKTsKLQotCXJldHVybjsKLX0KLQotRVhQT1JUX1NZTUJPTChhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKTsKLQotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCi17Ci0JaWYgKHByLT5wZGMpIHsKLQkJa2ZyZWUocHItPnBkYy0+cG9pbnRlci0+YnVmZmVyLnBvaW50ZXIpOwotCQlrZnJlZShwci0+cGRjLT5wb2ludGVyKTsKLQkJa2ZyZWUocHItPnBkYyk7Ci0JCXByLT5wZGMgPSBOVUxMOwotCX0KLX0KLQotRVhQT1JUX1NZTUJPTChhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IDgyZTUwODYuLmY5OTYxMDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtMTYyLDYgKzE2Miw4IEBACiAjZW5kaWYKIAkJaWYgKHN0cm5jbXAoc3RyLCAib2xkX29yZGVyaW5nIiwgMTIpID09IDApCiAJCQlhY3BpX29sZF9zdXNwZW5kX29yZGVyaW5nKCk7CisJCWlmIChzdHJuY21wKHN0ciwgInNjaV9mb3JjZV9lbmFibGUiLCAxNikgPT0gMCkKKwkJCWFjcGlfc2V0X3NjaV9lbl9vbl9yZXN1bWUoKTsKIAkJc3RyID0gc3RyY2hyKHN0ciwgJywnKTsKIAkJaWYgKHN0ciAhPSBOVUxMKQogCQkJc3RyICs9IHN0cnNwbihzdHIsICIsIFx0Iik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggZjI4ZGVjZi4uMWIxOTIwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMTkwLDkgKzE5MCwxMSBAQAogCiBzdGF0aWMgdm9pZCBkcnZfcmVhZChzdHJ1Y3QgZHJ2X2NtZCAqY21kKQogeworCWludCBlcnI7CiAJY21kLT52YWwgPSAwOwogCi0Jc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdW1hc2tfYW55KGNtZC0+bWFzayksIGRvX2Rydl9yZWFkLCBjbWQsIDEpOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX2FueShjbWQtPm1hc2ssIGRvX2Rydl9yZWFkLCBjbWQsIDEpOworCVdBUk5fT05fT05DRShlcnIpOwkvKiBzbXBfY2FsbF9mdW5jdGlvbl9hbnkoKSB3YXMgYnVnZ3k/ICovCiB9CiAKIHN0YXRpYyB2b2lkIGRydl93cml0ZShzdHJ1Y3QgZHJ2X2NtZCAqY21kKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCA0NTUwNmQ1Li5kNjE2YzA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMjMzNiw2ICsyMzM2LDcgQEAKIAkud2FybmluZ19zeW1ib2wJCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAogCS5zdGFjawkJCT0gYmFja3RyYWNlX3N0YWNrLAogCS5hZGRyZXNzCQk9IGJhY2t0cmFjZV9hZGRyZXNzLAorCS53YWxrX3N0YWNrCQk9IHByaW50X2NvbnRleHRfc3RhY2tfYnAsCiB9OwogCiAjaW5jbHVkZSAiLi4vZHVtcHN0YWNrLmgiCkBAIC0yMzQ2LDcgKzIzNDcsNyBAQAogCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgUEVSRl9DT05URVhUX0tFUk5FTCk7CiAJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCByZWdzLT5pcCk7CiAKLQlkdW1wX3RyYWNlKE5VTEwsIHJlZ3MsIE5VTEwsIDAsICZiYWNrdHJhY2Vfb3BzLCBlbnRyeSk7CisJZHVtcF90cmFjZShOVUxMLCByZWdzLCBOVUxMLCByZWdzLT5icCwgJmJhY2t0cmFjZV9vcHMsIGVudHJ5KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCAwYTBhYTFjLi5jNTZiYzI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCkBAIC0xMDksNiArMTA5LDMwIEBACiAJfQogCXJldHVybiBicDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHByaW50X2NvbnRleHRfc3RhY2spOworCit1bnNpZ25lZCBsb25nCitwcmludF9jb250ZXh0X3N0YWNrX2JwKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kLCBpbnQgKmdyYXBoKQoreworCXN0cnVjdCBzdGFja19mcmFtZSAqZnJhbWUgPSAoc3RydWN0IHN0YWNrX2ZyYW1lICopYnA7CisJdW5zaWduZWQgbG9uZyAqcmV0X2FkZHIgPSAmZnJhbWUtPnJldHVybl9hZGRyZXNzOworCisJd2hpbGUgKHZhbGlkX3N0YWNrX3B0cih0aW5mbywgcmV0X2FkZHIsIHNpemVvZigqcmV0X2FkZHIpLCBlbmQpKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICpyZXRfYWRkcjsKKworCQlpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKGFkZHIpKSB7CisJCQlvcHMtPmFkZHJlc3MoZGF0YSwgYWRkciwgMSk7CisJCQlmcmFtZSA9IGZyYW1lLT5uZXh0X2ZyYW1lOworCQkJcmV0X2FkZHIgPSAmZnJhbWUtPnJldHVybl9hZGRyZXNzOworCQkJcHJpbnRfZnRyYWNlX2dyYXBoX2FkZHIoYWRkciwgZGF0YSwgb3BzLCB0aW5mbywgZ3JhcGgpOworCQl9CisJfQorCXJldHVybiAodW5zaWduZWQgbG9uZylmcmFtZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHByaW50X2NvbnRleHRfc3RhY2tfYnApOwogCiAKIHN0YXRpYyB2b2lkCkBAIC0xNDEsMTAgKzE2NSwxMSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHByaW50X3RyYWNlX29wcyA9IHsKLQkud2FybmluZyA9IHByaW50X3RyYWNlX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sID0gcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wsCi0JLnN0YWNrID0gcHJpbnRfdHJhY2Vfc3RhY2ssCi0JLmFkZHJlc3MgPSBwcmludF90cmFjZV9hZGRyZXNzLAorCS53YXJuaW5nCQk9IHByaW50X3RyYWNlX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sCQk9IHByaW50X3RyYWNlX3dhcm5pbmdfc3ltYm9sLAorCS5zdGFjawkJCT0gcHJpbnRfdHJhY2Vfc3RhY2ssCisJLmFkZHJlc3MJCT0gcHJpbnRfdHJhY2VfYWRkcmVzcywKKwkud2Fsa19zdGFjawkJPSBwcmludF9jb250ZXh0X3N0YWNrLAogfTsKIAogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5oIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5oCmluZGV4IDgxMDg2YzIuLjRmZDE0MjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmgKQEAgLTE0LDEyICsxNCw2IEBACiAjZGVmaW5lIGdldF9icChicCkgYXNtKCJtb3ZxICUlcmJwLCAlMCIgOiAiPXIiIChicCkgOikKICNlbmRpZgogCi1leHRlcm4gdW5zaWduZWQgbG9uZwotcHJpbnRfY29udGV4dF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAotCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKLQkJY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEsCi0JCXVuc2lnbmVkIGxvbmcgKmVuZCwgaW50ICpncmFwaCk7Ci0KIGV4dGVybiB2b2lkCiBzaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCmluZGV4IGUwZWQ0YzcuLmFlNzc1Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCQljb250ZXh0ID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQogCQkJKCh1bnNpZ25lZCBsb25nKXN0YWNrICYgKH4oVEhSRUFEX1NJWkUgLSAxKSkpOwotCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2soY29udGV4dCwgc3RhY2ssIGJwLCBvcHMsIGRhdGEsIE5VTEwsICZncmFwaCk7CisJCWJwID0gb3BzLT53YWxrX3N0YWNrKGNvbnRleHQsIHN0YWNrLCBicCwgb3BzLCBkYXRhLCBOVUxMLCAmZ3JhcGgpOwogCiAJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKiljb250ZXh0LT5wcmV2aW91c19lc3A7CiAJCWlmICghc3RhY2spCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKaW5kZXggYjEzYWY1My4uMGFkOTU5NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpAQCAtMTg4LDggKzE4OCw4IEBACiAJCQlpZiAob3BzLT5zdGFjayhkYXRhLCBpZCkgPCAwKQogCQkJCWJyZWFrOwogCi0JCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2sodGluZm8sIHN0YWNrLCBicCwgb3BzLAotCQkJCQkJIGRhdGEsIGVzdGFja19lbmQsICZncmFwaCk7CisJCQlicCA9IG9wcy0+d2Fsa19zdGFjayh0aW5mbywgc3RhY2ssIGJwLCBvcHMsCisJCQkJCSAgICAgZGF0YSwgZXN0YWNrX2VuZCwgJmdyYXBoKTsKIAkJCW9wcy0+c3RhY2soZGF0YSwgIjxFT0U+Iik7CiAJCQkvKgogCQkJICogV2UgbGluayB0byB0aGUgbmV4dCBzdGFjayB2aWEgdGhlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCmluZGV4IDg0NGMwMmMuLjBjODYzMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCkBAIC0zOTQsNyArMzk0LDcgQEAKIAlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OwogCWVudW0gdWNvZGVfc3RhdGUgdXN0YXRlOwogCi0JaWYgKHVjaS0+dmFsaWQgJiYgdWNpLT5tYykKKwlpZiAodWNpLT52YWxpZCkKIAkJdXN0YXRlID0gbWljcm9jb2RlX3Jlc3VtZV9jcHUoY3B1KTsKIAllbHNlCiAJCXVzdGF0ZSA9IG1pY3JvY29kZV9pbml0X2NwdShjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggYzNlYjIwNy4uOTIyZWVmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC01MywxNyArNTMsMTkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBzYXZlX3N0YWNrX29wcyA9IHsKLQkud2FybmluZyA9IHNhdmVfc3RhY2tfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wgPSBzYXZlX3N0YWNrX3dhcm5pbmdfc3ltYm9sLAotCS5zdGFjayA9IHNhdmVfc3RhY2tfc3RhY2ssCi0JLmFkZHJlc3MgPSBzYXZlX3N0YWNrX2FkZHJlc3MsCisJLndhcm5pbmcJPSBzYXZlX3N0YWNrX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sCT0gc2F2ZV9zdGFja193YXJuaW5nX3N5bWJvbCwKKwkuc3RhY2sJCT0gc2F2ZV9zdGFja19zdGFjaywKKwkuYWRkcmVzcwk9IHNhdmVfc3RhY2tfYWRkcmVzcywKKwkud2Fsa19zdGFjawk9IHByaW50X2NvbnRleHRfc3RhY2ssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHNhdmVfc3RhY2tfb3BzX25vc2NoZWQgPSB7Ci0JLndhcm5pbmcgPSBzYXZlX3N0YWNrX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sID0gc2F2ZV9zdGFja193YXJuaW5nX3N5bWJvbCwKLQkuc3RhY2sgPSBzYXZlX3N0YWNrX3N0YWNrLAotCS5hZGRyZXNzID0gc2F2ZV9zdGFja19hZGRyZXNzX25vc2NoZWQsCisJLndhcm5pbmcJPSBzYXZlX3N0YWNrX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sCT0gc2F2ZV9zdGFja193YXJuaW5nX3N5bWJvbCwKKwkuc3RhY2sJCT0gc2F2ZV9zdGFja19zdGFjaywKKwkuYWRkcmVzcwk9IHNhdmVfc3RhY2tfYWRkcmVzc19ub3NjaGVkLAorCS53YWxrX3N0YWNrCT0gcHJpbnRfY29udGV4dF9zdGFjaywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IGNkNjBjMGIuLjMwNjNhMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC0xMTUwLDYgKzExNTAsNyBAQAogCWhydGltZXJfY2FuY2VsKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAJdXBkYXRlX2RpdmlkZV9jb3VudChhcGljKTsKIAlzdGFydF9hcGljX3RpbWVyKGFwaWMpOworCWFwaWMtPmlycl9wZW5kaW5nID0gdHJ1ZTsKIH0KIAogdm9pZCBfX2t2bV9taWdyYXRlX2FwaWNfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmggYi9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaAppbmRleCBhNjAxNzEzLi41OGEwZjFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaAorKysgYi9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaApAQCAtNDU1LDggKzQ1NSw2IEBACiBzdGF0aWMgdm9pZCBGTkFNRShpbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKQogewogCXN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgaXRlcmF0b3I7Ci0JcHRfZWxlbWVudF90IGdwdGU7Ci0JZ3BhX3QgcHRlX2dwYSA9IC0xOwogCWludCBsZXZlbDsKIAl1NjQgKnNwdGVwOwogCWludCBuZWVkX2ZsdXNoID0gMDsKQEAgLTQ3MCwxMCArNDY4LDYgQEAKIAkJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwgIHx8CiAJCSAgICAoKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCAmJiBpc19sYXJnZV9wdGUoKnNwdGVwKSkpIHx8CiAJCSAgICAoKGxldmVsID09IFBUX1BEUEVfTEVWRUwgJiYgaXNfbGFyZ2VfcHRlKCpzcHRlcCkpKSkgewotCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGVwKSk7Ci0KLQkJCXB0ZV9ncGEgPSAoc3AtPmdmbiA8PCBQQUdFX1NISUZUKTsKLQkJCXB0ZV9ncGEgKz0gKHNwdGVwIC0gc3AtPnNwdCkgKiBzaXplb2YocHRfZWxlbWVudF90KTsKIAogCQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKSB7CiAJCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CkBAIC00OTIsMTggKzQ4Niw2IEBACiAJaWYgKG5lZWRfZmx1c2gpCiAJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKLQotCWlmIChwdGVfZ3BhID09IC0xKQotCQlyZXR1cm47Ci0JaWYgKGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIHB0ZV9ncGEsICZncHRlLAotCQkJCSAgc2l6ZW9mKHB0X2VsZW1lbnRfdCkpKQotCQlyZXR1cm47Ci0JaWYgKGlzX3ByZXNlbnRfZ3B0ZShncHRlKSAmJiAoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7Ci0JCWlmIChtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1KSkKLQkJCXJldHVybjsKLQkJa3ZtX21tdV9wdGVfd3JpdGUodmNwdSwgcHRlX2dwYSwgKGNvbnN0IHU4ICopJmdwdGUsCi0JCQkJICBzaXplb2YocHRfZWxlbWVudF90KSwgMCk7Ci0JfQogfQogCiBzdGF0aWMgZ3BhX3QgRk5BTUUoZ3ZhX3RvX2dwYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2YWRkcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA5ZDA2ODk2Li42NjUxZGJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0xOTEzLDcgKzE5MTMsOCBAQAogCiAJZXZlbnRzLT5zaXBpX3ZlY3RvciA9IHZjcHUtPmFyY2guc2lwaV92ZWN0b3I7CiAKLQlldmVudHMtPmZsYWdzID0gMDsKKwlldmVudHMtPmZsYWdzID0gKEtWTV9WQ1BVRVZFTlRfVkFMSURfTk1JX1BFTkRJTkcKKwkJCSB8IEtWTV9WQ1BVRVZFTlRfVkFMSURfU0lQSV9WRUNUT1IpOwogCiAJdmNwdV9wdXQodmNwdSk7CiB9CkBAIC0xOTIxLDcgKzE5MjIsOCBAQAogc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1X2V2ZW50cyAqZXZlbnRzKQogewotCWlmIChldmVudHMtPmZsYWdzKQorCWlmIChldmVudHMtPmZsYWdzICYgfihLVk1fVkNQVUVWRU5UX1ZBTElEX05NSV9QRU5ESU5HCisJCQkgICAgICB8IEtWTV9WQ1BVRVZFTlRfVkFMSURfU0lQSV9WRUNUT1IpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZjcHVfbG9hZCh2Y3B1KTsKQEAgLTE5MzgsMTAgKzE5NDAsMTIgQEAKIAkJa3ZtX3BpY19jbGVhcl9pc3JfYWNrKHZjcHUtPmt2bSk7CiAKIAl2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCA9IGV2ZW50cy0+bm1pLmluamVjdGVkOwotCXZjcHUtPmFyY2gubm1pX3BlbmRpbmcgPSBldmVudHMtPm5taS5wZW5kaW5nOworCWlmIChldmVudHMtPmZsYWdzICYgS1ZNX1ZDUFVFVkVOVF9WQUxJRF9OTUlfUEVORElORykKKwkJdmNwdS0+YXJjaC5ubWlfcGVuZGluZyA9IGV2ZW50cy0+bm1pLnBlbmRpbmc7CiAJa3ZtX3g4Nl9vcHMtPnNldF9ubWlfbWFzayh2Y3B1LCBldmVudHMtPm5taS5tYXNrZWQpOwogCi0JdmNwdS0+YXJjaC5zaXBpX3ZlY3RvciA9IGV2ZW50cy0+c2lwaV92ZWN0b3I7CisJaWYgKGV2ZW50cy0+ZmxhZ3MgJiBLVk1fVkNQVUVWRU5UX1ZBTElEX1NJUElfVkVDVE9SKQorCQl2Y3B1LT5hcmNoLnNpcGlfdmVjdG9yID0gZXZlbnRzLT5zaXBpX3ZlY3RvcjsKIAogCXZjcHVfcHV0KHZjcHUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYyBiL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IDA0NDg5N2IuLjM4NTUwOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCkBAIC00MSwxMCArNDEsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzdGFja3RyYWNlX29wcyBiYWNrdHJhY2Vfb3BzID0gewotCS53YXJuaW5nID0gYmFja3RyYWNlX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sID0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAotCS5zdGFjayA9IGJhY2t0cmFjZV9zdGFjaywKLQkuYWRkcmVzcyA9IGJhY2t0cmFjZV9hZGRyZXNzLAorCS53YXJuaW5nCT0gYmFja3RyYWNlX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAorCS5zdGFjawkJPSBiYWNrdHJhY2Vfc3RhY2ssCisJLmFkZHJlc3MJPSBiYWNrdHJhY2VfYWRkcmVzcywKKwkud2Fsa19zdGFjawk9IHByaW50X2NvbnRleHRfc3RhY2ssCiB9OwogCiBzdHJ1Y3QgZnJhbWVfaGVhZCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYyBiL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCmluZGV4IDE0NWRmMDAuLmY5MzlkNjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCisrKyBiL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCkBAIC01MSw3ICs1MSw3IEBACiAJfQogfQogCi12b2lkIF9faW5pdCB1cGRhdGVfcmVzKHN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvLCBzaXplX3Qgc3RhcnQsCit2b2lkIF9fZGV2aW5pdCB1cGRhdGVfcmVzKHN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvLCBzaXplX3Qgc3RhcnQsCiAJCQkgICAgICBzaXplX3QgZW5kLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgbWVyZ2UpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstYmFycmllci5jIGIvYmxvY2svYmxrLWJhcnJpZXIuYwppbmRleCA4ODczYjliLi44NjE4ZDg5IDEwMDY0NAotLS0gYS9ibG9jay9ibGstYmFycmllci5jCisrKyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKQEAgLTQwMiw3ICs0MDIsNyBAQAogCQkgKiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgbmVlZC4gIElmIHdlJ2xsIGV2ZXIgbmVlZAogCQkgKiBtb3JlIHRoZSBpbnRlcmZhY2Ugd2lsbCBuZWVkIHJldmlzaXRpbmcuCiAJCSAqLwotCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCXBhZ2UgPSBhbGxvY19wYWdlKGdmcF9tYXNrIHwgX19HRlBfWkVSTyk7CiAJCWlmICghcGFnZSkKIAkJCWdvdG8gb3V0X2ZyZWVfYmlvOwogCQlpZiAoYmlvX2FkZF9wY19wYWdlKHEsIGJpbywgcGFnZSwgc2VjdG9yX3NpemUsIDApIDwgc2VjdG9yX3NpemUpCmRpZmYgLS1naXQgYS9ibG9jay9ibGstc2V0dGluZ3MuYyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCmluZGV4IDZhZTExOGQuLmQ1MmQ0YWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCisrKyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCkBAIC01MDUsMjEgKzUwNSwzMCBAQAogCiAvKioKICAqIGJsa19zdGFja19saW1pdHMgLSBhZGp1c3QgcXVldWVfbGltaXRzIGZvciBzdGFja2VkIGRldmljZXMKLSAqIEB0Ogl0aGUgc3RhY2tpbmcgZHJpdmVyIGxpbWl0cyAodG9wKQotICogQGI6ICB0aGUgdW5kZXJseWluZyBxdWV1ZSBsaW1pdHMgKGJvdHRvbSkKKyAqIEB0Ogl0aGUgc3RhY2tpbmcgZHJpdmVyIGxpbWl0cyAodG9wIGRldmljZSkKKyAqIEBiOiAgdGhlIHVuZGVybHlpbmcgcXVldWUgbGltaXRzIChib3R0b20sIGNvbXBvbmVudCBkZXZpY2UpCiAgKiBAb2Zmc2V0OiAgb2Zmc2V0IHRvIGJlZ2lubmluZyBvZiBkYXRhIHdpdGhpbiBjb21wb25lbnQgZGV2aWNlCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgICBNZXJnZXMgdHdvIHF1ZXVlX2xpbWl0IHN0cnVjdHMuICBSZXR1cm5zIDAgaWYgYWxpZ25tZW50IGRpZG4ndAotICogICAgY2hhbmdlLiAgUmV0dXJucyAtMSBpZiBhZGRpbmcgdGhlIGJvdHRvbSBkZXZpY2UgY2F1c2VkCi0gKiAgICBtaXNhbGlnbm1lbnQuCisgKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgc3RhY2tpbmcgZHJpdmVycyBsaWtlIE1EIGFuZCBETSB0byBlbnN1cmUKKyAqICAgIHRoYXQgYWxsIGNvbXBvbmVudCBkZXZpY2VzIGhhdmUgY29tcGF0aWJsZSBibG9jayBzaXplcyBhbmQKKyAqICAgIGFsaWdubWVudHMuICBUaGUgc3RhY2tpbmcgZHJpdmVyIG11c3QgcHJvdmlkZSBhIHF1ZXVlX2xpbWl0cworICogICAgc3RydWN0ICh0b3ApIGFuZCB0aGVuIGl0ZXJhdGl2ZWx5IGNhbGwgdGhlIHN0YWNraW5nIGZ1bmN0aW9uIGZvcgorICogICAgYWxsIGNvbXBvbmVudCAoYm90dG9tKSBkZXZpY2VzLiAgVGhlIHN0YWNraW5nIGZ1bmN0aW9uIHdpbGwKKyAqICAgIGF0dGVtcHQgdG8gY29tYmluZSB0aGUgdmFsdWVzIGFuZCBlbnN1cmUgcHJvcGVyIGFsaWdubWVudC4KKyAqCisgKiAgICBSZXR1cm5zIDAgaWYgdGhlIHRvcCBhbmQgYm90dG9tIHF1ZXVlX2xpbWl0cyBhcmUgY29tcGF0aWJsZS4gIFRoZQorICogICAgdG9wIGRldmljZSdzIGJsb2NrIHNpemVzIGFuZCBhbGlnbm1lbnQgb2Zmc2V0cyBtYXkgYmUgYWRqdXN0ZWQgdG8KKyAqICAgIGVuc3VyZSBhbGlnbm1lbnQgd2l0aCB0aGUgYm90dG9tIGRldmljZS4gSWYgbm8gY29tcGF0aWJsZSBzaXplcworICogICAgYW5kIGFsaWdubWVudHMgZXhpc3QsIC0xIGlzIHJldHVybmVkIGFuZCB0aGUgcmVzdWx0aW5nIHRvcAorICogICAgcXVldWVfbGltaXRzIHdpbGwgaGF2ZSB0aGUgbWlzYWxpZ25lZCBmbGFnIHNldCB0byBpbmRpY2F0ZSB0aGF0CisgKiAgICB0aGUgYWxpZ25tZW50X29mZnNldCBpcyB1bmRlZmluZWQuCiAgKi8KIGludCBibGtfc3RhY2tfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKnQsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmIsCiAJCSAgICAgc2VjdG9yX3Qgb2Zmc2V0KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSAwOworCXNlY3Rvcl90IGFsaWdubWVudDsKKwl1bnNpZ25lZCBpbnQgdG9wLCBib3R0b207CiAKIAl0LT5tYXhfc2VjdG9ycyA9IG1pbl9ub3RfemVybyh0LT5tYXhfc2VjdG9ycywgYi0+bWF4X3NlY3RvcnMpOwogCXQtPm1heF9od19zZWN0b3JzID0gbWluX25vdF96ZXJvKHQtPm1heF9od19zZWN0b3JzLCBiLT5tYXhfaHdfc2VjdG9ycyk7CkBAIC01MzcsNiArNTQ2LDIyIEBACiAJdC0+bWF4X3NlZ21lbnRfc2l6ZSA9IG1pbl9ub3RfemVybyh0LT5tYXhfc2VnbWVudF9zaXplLAogCQkJCQkgICBiLT5tYXhfc2VnbWVudF9zaXplKTsKIAorCWFsaWdubWVudCA9IHF1ZXVlX2xpbWl0X2FsaWdubWVudF9vZmZzZXQoYiwgb2Zmc2V0KTsKKworCS8qIEJvdHRvbSBkZXZpY2UgaGFzIGRpZmZlcmVudCBhbGlnbm1lbnQuICBDaGVjayB0aGF0IGl0IGlzCisJICogY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHRvcCBhbGlnbm1lbnQuCisJICovCisJaWYgKHQtPmFsaWdubWVudF9vZmZzZXQgIT0gYWxpZ25tZW50KSB7CisKKwkJdG9wID0gbWF4KHQtPnBoeXNpY2FsX2Jsb2NrX3NpemUsIHQtPmlvX21pbikKKwkJCSsgdC0+YWxpZ25tZW50X29mZnNldDsKKwkJYm90dG9tID0gbWF4KGItPnBoeXNpY2FsX2Jsb2NrX3NpemUsIGItPmlvX21pbikgKyBhbGlnbm1lbnQ7CisKKwkJLyogVmVyaWZ5IHRoYXQgdG9wIGFuZCBib3R0b20gaW50ZXJ2YWxzIGxpbmUgdXAgKi8KKwkJaWYgKG1heCh0b3AsIGJvdHRvbSkgJiAobWluKHRvcCwgYm90dG9tKSAtIDEpKQorCQkJdC0+bWlzYWxpZ25lZCA9IDE7CisJfQorCiAJdC0+bG9naWNhbF9ibG9ja19zaXplID0gbWF4KHQtPmxvZ2ljYWxfYmxvY2tfc2l6ZSwKIAkJCQkgICAgYi0+bG9naWNhbF9ibG9ja19zaXplKTsKIApAQCAtNTQ0LDU0ICs1NjksNjQgQEAKIAkJCQkgICAgIGItPnBoeXNpY2FsX2Jsb2NrX3NpemUpOwogCiAJdC0+aW9fbWluID0gbWF4KHQtPmlvX21pbiwgYi0+aW9fbWluKTsKKwl0LT5pb19vcHQgPSBsY20odC0+aW9fb3B0LCBiLT5pb19vcHQpOworCiAJdC0+bm9fY2x1c3RlciB8PSBiLT5ub19jbHVzdGVyOwogCXQtPmRpc2NhcmRfemVyb2VzX2RhdGEgJj0gYi0+ZGlzY2FyZF96ZXJvZXNfZGF0YTsKIAotCS8qIEJvdHRvbSBkZXZpY2Ugb2Zmc2V0IGFsaWduZWQ/ICovCi0JaWYgKG9mZnNldCAmJgotCSAgICAob2Zmc2V0ICYgKGItPnBoeXNpY2FsX2Jsb2NrX3NpemUgLSAxKSkgIT0gYi0+YWxpZ25tZW50X29mZnNldCkgeworCS8qIFBoeXNpY2FsIGJsb2NrIHNpemUgYSBtdWx0aXBsZSBvZiB0aGUgbG9naWNhbCBibG9jayBzaXplPyAqLworCWlmICh0LT5waHlzaWNhbF9ibG9ja19zaXplICYgKHQtPmxvZ2ljYWxfYmxvY2tfc2l6ZSAtIDEpKSB7CisJCXQtPnBoeXNpY2FsX2Jsb2NrX3NpemUgPSB0LT5sb2dpY2FsX2Jsb2NrX3NpemU7CiAJCXQtPm1pc2FsaWduZWQgPSAxOwotCQlyZXQgPSAtMTsKIAl9CiAKLQkvKgotCSAqIFRlbXBvcmFyaWx5IGRpc2FibGUgZGlzY2FyZCBncmFudWxhcml0eS4gSXQncyBjdXJyZW50bHkgYnVnZ3kKLQkgKiBzaW5jZSB3ZSBkZWZhdWx0IHRvIDAgZm9yIGRpc2NhcmRfZ3JhbnVsYXJpdHksIGhlbmNlIHRoaXMKLQkgKiAiZmFpbHVyZSIgd2lsbCBhbHdheXMgdHJpZ2dlciBmb3Igbm9uLXplcm8gb2Zmc2V0cy4KLQkgKi8KLSNpZiAwCi0JaWYgKG9mZnNldCAmJgotCSAgICAob2Zmc2V0ICYgKGItPmRpc2NhcmRfZ3JhbnVsYXJpdHkgLSAxKSkgIT0gYi0+ZGlzY2FyZF9hbGlnbm1lbnQpIHsKLQkJdC0+ZGlzY2FyZF9taXNhbGlnbmVkID0gMTsKLQkJcmV0ID0gLTE7Ci0JfQotI2VuZGlmCi0KLQkvKiBJZiB0b3AgaGFzIG5vIGFsaWdubWVudCBvZmZzZXQsIGluaGVyaXQgZnJvbSBib3R0b20gKi8KLQlpZiAoIXQtPmFsaWdubWVudF9vZmZzZXQpCi0JCXQtPmFsaWdubWVudF9vZmZzZXQgPQotCQkJYi0+YWxpZ25tZW50X29mZnNldCAmIChiLT5waHlzaWNhbF9ibG9ja19zaXplIC0gMSk7Ci0KLQlpZiAoIXQtPmRpc2NhcmRfYWxpZ25tZW50KQotCQl0LT5kaXNjYXJkX2FsaWdubWVudCA9Ci0JCQliLT5kaXNjYXJkX2FsaWdubWVudCAmIChiLT5kaXNjYXJkX2dyYW51bGFyaXR5IC0gMSk7Ci0KLQkvKiBUb3AgZGV2aWNlIGFsaWduZWQgb24gbG9naWNhbCBibG9jayBib3VuZGFyeT8gKi8KLQlpZiAodC0+YWxpZ25tZW50X29mZnNldCAmICh0LT5sb2dpY2FsX2Jsb2NrX3NpemUgLSAxKSkgeworCS8qIE1pbmltdW0gSS9PIGEgbXVsdGlwbGUgb2YgdGhlIHBoeXNpY2FsIGJsb2NrIHNpemU/ICovCisJaWYgKHQtPmlvX21pbiAmICh0LT5waHlzaWNhbF9ibG9ja19zaXplIC0gMSkpIHsKKwkJdC0+aW9fbWluID0gdC0+cGh5c2ljYWxfYmxvY2tfc2l6ZTsKIAkJdC0+bWlzYWxpZ25lZCA9IDE7Ci0JCXJldCA9IC0xOwogCX0KIAotCS8qIEZpbmQgbGNtKCkgb2Ygb3B0aW1hbCBJL08gc2l6ZSBhbmQgZ3JhbnVsYXJpdHkgKi8KLQl0LT5pb19vcHQgPSBsY20odC0+aW9fb3B0LCBiLT5pb19vcHQpOwotCXQtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSBsY20odC0+ZGlzY2FyZF9ncmFudWxhcml0eSwKLQkJCQkgICAgIGItPmRpc2NhcmRfZ3JhbnVsYXJpdHkpOworCS8qIE9wdGltYWwgSS9PIGEgbXVsdGlwbGUgb2YgdGhlIHBoeXNpY2FsIGJsb2NrIHNpemU/ICovCisJaWYgKHQtPmlvX29wdCAmICh0LT5waHlzaWNhbF9ibG9ja19zaXplIC0gMSkpIHsKKwkJdC0+aW9fb3B0ID0gMDsKKwkJdC0+bWlzYWxpZ25lZCA9IDE7CisJfQogCi0JLyogVmVyaWZ5IHRoYXQgb3B0aW1hbCBJL08gc2l6ZSBpcyBhIG11bHRpcGxlIG9mIGlvX21pbiAqLwotCWlmICh0LT5pb19taW4gJiYgdC0+aW9fb3B0ICUgdC0+aW9fbWluKQotCQlyZXQgPSAtMTsKKwkvKiBGaW5kIGxvd2VzdCBjb21tb24gYWxpZ25tZW50X29mZnNldCAqLworCXQtPmFsaWdubWVudF9vZmZzZXQgPSBsY20odC0+YWxpZ25tZW50X29mZnNldCwgYWxpZ25tZW50KQorCQkmIChtYXgodC0+cGh5c2ljYWxfYmxvY2tfc2l6ZSwgdC0+aW9fbWluKSAtIDEpOwogCi0JcmV0dXJuIHJldDsKKwkvKiBWZXJpZnkgdGhhdCBuZXcgYWxpZ25tZW50X29mZnNldCBpcyBvbiBhIGxvZ2ljYWwgYmxvY2sgYm91bmRhcnkgKi8KKwlpZiAodC0+YWxpZ25tZW50X29mZnNldCAmICh0LT5sb2dpY2FsX2Jsb2NrX3NpemUgLSAxKSkKKwkJdC0+bWlzYWxpZ25lZCA9IDE7CisKKwkvKiBEaXNjYXJkIGFsaWdubWVudCBhbmQgZ3JhbnVsYXJpdHkgKi8KKwlpZiAoYi0+ZGlzY2FyZF9ncmFudWxhcml0eSkgeworCQl1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHkgPSBiLT5kaXNjYXJkX2dyYW51bGFyaXR5OworCQlvZmZzZXQgJj0gZ3JhbnVsYXJpdHkgLSAxOworCisJCWFsaWdubWVudCA9IChncmFudWxhcml0eSArIGItPmRpc2NhcmRfYWxpZ25tZW50IC0gb2Zmc2V0KQorCQkJJiAoZ3JhbnVsYXJpdHkgLSAxKTsKKworCQlpZiAodC0+ZGlzY2FyZF9ncmFudWxhcml0eSAhPSAwICYmCisJCSAgICB0LT5kaXNjYXJkX2FsaWdubWVudCAhPSBhbGlnbm1lbnQpIHsKKwkJCXRvcCA9IHQtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgKyB0LT5kaXNjYXJkX2FsaWdubWVudDsKKwkJCWJvdHRvbSA9IGItPmRpc2NhcmRfZ3JhbnVsYXJpdHkgKyBhbGlnbm1lbnQ7CisKKwkJCS8qIFZlcmlmeSB0aGF0IHRvcCBhbmQgYm90dG9tIGludGVydmFscyBsaW5lIHVwICovCisJCQlpZiAobWF4KHRvcCwgYm90dG9tKSAmIChtaW4odG9wLCBib3R0b20pIC0gMSkpCisJCQkJdC0+ZGlzY2FyZF9taXNhbGlnbmVkID0gMTsKKwkJfQorCisJCXQtPm1heF9kaXNjYXJkX3NlY3RvcnMgPSBtaW5fbm90X3plcm8odC0+bWF4X2Rpc2NhcmRfc2VjdG9ycywKKwkJCQkJCSAgICAgIGItPm1heF9kaXNjYXJkX3NlY3RvcnMpOworCQl0LT5kaXNjYXJkX2dyYW51bGFyaXR5ID0gbWF4KHQtPmRpc2NhcmRfZ3JhbnVsYXJpdHksCisJCQkJCSAgICAgYi0+ZGlzY2FyZF9ncmFudWxhcml0eSk7CisJCXQtPmRpc2NhcmRfYWxpZ25tZW50ID0gbGNtKHQtPmRpc2NhcmRfYWxpZ25tZW50LCBhbGlnbm1lbnQpICYKKwkJCSh0LT5kaXNjYXJkX2dyYW51bGFyaXR5IC0gMSk7CisJfQorCisJcmV0dXJuIHQtPm1pc2FsaWduZWQgPyAtMSA6IDA7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19zdGFja19saW1pdHMpOwogCmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCBlMmY4MDQ2Li45MThjN2ZkIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTIwOCw4ICsyMDgsNiBAQAogCS8qIFJvb3Qgc2VydmljZSB0cmVlIGZvciBjZnFfZ3JvdXBzICovCiAJc3RydWN0IGNmcV9yYl9yb290IGdycF9zZXJ2aWNlX3RyZWU7CiAJc3RydWN0IGNmcV9ncm91cCByb290X2dyb3VwOwotCS8qIE51bWJlciBvZiBhY3RpdmUgY2ZxIGdyb3VwcyBvbiBncm91cCBzZXJ2aWNlIHRyZWUgKi8KLQlpbnQgbnJfZ3JvdXBzOwogCiAJLyoKIAkgKiBUaGUgcHJpb3JpdHkgY3VycmVudGx5IGJlaW5nIHNlcnZlZApAQCAtMjk0LDggKzI5Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX3JiX3Jvb3QgKnNlcnZpY2VfdHJlZV9mb3Ioc3RydWN0IGNmcV9ncm91cCAqY2ZxZywKIAkJCQkJICAgIGVudW0gd2xfcHJpb190IHByaW8sCi0JCQkJCSAgICBlbnVtIHdsX3R5cGVfdCB0eXBlLAotCQkJCQkgICAgc3RydWN0IGNmcV9kYXRhICpjZnFkKQorCQkJCQkgICAgZW51bSB3bF90eXBlX3QgdHlwZSkKIHsKIAlpZiAoIWNmcWcpCiAJCXJldHVybiBOVUxMOwpAQCAtODQyLDcgKzgzOSw2IEBACiAKIAlfX2NmcV9ncm91cF9zZXJ2aWNlX3RyZWVfYWRkKHN0LCBjZnFnKTsKIAljZnFnLT5vbl9zdCA9IHRydWU7Ci0JY2ZxZC0+bnJfZ3JvdXBzKys7CiAJc3QtPnRvdGFsX3dlaWdodCArPSBjZnFnLT53ZWlnaHQ7CiB9CiAKQEAgLTg2Myw3ICs4NTksNiBAQAogCiAJY2ZxX2xvZ19jZnFnKGNmcWQsIGNmcWcsICJkZWxfZnJvbV9yciBncm91cCIpOwogCWNmcWctPm9uX3N0ID0gZmFsc2U7Ci0JY2ZxZC0+bnJfZ3JvdXBzLS07CiAJc3QtPnRvdGFsX3dlaWdodCAtPSBjZnFnLT53ZWlnaHQ7CiAJaWYgKCFSQl9FTVBUWV9OT0RFKCZjZnFnLT5yYl9ub2RlKSkKIAkJY2ZxX3JiX2VyYXNlKCZjZnFnLT5yYl9ub2RlLCBzdCk7CkBAIC0xMTUwLDcgKzExNDUsNyBAQAogI2VuZGlmCiAKIAlzZXJ2aWNlX3RyZWUgPSBzZXJ2aWNlX3RyZWVfZm9yKGNmcXEtPmNmcWcsIGNmcXFfcHJpbyhjZnFxKSwKLQkJCQkJCWNmcXFfdHlwZShjZnFxKSwgY2ZxZCk7CisJCQkJCQljZnFxX3R5cGUoY2ZxcSkpOwogCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkgewogCQlyYl9rZXkgPSBDRlFfSURMRV9ERUxBWTsKIAkJcGFyZW50ID0gcmJfbGFzdCgmc2VydmljZV90cmVlLT5yYik7CkBAIC0xNTEzLDkgKzE1MDgsNiBAQAogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CiAKLQkvKiBEZW55IG1lcmdlIGlmIGJpbyBhbmQgcnEgZG9uJ3QgYmVsb25nIHRvIHNhbWUgY2ZxIGdyb3VwICovCi0JaWYgKChSUV9DRlFRKHJxKSktPmNmcWcgIT0gY2ZxX2dldF9jZnFnKGNmcWQsIDApKQotCQlyZXR1cm4gZmFsc2U7CiAJLyoKIAkgKiBEaXNhbGxvdyBtZXJnZSBvZiBhIHN5bmMgYmlvIGludG8gYW4gYXN5bmMgcmVxdWVzdC4KIAkgKi8KQEAgLTE2MTYsNyArMTYwOCw3IEBACiB7CiAJc3RydWN0IGNmcV9yYl9yb290ICpzZXJ2aWNlX3RyZWUgPQogCQlzZXJ2aWNlX3RyZWVfZm9yKGNmcWQtPnNlcnZpbmdfZ3JvdXAsIGNmcWQtPnNlcnZpbmdfcHJpbywKLQkJCQkJY2ZxZC0+c2VydmluZ190eXBlLCBjZnFkKTsKKwkJCQkJY2ZxZC0+c2VydmluZ190eXBlKTsKIAogCWlmICghY2ZxZC0+cnFfcXVldWVkKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE2NzUsMTMgKzE2NjcsMTcgQEAKICNkZWZpbmUgQ0ZRUV9TRUVLWShjZnFxKQkoKGNmcXEpLT5zZWVrX21lYW4gPiBDRlFRX1NFRUtfVEhSKQogCiBzdGF0aWMgaW5saW5lIGludCBjZnFfcnFfY2xvc2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpycSkKKwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJvb2wgZm9yX3ByZWVtcHQpCiB7CiAJc2VjdG9yX3Qgc2Rpc3QgPSBjZnFxLT5zZWVrX21lYW47CiAKIAlpZiAoIXNhbXBsZV92YWxpZChjZnFxLT5zZWVrX3NhbXBsZXMpKQogCQlzZGlzdCA9IENGUVFfU0VFS19USFI7CiAKKwkvKiBpZiBzZWVrX21lYW4gaXMgYmlnLCB1c2luZyBpdCBhcyBjbG9zZSBjcml0ZXJpYSBpcyBtZWFuaW5nbGVzcyAqLworCWlmIChzZGlzdCA+IENGUVFfU0VFS19USFIgJiYgIWZvcl9wcmVlbXB0KQorCQlzZGlzdCA9IENGUVFfU0VFS19USFI7CisKIAlyZXR1cm4gY2ZxX2Rpc3RfZnJvbV9sYXN0KGNmcWQsIHJxKSA8PSBzZGlzdDsKIH0KIApAQCAtMTcwOSw3ICsxNzA1LDcgQEAKIAkgKiB3aWxsIGNvbnRhaW4gdGhlIGNsb3Nlc3Qgc2VjdG9yLgogCSAqLwogCV9fY2ZxcSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGNmcV9xdWV1ZSwgcF9ub2RlKTsKLQlpZiAoY2ZxX3JxX2Nsb3NlKGNmcWQsIGN1cl9jZnFxLCBfX2NmcXEtPm5leHRfcnEpKQorCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgY3VyX2NmcXEsIF9fY2ZxcS0+bmV4dF9ycSwgZmFsc2UpKQogCQlyZXR1cm4gX19jZnFxOwogCiAJaWYgKGJsa19ycV9wb3MoX19jZnFxLT5uZXh0X3JxKSA8IHNlY3RvcikKQEAgLTE3MjAsNyArMTcxNiw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJX19jZnFxID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGNmcV9xdWV1ZSwgcF9ub2RlKTsKLQlpZiAoY2ZxX3JxX2Nsb3NlKGNmcWQsIGN1cl9jZnFxLCBfX2NmcXEtPm5leHRfcnEpKQorCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgY3VyX2NmcXEsIF9fY2ZxcS0+bmV4dF9ycSwgZmFsc2UpKQogCQlyZXR1cm4gX19jZnFxOwogCiAJcmV0dXJuIE5VTEw7CkBAIC0xOTYzLDggKzE5NTksNyBAQAogfQogCiBzdGF0aWMgZW51bSB3bF90eXBlX3QgY2ZxX2Nob29zZV93bChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCi0JCQkJc3RydWN0IGNmcV9ncm91cCAqY2ZxZywgZW51bSB3bF9wcmlvX3QgcHJpbywKLQkJCQlib29sIHByaW9fY2hhbmdlZCkKKwkJCQlzdHJ1Y3QgY2ZxX2dyb3VwICpjZnFnLCBlbnVtIHdsX3ByaW9fdCBwcmlvKQogewogCXN0cnVjdCBjZnFfcXVldWUgKnF1ZXVlOwogCWludCBpOwpAQCAtMTk3MiwyNCArMTk2Nyw5IEBACiAJdW5zaWduZWQgbG9uZyBsb3dlc3Rfa2V5ID0gMDsKIAllbnVtIHdsX3R5cGVfdCBjdXJfYmVzdCA9IFNZTkNfTk9JRExFX1dPUktMT0FEOwogCi0JaWYgKHByaW9fY2hhbmdlZCkgewotCQkvKgotCQkgKiBXaGVuIHByaW9yaXRpZXMgc3dpdGNoZWQsIHdlIHByZWZlciBzdGFydGluZwotCQkgKiBmcm9tIFNZTkNfTk9JRExFIChmaXJzdCBjaG9pY2UpLCBvciBqdXN0IFNZTkMKLQkJICogb3ZlciBBU1lOQwotCQkgKi8KLQkJaWYgKHNlcnZpY2VfdHJlZV9mb3IoY2ZxZywgcHJpbywgY3VyX2Jlc3QsIGNmcWQpLT5jb3VudCkKLQkJCXJldHVybiBjdXJfYmVzdDsKLQkJY3VyX2Jlc3QgPSBTWU5DX1dPUktMT0FEOwotCQlpZiAoc2VydmljZV90cmVlX2ZvcihjZnFnLCBwcmlvLCBjdXJfYmVzdCwgY2ZxZCktPmNvdW50KQotCQkJcmV0dXJuIGN1cl9iZXN0OwotCi0JCXJldHVybiBBU1lOQ19XT1JLTE9BRDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0JCS8qIG90aGVyd2lzZSwgc2VsZWN0IHRoZSBvbmUgd2l0aCBsb3dlc3QgcmJfa2V5ICovCi0JCXF1ZXVlID0gY2ZxX3JiX2ZpcnN0KHNlcnZpY2VfdHJlZV9mb3IoY2ZxZywgcHJpbywgaSwgY2ZxZCkpOworCWZvciAoaSA9IDA7IGkgPD0gU1lOQ19XT1JLTE9BRDsgKytpKSB7CisJCS8qIHNlbGVjdCB0aGUgb25lIHdpdGggbG93ZXN0IHJiX2tleSAqLworCQlxdWV1ZSA9IGNmcV9yYl9maXJzdChzZXJ2aWNlX3RyZWVfZm9yKGNmcWcsIHByaW8sIGkpKTsKIAkJaWYgKHF1ZXVlICYmCiAJCSAgICAoIWtleV92YWxpZCB8fCB0aW1lX2JlZm9yZShxdWV1ZS0+cmJfa2V5LCBsb3dlc3Rfa2V5KSkpIHsKIAkJCWxvd2VzdF9rZXkgPSBxdWV1ZS0+cmJfa2V5OwpAQCAtMjAwMyw4ICsxOTgzLDYgQEAKIAogc3RhdGljIHZvaWQgY2hvb3NlX3NlcnZpY2VfdHJlZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfZ3JvdXAgKmNmcWcpCiB7Ci0JZW51bSB3bF9wcmlvX3QgcHJldmlvdXNfcHJpbyA9IGNmcWQtPnNlcnZpbmdfcHJpbzsKLQlib29sIHByaW9fY2hhbmdlZDsKIAl1bnNpZ25lZCBzbGljZTsKIAl1bnNpZ25lZCBjb3VudDsKIAlzdHJ1Y3QgY2ZxX3JiX3Jvb3QgKnN0OwpAQCAtMjAzMiwyNCArMjAxMCwxOSBAQAogCSAqIChTWU5DLCBTWU5DX05PSURMRSwgQVNZTkMpLCBhbmQgdG8gY29tcHV0ZSBhIHdvcmtsb2FkCiAJICogZXhwaXJhdGlvbiB0aW1lCiAJICovCi0JcHJpb19jaGFuZ2VkID0gKGNmcWQtPnNlcnZpbmdfcHJpbyAhPSBwcmV2aW91c19wcmlvKTsKLQlzdCA9IHNlcnZpY2VfdHJlZV9mb3IoY2ZxZywgY2ZxZC0+c2VydmluZ19wcmlvLCBjZnFkLT5zZXJ2aW5nX3R5cGUsCi0JCQkJY2ZxZCk7CisJc3QgPSBzZXJ2aWNlX3RyZWVfZm9yKGNmcWcsIGNmcWQtPnNlcnZpbmdfcHJpbywgY2ZxZC0+c2VydmluZ190eXBlKTsKIAljb3VudCA9IHN0LT5jb3VudDsKIAogCS8qCi0JICogSWYgcHJpb3JpdHkgZGlkbid0IGNoYW5nZSwgY2hlY2sgd29ya2xvYWQgZXhwaXJhdGlvbiwKLQkgKiBhbmQgdGhhdCB3ZSBzdGlsbCBoYXZlIG90aGVyIHF1ZXVlcyByZWFkeQorCSAqIGNoZWNrIHdvcmtsb2FkIGV4cGlyYXRpb24sIGFuZCB0aGF0IHdlIHN0aWxsIGhhdmUgb3RoZXIgcXVldWVzIHJlYWR5CiAJICovCi0JaWYgKCFwcmlvX2NoYW5nZWQgJiYgY291bnQgJiYKLQkgICAgIXRpbWVfYWZ0ZXIoamlmZmllcywgY2ZxZC0+d29ya2xvYWRfZXhwaXJlcykpCisJaWYgKGNvdW50ICYmICF0aW1lX2FmdGVyKGppZmZpZXMsIGNmcWQtPndvcmtsb2FkX2V4cGlyZXMpKQogCQlyZXR1cm47CiAKIAkvKiBvdGhlcndpc2Ugc2VsZWN0IG5ldyB3b3JrbG9hZCB0eXBlICovCiAJY2ZxZC0+c2VydmluZ190eXBlID0KLQkJY2ZxX2Nob29zZV93bChjZnFkLCBjZnFnLCBjZnFkLT5zZXJ2aW5nX3ByaW8sIHByaW9fY2hhbmdlZCk7Ci0Jc3QgPSBzZXJ2aWNlX3RyZWVfZm9yKGNmcWcsIGNmcWQtPnNlcnZpbmdfcHJpbywgY2ZxZC0+c2VydmluZ190eXBlLAotCQkJCWNmcWQpOworCQljZnFfY2hvb3NlX3dsKGNmcWQsIGNmcWcsIGNmcWQtPnNlcnZpbmdfcHJpbyk7CisJc3QgPSBzZXJ2aWNlX3RyZWVfZm9yKGNmcWcsIGNmcWQtPnNlcnZpbmdfcHJpbywgY2ZxZC0+c2VydmluZ190eXBlKTsKIAljb3VudCA9IHN0LT5jb3VudDsKIAogCS8qCkBAIC0zMTQzLDcgKzMxMTYsNyBAQAogCSAqIGlmIHRoaXMgcmVxdWVzdCBpcyBhcy1nb29kIGFzIG9uZSB3ZSB3b3VsZCBleHBlY3QgZnJvbSB0aGUKIAkgKiBjdXJyZW50IGNmcXEsIGxldCBpdCBwcmVlbXB0CiAJICovCi0JaWYgKGNmcV9ycV9jbG9zZShjZnFkLCBjZnFxLCBycSkpCisJaWYgKGNmcV9ycV9jbG9zZShjZnFkLCBjZnFxLCBycSwgdHJ1ZSkpCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L3JhaWQ2dGVzdC5jIGIvY3J5cHRvL2FzeW5jX3R4L3JhaWQ2dGVzdC5jCmluZGV4IDNlYzI3YzcuLmY4NGY2YjQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9yYWlkNnRlc3QuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvcmFpZDZ0ZXN0LmMKQEAgLTIxNCw2ICsyMTQsMTMgQEAKIAkJZXJyICs9IHRlc3QoNCwgJnRlc3RzKTsKIAlpZiAoTkRJU0tTID4gNSkKIAkJZXJyICs9IHRlc3QoNSwgJnRlc3RzKTsKKwkvKiB0aGUgMTEgYW5kIDEyIGRpc2sgY2FzZXMgYXJlIHNwZWNpYWwgZm9yIGlvYXRkbWEgKHAtZGlzYWJsZWQKKwkgKiBxLWNvbnRpbnVhdGlvbiB3aXRob3V0IGV4dGVuZGVkIGRlc2NyaXB0b3IpCisJICovCisJaWYgKE5ESVNLUyA+IDEyKSB7CisJCWVyciArPSB0ZXN0KDExLCAmdGVzdHMpOworCQllcnIgKz0gdGVzdCgxMiwgJnRlc3RzKTsKKwl9CiAJZXJyICs9IHRlc3QoTkRJU0tTLCAmdGVzdHMpOwogCiAJcHIoIlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggOGEwNzM2My4uMzY4YWU2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMjgsNyArMjgsNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVzc2FnZS9mdXNpb24vS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL2llZWUxMzk0L0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lc3NhZ2UvaTJvL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCBjN2IxMGI0Li42NmNjM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCkBAIC0zMiw2ICszMiw3IEBACiAjCiBhY3BpLXkJCQkJKz0gYnVzLm8gZ2x1ZS5vCiBhY3BpLXkJCQkJKz0gc2Nhbi5vCithY3BpLXkJCQkJKz0gcHJvY2Vzc29yX3BkYy5vCiBhY3BpLXkJCQkJKz0gZWMubwogYWNwaS0kKENPTkZJR19BQ1BJX0RPQ0spCSs9IGRvY2subwogYWNwaS15CQkJCSs9IHBjaV9yb290Lm8gcGNpX2xpbmsubyBwY2lfaXJxLm8gcGNpX2JpbmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jIGIvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCmluZGV4IDIzZTVhMDUuLjI4MTVkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKQEAgLTE4NSw2ICsxODUsMTIgQEAKIAlhY3BpX29zaV9zZXR1cCgiIVdpbmRvd3MgMjAwNiIpOwogCXJldHVybiAwOwogfQorc3RhdGljIGludCBfX2luaXQgZG1pX2Rpc2FibGVfb3NpX3dpbjcoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiRE1JIGRldGVjdGVkOiAlc1xuIiwgZC0+aWRlbnQpOworCWFjcGlfb3NpX3NldHVwKCIhV2luZG93cyAyMDA5Iik7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBhY3BpX29zaV9kbWlfdGFibGVbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTIxMSw2ICsyMTcsMTQgQEAKIAkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlNvbnkgVkdOLVNSMjkwSiIpLAogCQl9LAogCX0sCisJeworCS5jYWxsYmFjayA9IGRtaV9kaXNhYmxlX29zaV93aW43LAorCS5pZGVudCA9ICJBU1VTIEs1MElKIiwKKwkubWF0Y2hlcyA9IHsKKwkJICAgICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIEluYy4iKSwKKwkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIks1MElKIiksCisJCX0sCisJfSwKIAogCS8qCiAJICogQklPUyBpbnZvY2F0aW9uIG9mIF9PU0koTGludXgpIGlzIGFsbW9zdCBhbHdheXMgYSBCSU9TIGJ1Zy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCA2NWY3ZTMzLi5jZjc2MWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC0zOTcsNiArMzk3LDcgQEAKIAl1bmlvbiBhY3BpX29iamVjdCAqb3V0X29iajsKIAl1OCB1dWlkWzE2XTsKIAl1MzIgZXJyb3JzOworCXN0cnVjdCBhY3BpX2J1ZmZlciBvdXRwdXQgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwogCiAJaWYgKCFjb250ZXh0KQogCQlyZXR1cm4gQUVfRVJST1I7CkBAIC00MTksMTYgKzQyMCwxNiBAQAogCWluX3BhcmFtc1szXS5idWZmZXIubGVuZ3RoIAk9IGNvbnRleHQtPmNhcC5sZW5ndGg7CiAJaW5fcGFyYW1zWzNdLmJ1ZmZlci5wb2ludGVyIAk9IGNvbnRleHQtPmNhcC5wb2ludGVyOwogCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX09TQyIsICZpbnB1dCwgJmNvbnRleHQtPnJldCk7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX09TQyIsICZpbnB1dCwgJm91dHB1dCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gc3RhdHVzOwogCi0JLyogcmV0dXJuIGJ1ZmZlciBzaG91bGQgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgY2FwIGJ1ZmZlciAqLwotCWlmIChjb250ZXh0LT5yZXQubGVuZ3RoICE9IGNvbnRleHQtPmNhcC5sZW5ndGgpCisJaWYgKCFvdXRwdXQubGVuZ3RoKQogCQlyZXR1cm4gQUVfTlVMTF9PQkpFQ1Q7CiAKLQlvdXRfb2JqID0gY29udGV4dC0+cmV0LnBvaW50ZXI7Ci0JaWYgKG91dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKwlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSCisJCXx8IG91dF9vYmotPmJ1ZmZlci5sZW5ndGggIT0gY29udGV4dC0+Y2FwLmxlbmd0aCkgewogCQlhY3BpX3ByaW50X29zY19lcnJvcihoYW5kbGUsIGNvbnRleHQsCiAJCQkiX09TQyBldmFsdWF0aW9uIHJldHVybmVkIHdyb25nIHR5cGUiKTsKIAkJc3RhdHVzID0gQUVfVFlQRTsKQEAgLTQ1NywxMSArNDU4LDIwIEBACiAJCWdvdG8gb3V0X2tmcmVlOwogCX0KIG91dF9zdWNjZXNzOgotCXJldHVybiBBRV9PSzsKKwljb250ZXh0LT5yZXQubGVuZ3RoID0gb3V0X29iai0+YnVmZmVyLmxlbmd0aDsKKwljb250ZXh0LT5yZXQucG9pbnRlciA9IGttYWxsb2MoY29udGV4dC0+cmV0Lmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb250ZXh0LT5yZXQucG9pbnRlcikgeworCQlzdGF0dXMgPSAgQUVfTk9fTUVNT1JZOworCQlnb3RvIG91dF9rZnJlZTsKKwl9CisJbWVtY3B5KGNvbnRleHQtPnJldC5wb2ludGVyLCBvdXRfb2JqLT5idWZmZXIucG9pbnRlciwKKwkJY29udGV4dC0+cmV0Lmxlbmd0aCk7CisJc3RhdHVzID0gIEFFX09LOwogCiBvdXRfa2ZyZWU6Ci0Ja2ZyZWUoY29udGV4dC0+cmV0LnBvaW50ZXIpOwotCWNvbnRleHQtPnJldC5wb2ludGVyID0gTlVMTDsKKwlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykKKwkJY29udGV4dC0+cmV0LnBvaW50ZXIgPSBOVUxMOwogCXJldHVybiBzdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfcnVuX29zYyk7CkBAIC04ODgsNiArODk4LDggQEAKIAkJZ290byBlcnJvcjE7CiAJfQogCisJYWNwaV9lYXJseV9wcm9jZXNzb3Jfc2V0X3BkYygpOworCiAJLyoKIAkgKiBNYXliZSBFQyByZWdpb24gaXMgcmVxdWlyZWQgYXQgYnVzX3NjYW4vYWNwaV9nZXRfZGV2aWNlcy4gU28gaXQKIAkgKiBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIGl0IGFzIGVhcmx5IGFzIHBvc3NpYmxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCA3NWIxNDdmLi5mZDE4MDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtOTE2LDYgKzkxNiw3IEBACiAvKiBNU0kgRUMgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQsIGVuYWJsZSBpdCAqLwogc3RhdGljIGludCBlY19mbGFnX21zaShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCiB7CisJcHJpbnRrKEtFUk5fREVCVUcgUFJFRklYICJEZXRlY3RlZCBNU0kgaGFyZHdhcmUsIGVuYWJsaW5nIHdvcmthcm91bmRzLlxuIik7CiAJRUNfRkxBR1NfTVNJID0gMTsKIAlFQ19GTEFHU19WQUxJREFURV9FQ0RUID0gMTsKIAlyZXR1cm4gMDsKQEAgLTkyOCw4ICs5MjksMTMgQEAKIAlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJKRkw5MiIpIH0sIE5VTEx9LAogCXsKIAllY19mbGFnX21zaSwgIk1TSSBoYXJkd2FyZSIsIHsKLQlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiTWljcm8tU3RhciIpLAotCURNSV9NQVRDSChETUlfQ0hBU1NJU19WRU5ET1IsICJNSUNSTy1TdGFyIikgfSwgTlVMTH0sCisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIk1pY3JvLVN0YXIiKX0sIE5VTEx9LAorCXsKKwllY19mbGFnX21zaSwgIk1TSSBoYXJkd2FyZSIsIHsKKwlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyby1TdGFyIil9LCBOVUxMfSwKKwl7CisJZWNfZmxhZ19tc2ksICJNU0kgaGFyZHdhcmUiLCB7CisJRE1JX01BVENIKERNSV9DSEFTU0lTX1ZFTkRPUiwgIk1JQ1JPLVN0YXIiKX0sIE5VTEx9LAogCXsKIAllY192YWxpZGF0ZV9lY2R0LCAiQVNVUyBoYXJkd2FyZSIsIHsKIAlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiQVNVUyIpIH0sIE5VTEx9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmggYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAppbmRleCAwNzRjZjg2Li5jYjI4ZTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaApAQCAtNDMsNiArNDMsNyBAQAogZXh0ZXJuIGludCBhY3BpX3Bvd2VyX25vY2hlY2s7CiAKIGludCBhY3BpX3dha2V1cF9kZXZpY2VfaW5pdCh2b2lkKTsKK3ZvaWQgYWNwaV9lYXJseV9wcm9jZXNzb3Jfc2V0X3BkYyh2b2lkKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlZGRlZCBDb250cm9sbGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IDQxNzMxMjMuLjk4NjNjOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC0xMjQsMjkgKzEyNCw2IEBACiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqLCBwcm9jZXNzb3JzKTsKIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9lcnJhdGEgZXJyYXRhIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgaW50IHNldF9ub19td2FpdChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCi17Ci0JcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiJXMgZGV0ZWN0ZWQgLSAiCi0JCSJkaXNhYmxpbmcgbXdhaXQgZm9yIENQVSBDLXN0YXRlc1xuIiwgaWQtPmlkZW50KTsKLQlpZGxlX25vbXdhaXQgPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19jcHVpbml0ZGF0YSBwcm9jZXNzb3JfaWRsZV9kbWlfdGFibGVbXSA9IHsKLQl7Ci0Jc2V0X25vX213YWl0LCAiSUZMOTEgYm9hcmQiLCB7Ci0JRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkNPTVBBTCIpLAotCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlpFUFRPIiksCi0JRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIzMjE1VyIpLAotCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIklGTDkxIikgfSwgTlVMTH0sCi0JewotCXNldF9ub19td2FpdCwgIkV4dGVuc2EgNTIyMCIsIHsKLQlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiUGhvZW5peCBUZWNobm9sb2dpZXMgTFREIiksCi0JRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLAotCURNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiMDEwMCIpLAotCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkNvbHVtYmlhIikgfSwgTlVMTH0sCi0Je30sCi19OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJhdGEgSGFuZGxpbmcKQEAgLTI3Nyw0NSArMjU0LDYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1vbiBBQ1BJIHByb2Nlc3NvciBmdW5jdGlvbnMKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBfUERDIGlzIHJlcXVpcmVkIGZvciBhIEJJT1MtT1MgaGFuZHNoYWtlIGZvciBtb3N0IG9mIHRoZSBuZXdlcgotICogQUNQSSBwcm9jZXNzb3IgZmVhdHVyZXMuCi0gKi8KLXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQotewotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpwZGNfaW4gPSBwci0+cGRjOwotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCi0KLQlpZiAoIXBkY19pbikKLQkJcmV0dXJuIHN0YXR1czsKLQlpZiAoaWRsZV9ub213YWl0KSB7Ci0JCS8qCi0JCSAqIElmIG13YWl0IGlzIGRpc2FibGVkIGZvciBDUFUgQy1zdGF0ZXMsIHRoZSBDMkMzX0ZGSCBhY2Nlc3MKLQkJICogbW9kZSB3aWxsIGJlIGRpc2FibGVkIGluIHRoZSBwYXJhbWV0ZXIgb2YgX1BEQyBvYmplY3QuCi0JCSAqIE9mIGNvdXJzZSBDMV9GRkggYWNjZXNzIG1vZGUgd2lsbCBhbHNvIGJlIGRpc2FibGVkLgotCQkgKi8KLQkJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKLQkJdTMyICpidWZmZXIgPSBOVUxMOwotCi0JCW9iaiA9IHBkY19pbi0+cG9pbnRlcjsKLQkJYnVmZmVyID0gKHUzMiAqKShvYmotPmJ1ZmZlci5wb2ludGVyKTsKLQkJYnVmZmVyWzJdICY9IH4oQUNQSV9QRENfQ19DMkMzX0ZGSCB8IEFDUElfUERDX0NfQzFfRkZIKTsKLQotCX0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChwci0+aGFuZGxlLCAiX1BEQyIsIHBkY19pbiwgTlVMTCk7Ci0KLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJICAgICJDb3VsZCBub3QgZXZhbHVhdGUgX1BEQywgdXNpbmcgbGVnYWN5IHBlcmYuIGNvbnRyb2wuLi5cbiIpKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUyBJbnRlcmZhY2UgKC9wcm9jKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtODI1LDkgKzc2Myw3IEBACiAJfQogCiAJLyogX1BEQyBjYWxsIHNob3VsZCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlIChpZiByZXFkLikuICovCi0JYXJjaF9hY3BpX3Byb2Nlc3Nvcl9pbml0X3BkYyhwcik7Ci0JYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhwcik7Ci0JYXJjaF9hY3BpX3Byb2Nlc3Nvcl9jbGVhbnVwX3BkYyhwcik7CisJYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhwci0+aGFuZGxlKTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCWFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChwciwgMCk7CkBAIC0xMTQ1LDExICsxMDgxLDYgQEAKIAlpZiAoIWFjcGlfcHJvY2Vzc29yX2RpcikKIAkJcmV0dXJuIC1FTk9NRU07CiAjZW5kaWYKLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBETUkgdGFibGUuIElmIHllcywgT1NQTQotCSAqIHNob3VsZCBub3QgdXNlIG13YWl0IGZvciBDUFUtc3RhdGVzLgotCSAqLwotCWRtaV9jaGVja19zeXN0ZW0ocHJvY2Vzc29yX2lkbGVfZG1pX3RhYmxlKTsKIAlyZXN1bHQgPSBjcHVpZGxlX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9pZGxlX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gb3V0X3Byb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BkYy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGU0ZGMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZGMuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKgorICoJQWxleCBDaGlhbmcgPGFjaGlhbmdAaHAuY29tPgorICoJLSBVbmlmaWVkIHg4Ni9pYTY0IGltcGxlbWVudGF0aW9ucworICoJVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+CisgKgktIEFkZGVkIF9QREMgZm9yIHBsYXRmb3JtcyB3aXRoIEludGVsIENQVXMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorCisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworI2RlZmluZSBQUkVGSVgJCQkiQUNQSTogIgorI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1BST0NFU1NPUl9DT01QT05FTlQKK0FDUElfTU9EVUxFX05BTUUoInByb2Nlc3Nvcl9wZGMiKTsKKworc3RhdGljIGludCBzZXRfbm9fbXdhaXQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggIiVzIGRldGVjdGVkIC0gIgorCQkiZGlzYWJsaW5nIG13YWl0IGZvciBDUFUgQy1zdGF0ZXNcbiIsIGlkLT5pZGVudCk7CisJaWRsZV9ub213YWl0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fY3B1aW5pdGRhdGEgcHJvY2Vzc29yX2lkbGVfZG1pX3RhYmxlW10gPSB7CisJeworCXNldF9ub19td2FpdCwgIklGTDkxIGJvYXJkIiwgeworCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJDT01QQUwiKSwKKwlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJaRVBUTyIpLAorCURNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiMzIxNVciKSwKKwlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJJRkw5MSIpIH0sIE5VTEx9LAorCXsKKwlzZXRfbm9fbXdhaXQsICJFeHRlbnNhIDUyMjAiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIlBob2VuaXggVGVjaG5vbG9naWVzIExURCIpLAorCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIjAxMDAiKSwKKwlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJDb2x1bWJpYSIpIH0sIE5VTEx9LAorCXt9LAorfTsKKworc3RhdGljIHZvaWQgYWNwaV9zZXRfcGRjX2JpdHModTMyICpidWYpCit7CisJYnVmWzBdID0gQUNQSV9QRENfUkVWSVNJT05fSUQ7CisJYnVmWzFdID0gMTsKKworCS8qIEVuYWJsZSBjb29yZGluYXRpb24gd2l0aCBmaXJtd2FyZSdzIF9UU0QgaW5mbyAqLworCWJ1ZlsyXSA9IEFDUElfUERDX1NNUF9UX1NXQ09PUkQ7CisKKwkvKiBUd2lkZGxlIGFyY2gtc3BlY2lmaWMgYml0cyBuZWVkZWQgZm9yIF9QREMgKi8KKwlhcmNoX2FjcGlfc2V0X3BkY19iaXRzKGJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqYWNwaV9wcm9jZXNzb3JfYWxsb2NfcGRjKHZvaWQpCit7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKm9ial9saXN0OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJdTMyICpidWY7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBwZGMuIEl0IHdpbGwgYmUgdXNlZCBsYXRlci4gKi8KKwlvYmpfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX29iamVjdF9saXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmpfbGlzdCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJb2JqID0ga21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9iaikgeworCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKwkJa2ZyZWUob2JqX2xpc3QpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlidWYgPSBrbWFsbG9jKDEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKwkJa2ZyZWUob2JqKTsKKwkJa2ZyZWUob2JqX2xpc3QpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhY3BpX3NldF9wZGNfYml0cyhidWYpOworCisJb2JqLT50eXBlID0gQUNQSV9UWVBFX0JVRkZFUjsKKwlvYmotPmJ1ZmZlci5sZW5ndGggPSAxMjsKKwlvYmotPmJ1ZmZlci5wb2ludGVyID0gKHU4ICopIGJ1ZjsKKwlvYmpfbGlzdC0+Y291bnQgPSAxOworCW9ial9saXN0LT5wb2ludGVyID0gb2JqOworCisJcmV0dXJuIG9ial9saXN0OworfQorCisvKgorICogX1BEQyBpcyByZXF1aXJlZCBmb3IgYSBCSU9TLU9TIGhhbmRzaGFrZSBmb3IgbW9zdCBvZiB0aGUgbmV3ZXIKKyAqIEFDUEkgcHJvY2Vzc29yIGZlYXR1cmVzLgorICovCitzdGF0aWMgaW50CithY3BpX3Byb2Nlc3Nvcl9ldmFsX3BkYyhhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpwZGNfaW4pCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisKKwlpZiAoaWRsZV9ub213YWl0KSB7CisJCS8qCisJCSAqIElmIG13YWl0IGlzIGRpc2FibGVkIGZvciBDUFUgQy1zdGF0ZXMsIHRoZSBDMkMzX0ZGSCBhY2Nlc3MKKwkJICogbW9kZSB3aWxsIGJlIGRpc2FibGVkIGluIHRoZSBwYXJhbWV0ZXIgb2YgX1BEQyBvYmplY3QuCisJCSAqIE9mIGNvdXJzZSBDMV9GRkggYWNjZXNzIG1vZGUgd2lsbCBhbHNvIGJlIGRpc2FibGVkLgorCQkgKi8KKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwkJdTMyICpidWZmZXIgPSBOVUxMOworCisJCW9iaiA9IHBkY19pbi0+cG9pbnRlcjsKKwkJYnVmZmVyID0gKHUzMiAqKShvYmotPmJ1ZmZlci5wb2ludGVyKTsKKwkJYnVmZmVyWzJdICY9IH4oQUNQSV9QRENfQ19DMkMzX0ZGSCB8IEFDUElfUERDX0NfQzFfRkZIKTsKKworCX0KKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfUERDIiwgcGRjX2luLCBOVUxMKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAorCQkgICAgIkNvdWxkIG5vdCBldmFsdWF0ZSBfUERDLCB1c2luZyBsZWdhY3kgcGVyZi4gY29udHJvbC5cbiIpKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKm9ial9saXN0OworCisJaWYgKGFyY2hfaGFzX2FjcGlfcGRjKCkgPT0gZmFsc2UpCisJCXJldHVybjsKKworCW9ial9saXN0ID0gYWNwaV9wcm9jZXNzb3JfYWxsb2NfcGRjKCk7CisJaWYgKCFvYmpfbGlzdCkKKwkJcmV0dXJuOworCisJYWNwaV9wcm9jZXNzb3JfZXZhbF9wZGMoaGFuZGxlLCBvYmpfbGlzdCk7CisKKwlrZnJlZShvYmpfbGlzdC0+cG9pbnRlci0+YnVmZmVyLnBvaW50ZXIpOworCWtmcmVlKG9ial9saXN0LT5wb2ludGVyKTsKKwlrZnJlZShvYmpfbGlzdCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKTsKKworc3RhdGljIGFjcGlfc3RhdHVzCitlYXJseV9pbml0X3BkYyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKK3sKKwlhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKGhhbmRsZSk7CisJcmV0dXJuIEFFX09LOworfQorCit2b2lkIGFjcGlfZWFybHlfcHJvY2Vzc29yX3NldF9wZGModm9pZCkKK3sKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBETUkgdGFibGUuIElmIHllcywgT1NQTQorCSAqIHNob3VsZCBub3QgdXNlIG13YWl0IGZvciBDUFUtc3RhdGVzLgorCSAqLworCWRtaV9jaGVja19zeXN0ZW0ocHJvY2Vzc29yX2lkbGVfZG1pX3RhYmxlKTsKKworCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX1BST0NFU1NPUiwgQUNQSV9ST09UX09CSkVDVCwKKwkJCSAgICBBQ1BJX1VJTlQzMl9NQVgsCisJCQkgICAgZWFybHlfaW5pdF9wZGMsIE5VTEwsIE5VTEwsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwppbmRleCA1ZjJjMzc5Li43OWQzM2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwpAQCAtODEsNiArODEsMjMgQEAKICNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAogc3RhdGljIHUzMiBhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSA9IEFDUElfU1RBVEVfUzA7CiAvKgorICogQWNjb3JkaW5nIHRvIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24gdGhlIEJJT1Mgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IEFDUEkgaXMKKyAqIGVuYWJsZWQgYW5kIFNDSV9FTiBiaXQgaXMgc2V0IG9uIHdha2UtdXAgZnJvbSBTMSAtIFMzIHNsZWVwIHN0YXRlcy4gIFN0aWxsLAorICogc29tZSBCSU9TZXMgZG9uJ3QgZG8gdGhhdCBhbmQgdGhlcmVmb3JlIHdlIHVzZSBhY3BpX2VuYWJsZSgpIHRvIGVuYWJsZSBBQ1BJCisgKiBvbiBzdWNoIHN5c3RlbXMgZHVyaW5nIHJlc3VtZS4gIFVuZm9ydHVuYXRlbHkgdGhhdCBkb2Vzbid0IGhlbHAgaW4KKyAqIHBhcnRpY3VsYXJseSBwYXRob2xvZ2ljYWwgY2FzZXMgaW4gd2hpY2ggU0NJX0VOIGhhcyB0byBiZSBzZXQgZGlyZWN0bHkgb24KKyAqIHJlc3VtZSwgYWx0aG91Z2ggdGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHZlcnkgY2xlYXJseSB0aGF0IHRoaXMgZmxhZyBpcworICogb3duZWQgYnkgdGhlIGhhcmR3YXJlLiAgVGhlIHNldF9zY2lfZW5fb25fcmVzdW1lIHZhcmlhYmxlIHdpbGwgYmUgc2V0IGluIHN1Y2gKKyAqIGNhc2VzLgorICovCitzdGF0aWMgYm9vbCBzZXRfc2NpX2VuX29uX3Jlc3VtZTsKKwordm9pZCBfX2luaXQgYWNwaV9zZXRfc2NpX2VuX29uX3Jlc3VtZSh2b2lkKQoreworCXNldF9zY2lfZW5fb25fcmVzdW1lID0gdHJ1ZTsKK30KKworLyoKICAqIEFDUEkgMS4wIHdhbnRzIHVzIHRvIGV4ZWN1dGUgX1BUUyBiZWZvcmUgc3VzcGVuZGluZyBkZXZpY2VzLCBzbyB3ZSBhbGxvdyB0aGUKICAqIHVzZXIgdG8gcmVxdWVzdCB0aGF0IGJlaGF2aW9yIGJ5IHVzaW5nIHRoZSAnYWNwaV9vbGRfc3VzcGVuZF9vcmRlcmluZycKICAqIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIHRoYXQgY2F1c2VzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgdG8gYmUgc2V0LgpAQCAtMTcwLDE4ICsxODcsNiBAQAogI2VuZGlmIC8qIENPTkZJR19BQ1BJX1NMRUVQICovCiAKICNpZmRlZiBDT05GSUdfU1VTUEVORAotLyoKLSAqIEFjY29yZGluZyB0byB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uIHRoZSBCSU9TIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBBQ1BJIGlzCi0gKiBlbmFibGVkIGFuZCBTQ0lfRU4gYml0IGlzIHNldCBvbiB3YWtlLXVwIGZyb20gUzEgLSBTMyBzbGVlcCBzdGF0ZXMuICBTdGlsbCwKLSAqIHNvbWUgQklPU2VzIGRvbid0IGRvIHRoYXQgYW5kIHRoZXJlZm9yZSB3ZSB1c2UgYWNwaV9lbmFibGUoKSB0byBlbmFibGUgQUNQSQotICogb24gc3VjaCBzeXN0ZW1zIGR1cmluZyByZXN1bWUuICBVbmZvcnR1bmF0ZWx5IHRoYXQgZG9lc24ndCBoZWxwIGluCi0gKiBwYXJ0aWN1bGFybHkgcGF0aG9sb2dpY2FsIGNhc2VzIGluIHdoaWNoIFNDSV9FTiBoYXMgdG8gYmUgc2V0IGRpcmVjdGx5IG9uCi0gKiByZXN1bWUsIGFsdGhvdWdoIHRoZSBzcGVjaWZpY2F0aW9uIHN0YXRlcyB2ZXJ5IGNsZWFybHkgdGhhdCB0aGlzIGZsYWcgaXMKLSAqIG93bmVkIGJ5IHRoZSBoYXJkd2FyZS4gIFRoZSBzZXRfc2NpX2VuX29uX3Jlc3VtZSB2YXJpYWJsZSB3aWxsIGJlIHNldCBpbiBzdWNoCi0gKiBjYXNlcy4KLSAqLwotc3RhdGljIGJvb2wgc2V0X3NjaV9lbl9vbl9yZXN1bWU7Ci0KIGV4dGVybiB2b2lkIGRvX3N1c3BlbmRfbG93bGV2ZWwodm9pZCk7CiAKIHN0YXRpYyB1MzIgYWNwaV9zdXNwZW5kX3N0YXRlc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCAwNWRmZjYzLi43MmU3NmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtOTk5LDggKzk5OSwxMCBAQAogCQlzcHJpbnRmKG5hbWUsICJhY3BpX3ZpZGVvJWQiLCBjb3VudCsrKTsKIAkJZGV2aWNlLT5iYWNrbGlnaHQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsCiAJCQlOVUxMLCBkZXZpY2UsICZhY3BpX2JhY2tsaWdodF9vcHMpOwotCQlkZXZpY2UtPmJhY2tsaWdodC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBkZXZpY2UtPmJyaWdodG5lc3MtPmNvdW50LTM7CiAJCWtmcmVlKG5hbWUpOworCQlpZiAoSVNfRVJSKGRldmljZS0+YmFja2xpZ2h0KSkKKwkJCXJldHVybjsKKwkJZGV2aWNlLT5iYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gZGV2aWNlLT5icmlnaHRuZXNzLT5jb3VudC0zOwogCiAJCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmJhY2tsaWdodC0+ZGV2LmtvYmosCiAJCQkJCSAgICZkZXZpY2UtPmRldi0+ZGV2LmtvYmosICJkZXZpY2UiKTsKQEAgLTE5NzksNiArMTk4MSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBsZXZlbF9jdXJyZW50LCBsZXZlbF9uZXh0OwogCWludCByZXN1bHQgPSAtRUlOVkFMOwogCisJLyogbm8gd2FybmluZyBtZXNzYWdlIGlmIGFjcGlfYmFja2xpZ2h0PXZlbmRvciBpcyB1c2VkICovCisJaWYgKCFhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCkpCisJCXJldHVybiAwOworCiAJaWYgKCFkZXZpY2UtPmJyaWdodG5lc3MpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9LY29uZmlnIGIvZHJpdmVycy9hdGEvS2NvbmZpZwppbmRleCA4NTg0NGQwLi41NmM2Mzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYXRhL0tjb25maWcKQEAgLTQwLDcgKzQwLDYgQEAKIGNvbmZpZyBBVEFfQUNQSQogCWJvb2wgIkFUQSBBQ1BJIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBQ1BJICYmIFBDSQotCXNlbGVjdCBBQ1BJX0RPQ0sKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFUQS1yZWxhdGVkIEFDUEkgb2JqZWN0cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDE2ODNlYmQuLmY0ZWE1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMzAyMiw3ICszMDIyLDcgQEAKIAljYXNlIFdSSVRFXzE2OgogCQlyZXR1cm4gYXRhX3Njc2lfcndfeGxhdDsKIAotCWNhc2UgMHg5MyAvKldSSVRFX1NBTUVfMTYqLzoKKwljYXNlIFdSSVRFX1NBTUVfMTY6CiAJCXJldHVybiBhdGFfc2NzaV93cml0ZV9zYW1lX3hsYXQ7CiAKIAljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IGVmYTg3NzMuLjc0MTA2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTIyNzUsNyArMjI3NSw3IEBACiAJYXAgPSBxYy0+YXA7CiAJLyogRHJhaW4gdXAgdG8gNjRLIG9mIGRhdGEgYmVmb3JlIHdlIGdpdmUgdXAgdGhpcyByZWNvdmVyeSBtZXRob2QgKi8KIAlmb3IgKGNvdW50ID0gMDsgKGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApICYgQVRBX0RSUSkKLQkJCQkJCSYmIGNvdW50IDwgMzI3Njg7IGNvdW50KyspCisJCQkJCQkmJiBjb3VudCA8IDY1NTM2OyBjb3VudCArPSAyKQogCQlpb3JlYWQxNihhcC0+aW9hZGRyLmRhdGFfYWRkcik7CiAKIAkvKiBDYW4gYmVjb21lIERFQlVHIGxhdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKaW5kZXggYzRiNDdhMy4uMDJjODFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwpAQCAtMTU1Nyw2ICsxNTU3LDI1IEBACiAJUF9BVEFQSV9ETUFSUSwKIAlQX0FUQVBJX0lOVFJRLAogCVBfQVRBUElfSU9SRFksCisJUF9BVEFQSV9EMEEsCisJUF9BVEFQSV9EMUEsCisJUF9BVEFQSV9EMkEsCisJUF9BVEFQSV9EM0EsCisJUF9BVEFQSV9ENEEsCisJUF9BVEFQSV9ENUEsCisJUF9BVEFQSV9ENkEsCisJUF9BVEFQSV9EN0EsCisJUF9BVEFQSV9EOEEsCisJUF9BVEFQSV9EOUEsCisJUF9BVEFQSV9EMTBBLAorCVBfQVRBUElfRDExQSwKKwlQX0FUQVBJX0QxMkEsCisJUF9BVEFQSV9EMTNBLAorCVBfQVRBUElfRDE0QSwKKwlQX0FUQVBJX0QxNUEsCisJUF9BVEFQSV9BMEEsCisJUF9BVEFQSV9BMUEsCisJUF9BVEFQSV9BMkEsCiAJMAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKaW5kZXggZGFkZmMzNS4uMGVmYjFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfY21kNjR4IgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuNSIKIAogLyoKICAqIENNRDY0eCBzcGVjaWZpYyByZWdpc3RlcnMgZGVmaW5pdGlvbi4KQEAgLTIxOSw3ICsyMTksNyBAQAogCQlyZWdVIHw9IHVkbWFfZGF0YVthZGV2LT5kbWFfbW9kZSAtIFhGRVJfVURNQV8wXSA8PCBzaGlmdDsKIAkJLyogTWVyZ2UgdGhlIGNvbnRyb2wgYml0cyAqLwogCQlyZWdVIHw9IDEgPDwgYWRldi0+ZGV2bm87IC8qIFVETUEgb24gKi8KLQkJaWYgKGFkZXYtPmRtYV9tb2RlID4gMikJLyogMTVuUyB0aW1pbmcgKi8KKwkJaWYgKGFkZXYtPmRtYV9tb2RlID4gWEZFUl9VRE1BXzIpIC8qIDE1blMgdGltaW5nICovCiAJCQlyZWdVIHw9IDQgPDwgYWRldi0+ZGV2bm87CiAJfSBlbHNlIHsKIAkJcmVnVSAmPSB+ICgxIDw8IGFkZXYtPmRldm5vKTsJLyogVURNQSBvZmYgKi8KQEAgLTI1NCwxMDkgKzI1NCwxNyBAQAogfQogCiAvKioKLSAqCWNtZDY0eF9ibWRtYV9zdG9wCS0JRE1BIHN0b3AgY2FsbGJhY2sKKyAqCWNtZDY0NnIxX2RtYV9zdG9wCS0JRE1BIHN0b3AgY2FsbGJhY2sKICAqCUBxYzogQ29tbWFuZCBpbiBwcm9ncmVzcwogICoKLSAqCVRyYWNrIHRoZSBjb21wbGV0aW9uIG9mIGxpdmUgRE1BIGNvbW1hbmRzIGFuZCBjbGVhciB0aGUKLSAqCWhvc3QtPnByaXZhdGVfZGF0YSBETUEgdHJhY2tpbmcgZmxhZyBhcyB3ZSBkby4KKyAqCVN0dWIgZm9yIG5vdyB3aGlsZSBpbnZlc3RpZ2F0aW5nIHRoZSByMSBxdWlyayBpbiB0aGUgb2xkIGRyaXZlci4KICAqLwogCi1zdGF0aWMgdm9pZCBjbWQ2NHhfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHZvaWQgY21kNjQ2cjFfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJYXRhX2JtZG1hX3N0b3AocWMpOwotCVdBUk5fT04oYXAtPmhvc3QtPnByaXZhdGVfZGF0YSAhPSBhcCk7Ci0JYXAtPmhvc3QtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiB9CiAKLS8qKgotICoJY21kNjR4X3FjX2RlZmVyCQktCURlZmVyIGxvZ2ljIGZvciBjaGlwIGxpbWl0cwotICoJQHFjOiBxdWV1ZWQgY29tbWFuZAotICoKLSAqCURlY2lkZSB3aGV0aGVyIHdlIGNhbiBpc3N1ZSB0aGUgY29tbWFuZC4gQ2FsbGVkIHVuZGVyIHRoZSBob3N0IGxvY2suCi0gKi8KLQotc3RhdGljIGludCBjbWQ2NHhfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7Ci0Jc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKLQlpbnQgcmM7Ci0JaW50IGRtYSA9IDA7Ci0KLQkvKiBBcHBseSB0aGUgQVRBIHJ1bGVzIGZpcnN0ICovCi0JcmMgPSBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBUElfUFJPVF9ETUEgfHwKLQkJCXFjLT50Zi5wcm90b2NvbCA9PSBBVEFfUFJPVF9ETUEpCi0JCWRtYSA9IDE7Ci0KLQkvKiBJZiB0aGUgb3RoZXIgcG9ydCBpcyBub3QgbGl2ZSB0aGVuIGlzc3VlIHRoZSBjb21tYW5kICovCi0JaWYgKGFsdCA9PSBOVUxMIHx8ICFhbHQtPnFjX2FjdGl2ZSkgewotCQlpZiAoZG1hKQotCQkJaG9zdC0+cHJpdmF0ZV9kYXRhID0gcWMtPmFwOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogSWYgdGhlcmUgaXMgYSBsaXZlIERNQSBjb21tYW5kIHRoZW4gd2FpdCAqLwotCWlmIChob3N0LT5wcml2YXRlX2RhdGEgIT0gTlVMTCkKLQkJcmV0dXJuIAlBVEFfREVGRVJfUE9SVDsKLQlpZiAoZG1hKQotCQkvKiBDYW5ub3Qgb3ZlcmxhcCBvdXIgRE1BIGNvbW1hbmQgKi8KLQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqCWNtZDY0eF9pbnRlcnJ1cHQgLSBBVEEgaG9zdCBpbnRlcnJ1cHQgaGFuZGxlcgotICoJQGlycTogaXJxIGxpbmUgKHVudXNlZCkKLSAqCUBkZXZfaW5zdGFuY2U6IHBvaW50ZXIgdG8gb3VyIGF0YV9ob3N0IGluZm9ybWF0aW9uIHN0cnVjdHVyZQotICoKLSAqCU91ciBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgUENJIElERSBkZXZpY2VzLiAgQ2FsbHMKLSAqCWF0YV9zZmZfaG9zdF9pbnRyKCkgZm9yIGVhY2ggcG9ydCB0aGF0IGlzIGZsYWdnaW5nIGFuIElSUS4gV2UgY2Fubm90Ci0gKgl1c2UgdGhlIGRlZmF1bHRzIGFzIHdlIG5lZWQgdG8gYXZvaWQgdG91Y2hpbmcgc3RhdHVzL2FsdHN0YXR1cyBkdXJpbmcKLSAqCWEgRE1BLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglPYnRhaW5zIGhvc3QgbG9jayBkdXJpbmcgb3BlcmF0aW9uLgotICoKLSAqCVJFVFVSTlM6Ci0gKglJUlFfTk9ORSBvciBJUlFfSEFORExFRC4KLSAqLwotaXJxcmV0dXJuX3QgY21kNjR4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCi17Ci0Jc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2luc3RhbmNlOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihob3N0LT5kZXYpOwotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBoYW5kbGVkID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0YXRpYyBjb25zdCB1OCBpcnFfcmVnWzJdID0geyBDRlIsIEFSVFRJTTIzIH07Ci0Jc3RhdGljIGNvbnN0IHU4IGlycV9tYXNrWzJdID0geyAxIDw8IDIsIDEgPDwgNCB9OwotCi0JLyogVE9ETzogbWFrZSBfaXJxc2F2ZSBjb25kaXRpb25hbCBvbiB4ODYgUENJIElERSBsZWdhY3kgbW9kZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKSB7Ci0JCXN0cnVjdCBhdGFfcG9ydCAqYXA7Ci0JCXU4IHJlZzsKLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBpcnFfcmVnW2ldLCAmcmVnKTsKLQkJYXAgPSBob3N0LT5wb3J0c1tpXTsKLQkJaWYgKGFwICYmIChyZWcgJiBpcnFfbWFza1tpXSkgJiYKLQkJICAgICEoYXAtPmZsYWdzICYgQVRBX0ZMQUdfRElTQUJMRUQpKSB7Ci0JCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwotCi0JCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7Ci0JCQlpZiAocWMgJiYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKSAmJgotCQkJICAgIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpCi0JCQkJaGFuZGxlZCB8PSBhdGFfc2ZmX2hvc3RfaW50cihhcCwgcWMpOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Ci19CiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBjbWQ2NHhfc2h0ID0gewogCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKQEAgLTM2NSw4ICsyNzMsNiBAQAogCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAJLnNldF9waW9tb2RlCT0gY21kNjR4X3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IGNtZDY0eF9zZXRfZG1hbW9kZSwKLQkuYm1kbWFfc3RvcAk9IGNtZDY0eF9ibWRtYV9zdG9wLAotCS5xY19kZWZlcgk9IGNtZDY0eF9xY19kZWZlciwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjbWQ2NHhfcG9ydF9vcHMgPSB7CkBAIC0zNzYsNiArMjgyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGNtZDY0NnIxX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwk9ICZjbWQ2NHhfYmFzZV9vcHMsCisJLmJtZG1hX3N0b3AJPSBjbWQ2NDZyMV9ibWRtYV9zdG9wLAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogfTsKIApAQCAtMzgzLDcgKzI5MCw2IEBACiAJLmluaGVyaXRzCT0gJmNtZDY0eF9iYXNlX29wcywKIAkuYm1kbWFfc3RvcAk9IGNtZDY0OF9ibWRtYV9zdG9wLAogCS5jYWJsZV9kZXRlY3QJPSBjbWQ2NDhfY2FibGVfZGV0ZWN0LAotCS5xY19kZWZlcgk9IGF0YV9zdGRfcWNfZGVmZXIKIH07CiAKIHN0YXRpYyBpbnQgY21kNjR4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC00MzIsNyArMzM4LDYgQEAKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZjbWRfaW5mb1tpZC0+ZHJpdmVyX2RhdGFdLCBOVUxMIH07CiAJdTggbXJkbW9kZTsKIAlpbnQgcmM7Ci0Jc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCiAJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjKQpAQCAtNDUwLDI1ICszNTUsMjAgQEAKIAkJCXBwaVswXSA9ICZjbWRfaW5mb1szXTsKIAl9CiAKLQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgNjQpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIE1SRE1PREUsICZtcmRtb2RlKTsKIAltcmRtb2RlICY9IH4gMHgzMDsJLyogSVJRIHNldCB1cCAqLwogCW1yZG1vZGUgfD0gMHgwMjsJLyogTWVtb3J5IHJlYWQgbGluZSBlbmFibGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgTVJETU9ERSwgbXJkbW9kZSk7CiAKKwkvKiBGb3JjZSBQSU8gMCBoZXJlLi4gKi8KKwogCS8qIFBQQyBzcGVjaWZpYyBmaXh1cCBjb3BpZWQgZnJvbSBvbGQgZHJpdmVyICovCiAjaWZkZWYgQ09ORklHX1BQQwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBVRElERVRDUjAsIDB4RjApOwogI2VuZGlmCi0JcmMgPSBhdGFfcGNpX3NmZl9wcmVwYXJlX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0JLyogV2UgdXNlIHRoaXMgcG9pbnRlciB0byB0cmFjayB0aGUgQVAgd2hpY2ggaGFzIERNQSBydW5uaW5nICovCi0JaG9zdC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCXJldHVybiBhdGFfcGNpX3NmZl9hY3RpdmF0ZV9ob3N0KGhvc3QsIGNtZDY0eF9pbnRlcnJ1cHQsICZjbWQ2NHhfc2h0KTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmY21kNjR4X3NodCwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggOWEwOWExYi4uZGQyNmJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTgsNyArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMwkJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMQkgICAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCBJbmMKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA3CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA5CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKgogICogVE9ETwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDN4Mm4iCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuNyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMy44IgogCiBlbnVtIHsKIAlIUFRfUENJX0ZBU1QJPQkoMSA8PCAzMSksCkBAIC0yNjQsNyArMjY0LDcgQEAKIAogc3RhdGljIHZvaWQgaHB0M3gybl9zZXRfY2xvY2soc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHNvdXJjZSkKIHsKLQl2b2lkIF9faW9tZW0gKmJtZG1hID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyOworCXZvaWQgX19pb21lbSAqYm1kbWEgPSBhcC0+aW9hZGRyLmJtZG1hX2FkZHIgLSBhcC0+cG9ydF9ubyAqIDg7CiAKIAkvKiBUcmlzdGF0ZSB0aGUgYnVzICovCiAJaW93cml0ZTgoMHg4MCwgYm1kbWErMHg3Myk7CkBAIC0yNzQsOSArMjc0LDkgQEAKIAlpb3dyaXRlOChzb3VyY2UsIGJtZG1hKzB4N0IpOwogCWlvd3JpdGU4KDB4QzAsIGJtZG1hKzB4NzkpOwogCi0JLyogUmVzZXQgc3RhdGUgbWFjaGluZXMgKi8KLQlpb3dyaXRlOCgweDM3LCBibWRtYSsweDcwKTsKLQlpb3dyaXRlOCgweDM3LCBibWRtYSsweDc0KTsKKwkvKiBSZXNldCBzdGF0ZSBtYWNoaW5lcywgYXZvaWQgZW5hYmxpbmcgdGhlIGRpc2FibGVkIGNoYW5uZWxzICovCisJaW93cml0ZTgoaW9yZWFkOChibWRtYSsweDcwKSB8IDB4MzIsIGJtZG1hKzB4NzApOworCWlvd3JpdGU4KGlvcmVhZDgoYm1kbWErMHg3NCkgfCAweDMyLCBibWRtYSsweDc0KTsKIAogCS8qIENvbXBsZXRlIHJlc2V0ICovCiAJaW93cml0ZTgoMHgwMCwgYm1kbWErMHg3OSk7CkBAIC0yODYsMjEgKzI4NiwxMCBAQAogCWlvd3JpdGU4KDB4MDAsIGJtZG1hKzB4NzcpOwogfQogCi0vKiBDaGVjayBpZiBvdXIgcGFydG5lciBpbnRlcmZhY2UgaXMgYnVzeSAqLwotCi1zdGF0aWMgaW50IGhwdDN4Mm5fcGFpcl9pZGxlKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gYXAtPmhvc3Q7Ci0Jc3RydWN0IGF0YV9wb3J0ICpwYWlyID0gaG9zdC0+cG9ydHNbYXAtPnBvcnRfbm8gXiAxXTsKLQotCWlmIChwYWlyLT5oc21fdGFza19zdGF0ZSA9PSBIU01fU1RfSURMRSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgaHB0M3gybl91c2VfZHBsbChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd3JpdGluZykKIHsKIAlsb25nIGZsYWdzID0gKGxvbmcpYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwogCS8qIFNlZSBpZiB3ZSBzaG91bGQgdXNlIHRoZSBEUExMICovCiAJaWYgKHdyaXRpbmcpCiAJCXJldHVybiBVU0VfRFBMTDsJLyogTmVlZGVkIGZvciB3cml0ZSAqLwpAQCAtMzA5LDIwICsyOTgsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBocHQzeDJuX3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFsdCA9IGFwLT5ob3N0LT5wb3J0c1thcC0+cG9ydF9ubyBeIDFdOworCWludCByYywgZmxhZ3MgPSAobG9uZylhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCWludCBkcGxsID0gaHB0M3gybl91c2VfZHBsbChhcCwgcWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKKworCS8qIEZpcnN0IGFwcGx5IHRoZSB1c3VhbCBydWxlcyAqLworCXJjID0gYXRhX3N0ZF9xY19kZWZlcihxYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCWlmICgoZmxhZ3MgJiBVU0VfRFBMTCkgIT0gZHBsbCAmJiBhbHQtPnFjX2FjdGl2ZSkKKwkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGhwdDN4Mm5fcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiA9ICZxYy0+dGY7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlpbnQgZmxhZ3MgPSAobG9uZylhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCWludCBkcGxsID0gaHB0M3gybl91c2VfZHBsbChhcCwgcWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKIAotCWlmIChocHQzeDJuX3BhaXJfaWRsZShhcCkpIHsKLQkJaW50IGRwbGwgPSBocHQzeDJuX3VzZV9kcGxsKGFwLCAodGYtPmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKSk7Ci0JCWlmICgoZmxhZ3MgJiBVU0VfRFBMTCkgIT0gZHBsbCkgewotCQkJaWYgKGRwbGwgPT0gMSkKLQkJCQlocHQzeDJuX3NldF9jbG9jayhhcCwgMHgyMSk7Ci0JCQllbHNlCi0JCQkJaHB0M3gybl9zZXRfY2xvY2soYXAsIDB4MjMpOwotCQl9CisJaWYgKChmbGFncyAmIFVTRV9EUExMKSAhPSBkcGxsKSB7CisJCWZsYWdzICY9IH5VU0VfRFBMTDsKKwkJZmxhZ3MgfD0gZHBsbDsKKwkJYXAtPmhvc3QtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopKGxvbmcpZmxhZ3M7CisKKwkJaHB0M3gybl9zZXRfY2xvY2soYXAsIGRwbGwgPyAweDIxIDogMHgyMyk7CiAJfQogCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KQEAgLTMzOSw2ICszNDMsOCBAQAogCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAKIAkuYm1kbWFfc3RvcAk9IGhwdDN4Mm5fYm1kbWFfc3RvcCwKKworCS5xY19kZWZlcgk9IGhwdDN4Mm5fcWNfZGVmZXIsCiAJLnFjX2lzc3VlCT0gaHB0M3gybl9xY19pc3N1ZSwKIAogCS5jYWJsZV9kZXRlY3QJPSBocHQzeDJuX2NhYmxlX2RldGVjdCwKQEAgLTQ1NCw3ICs0NjAsNyBAQAogCXVuc2lnbmVkIGludCBmX2xvdywgZl9oaWdoOwogCWludCBhZGp1c3Q7CiAJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKLQl2b2lkICpocHJpdiA9IE5VTEw7CisJdm9pZCAqaHByaXYgPSAodm9pZCAqKVVTRV9EUExMOwogCWludCByYzsKIAogCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKGRldik7CkBAIC01MzksNyArNTQ1LDcgQEAKIAkvKiBTZXQgb3VyIHByaXZhdGUgZGF0YSB1cC4gV2Ugb25seSBuZWVkIGEgZmV3IGZsYWdzIHNvIHdlIHVzZQogCSAgIGl0IGRpcmVjdGx5ICovCiAJaWYgKHBjaV9taHogPiA2MCkgewotCQlocHJpdiA9ICh2b2lkICopUENJNjY7CisJCWhwcml2ID0gKHZvaWQgKikoUENJNjYgfCBVU0VfRFBMTCk7CiAJCS8qCiAJCSAqIE9uICBIUFQzNzFOLCBpZiBBVEEgY2xvY2sgaXMgNjYgTUh6IHdlIG11c3Qgc2V0IGJpdCAyIGluCiAJCSAqIHRoZSBNSVNDLiByZWdpc3RlciB0byBzdHJldGNoIHRoZSBVbHRyYURNQSBUc3MgdGltaW5nLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKaW5kZXggZDZmNjk1Ni4uMzdlZjQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCkBAIC04NTMsNyArODUzLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWNzMSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlc19jczEtPnN0YXJ0LAotCQkJCQkgICByZXNfY3MwLT5lbmQgLSByZXNfY3MxLT5zdGFydCArIDEpOworCQkJCQkgICByZXNvdXJjZV9zaXplKHJlc19jczEpKTsKIAogCQlpZiAoIWNzMSkKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IGE4YTdiZTAuLmRmOGVlMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CkBAIC01MzgsNiArNTM5LDcgQEAKIAogc3RydWN0IG12X2hvc3RfcHJpdiB7CiAJdTMyCQkJaHBfZmxhZ3M7CisJdW5zaWduZWQgaW50IAkJYm9hcmRfaWR4OwogCXUzMgkJCW1haW5faXJxX21hc2s7CiAJc3RydWN0IG12X3BvcnRfc2lnbmFsCXNpZ25hbFs4XTsKIAljb25zdCBzdHJ1Y3QgbXZfaHdfb3BzCSpvcHM7CkBAIC01NDgsNiArNTUwLDEwIEBACiAJdTMyCQkJaXJxX2NhdXNlX29mZnNldDsKIAl1MzIJCQlpcnFfbWFza19vZmZzZXQ7CiAJdTMyCQkJdW5tYXNrX2FsbF9pcnFzOworCisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCisJc3RydWN0IGNsawkJKmNsazsKKyNlbmRpZgogCS8qCiAJICogVGhlc2UgY29uc2lzdGVudCBETUEgbWVtb3J5IHBvb2xzIGdpdmUgdXMgZ3VhcmFudGVlZAogCSAqIGFsaWdubWVudCBmb3IgaGFyZHdhcmUtYWNjZXNzZWQgZGF0YSBzdHJ1Y3R1cmVzLApAQCAtMjc3NSw3ICsyNzgxLDcgQEAKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcDsKIAlpbnQgZWRtYV93YXNfZW5hYmxlZDsKIAotCWlmICghYXAgfHwgKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSkgeworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkgewogCQltdl91bmV4cGVjdGVkX2ludHIoYXAsIDApOwogCQlyZXR1cm47CiAJfQpAQCAtMzM5Myw3ICszMzk5LDcgQEAKIAlaRVJPKDB4MDI0KTsJCS8qIHJlc3BxIG91dHAgKi8KIAlaRVJPKDB4MDIwKTsJCS8qIHJlc3BxIGlucCAqLwogCVpFUk8oMHgwMmMpOwkJLyogdGVzdCBjb250cm9sICovCi0Jd3JpdGVsKDB4YmMsIHBvcnRfbW1pbyArIEVETUFfSU9SRFlfVE1PVVQpOworCXdyaXRlbCgweDgwMCwgcG9ydF9tbWlvICsgRURNQV9JT1JEWV9UTU9VVCk7CiB9CiAKICN1bmRlZiBaRVJPCkBAIC0zODU0LDcgKzM4NjAsNiBAQAogLyoqCiAgKiAgICAgIG12X2luaXRfaG9zdCAtIFBlcmZvcm0gc29tZSBlYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaG9zdC4KICAqCUBob3N0OiBBVEEgaG9zdCB0byBpbml0aWFsaXplCi0gKiAgICAgIEBib2FyZF9pZHg6IGNvbnRyb2xsZXIgaW5kZXgKICAqCiAgKiAgICAgIElmIHBvc3NpYmxlLCBkbyBhbiBlYXJseSBnbG9iYWwgcmVzZXQgb2YgdGhlIGhvc3QuICBUaGVuIGRvCiAgKiAgICAgIG91ciBwb3J0IGluaXQgYW5kIGNsZWFyL3VubWFzayBhbGwvcmVsZXZhbnQgaG9zdCBpbnRlcnJ1cHRzLgpAQCAtMzg2MiwxMyArMzg2NywxMyBAQAogICogICAgICBMT0NLSU5HOgogICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLXN0YXRpYyBpbnQgbXZfaW5pdF9ob3N0KHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGJvYXJkX2lkeCkKK3N0YXRpYyBpbnQgbXZfaW5pdF9ob3N0KHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKIHsKIAlpbnQgcmMgPSAwLCBuX2hjLCBwb3J0LCBoYzsKIAlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBocHJpdi0+YmFzZTsKIAotCXJjID0gbXZfY2hpcF9pZChob3N0LCBib2FyZF9pZHgpOworCXJjID0gbXZfY2hpcF9pZChob3N0LCBocHJpdi0+Ym9hcmRfaWR4KTsKIAlpZiAocmMpCiAJCWdvdG8gZG9uZTsKIApAQCAtMzkwNSwxNCArMzkxMCw2IEBACiAJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfcG9ydF9iYXNlKG1taW8sIHBvcnQpOwogCiAJCW12X3BvcnRfaW5pdCgmYXAtPmlvYWRkciwgcG9ydF9tbWlvKTsKLQotI2lmZGVmIENPTkZJR19QQ0kKLQkJaWYgKCFJU19TT0MoaHByaXYpKSB7Ci0JCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcG9ydF9tbWlvIC0gbW1pbzsKLQkJCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgTVZfUFJJTUFSWV9CQVIsIC0xLCAibW1pbyIpOwotCQkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBNVl9QUklNQVJZX0JBUiwgb2Zmc2V0LCAicG9ydCIpOwotCQl9Ci0jZW5kaWYKIAl9CiAKIAlmb3IgKGhjID0gMDsgaGMgPCBuX2hjOyBoYysrKSB7CkBAIC00MDM1LDEyICs0MDMyLDIxIEBACiAJCXJldHVybiAtRU5PTUVNOwogCWhvc3QtPnByaXZhdGVfZGF0YSA9IGhwcml2OwogCWhwcml2LT5uX3BvcnRzID0gbl9wb3J0czsKKwlocHJpdi0+Ym9hcmRfaWR4ID0gY2hpcF9zb2M7CiAKIAlob3N0LT5pb21hcCA9IE5VTEw7CiAJaHByaXYtPmJhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKIAkJCQkgICByZXNvdXJjZV9zaXplKHJlcykpOwogCWhwcml2LT5iYXNlIC09IFNBVEFIQzBfUkVHX0JBU0U7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlocHJpdi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGhwcml2LT5jbGspKQorCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IGNsa2RldlxuIik7CisJZWxzZQorCQljbGtfZW5hYmxlKGhwcml2LT5jbGspOworI2VuZGlmCisKIAkvKgogCSAqIChSZS0pcHJvZ3JhbSBNQlVTIHJlbWFwcGluZyB3aW5kb3dzIGlmIHdlIGFyZSBhc2tlZCB0by4KIAkgKi8KQEAgLTQwNDksMTIgKzQwNTUsMTIgQEAKIAogCXJjID0gbXZfY3JlYXRlX2RtYV9wb29scyhocHJpdiwgJnBkZXYtPmRldik7CiAJaWYgKHJjKQotCQlyZXR1cm4gcmM7CisJCWdvdG8gZXJyOwogCiAJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCi0JcmMgPSBtdl9pbml0X2hvc3QoaG9zdCwgY2hpcF9zb2MpOworCXJjID0gbXZfaW5pdF9ob3N0KGhvc3QpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOworCQlnb3RvIGVycjsKIAogCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAogCQkgICAic2xvdHMgJXUgcG9ydHMgJWRcbiIsICh1bnNpZ25lZClNVl9NQVhfUV9ERVBUSCwKQEAgLTQwNjIsNiArNDA2OCwxNSBAQAogCiAJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIG12X2ludGVycnVwdCwKIAkJCQkgSVJRRl9TSEFSRUQsICZtdjZfc2h0KTsKK2VycjoKKyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlpZiAoIUlTX0VSUihocHJpdi0+Y2xrKSkgeworCQljbGtfZGlzYWJsZShocHJpdi0+Y2xrKTsKKwkJY2xrX3B1dChocHJpdi0+Y2xrKTsKKwl9CisjZW5kaWYKKworCXJldHVybiByYzsKIH0KIAogLyoKQEAgLTQwNzYsMTQgKzQwOTEsNjYgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisjZW5kaWYKIAlhdGFfaG9zdF9kZXRhY2goaG9zdCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlpZiAoIUlTX0VSUihocHJpdi0+Y2xrKSkgeworCQljbGtfZGlzYWJsZShocHJpdi0+Y2xrKTsKKwkJY2xrX3B1dChocHJpdi0+Y2xrKTsKKwl9CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdl9wbGF0Zm9ybV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJaWYgKGhvc3QpCisJCXJldHVybiBhdGFfaG9zdF9zdXNwZW5kKGhvc3QsIHN0YXRlKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12X3BsYXRmb3JtX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKGhvc3QpIHsKKwkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJCWNvbnN0IHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgKm12X3BsYXRmb3JtX2RhdGEgPSBcCisJCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkJLyoKKwkJICogKFJlLSlwcm9ncmFtIE1CVVMgcmVtYXBwaW5nIHdpbmRvd3MgaWYgd2UgYXJlIGFza2VkIHRvLgorCQkgKi8KKwkJaWYgKG12X3BsYXRmb3JtX2RhdGEtPmRyYW0gIT0gTlVMTCkKKwkJCW12X2NvbmZfbWJ1c193aW5kb3dzKGhwcml2LCBtdl9wbGF0Zm9ybV9kYXRhLT5kcmFtKTsKKworCQkvKiBpbml0aWFsaXplIGFkYXB0ZXIgKi8KKwkJcmV0ID0gbXZfaW5pdF9ob3N0KGhvc3QpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogRXJyb3IgZHVyaW5nIEhXIGluaXRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlhdGFfaG9zdF9yZXN1bWUoaG9zdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBtdl9wbGF0Zm9ybV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgbXZfcGxhdGZvcm1fcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdl9wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLnByb2JlCQkJPSBtdl9wbGF0Zm9ybV9wcm9iZSwKIAkucmVtb3ZlCQkJPSBfX2RldmV4aXRfcChtdl9wbGF0Zm9ybV9yZW1vdmUpLAorCS5zdXNwZW5kCQk9IG12X3BsYXRmb3JtX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gbXZfcGxhdGZvcm1fcmVzdW1lLAogCS5kcml2ZXIJCQk9IHsKIAkJCQkgICAubmFtZSA9IERSVl9OQU1FLAogCQkJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNDA5NCw2ICs0MTYxLDkgQEAKICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IG12X3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdl9wY2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisjZW5kaWYKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXZfcGNpX2RyaXZlciA9IHsKQEAgLTQxMDEsNiArNDE3MSwxMSBAQAogCS5pZF90YWJsZQkJPSBtdl9wY2lfdGJsLAogCS5wcm9iZQkJCT0gbXZfcGNpX2luaXRfb25lLAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAkJPSBhdGFfcGNpX2RldmljZV9zdXNwZW5kLAorCS5yZXN1bWUJCQk9IG12X3BjaV9kZXZpY2VfcmVzdW1lLAorI2VuZGlmCisKIH07CiAKIC8qIG1vdmUgdG8gUENJIGxheWVyIG9yIGxpYmF0YSBjb3JlPyAqLwpAQCAtNDE5NCw3ICs0MjY5LDcgQEAKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZtdl9wb3J0X2luZm9bYm9hcmRfaWR4XSwgTlVMTCB9OwogCXN0cnVjdCBhdGFfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdjsKLQlpbnQgbl9wb3J0cywgcmM7CisJaW50IG5fcG9ydHMsIHBvcnQsIHJjOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CkBAIC00MjA4LDYgKzQyODMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlob3N0LT5wcml2YXRlX2RhdGEgPSBocHJpdjsKIAlocHJpdi0+bl9wb3J0cyA9IG5fcG9ydHM7CisJaHByaXYtPmJvYXJkX2lkeCA9IGJvYXJkX2lkeDsKIAogCS8qIGFjcXVpcmUgcmVzb3VyY2VzICovCiAJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC00MjMwLDggKzQzMDYsMTcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCWZvciAocG9ydCA9IDA7IHBvcnQgPCBob3N0LT5uX3BvcnRzOyBwb3J0KyspIHsKKwkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW3BvcnRdOworCQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X3BvcnRfYmFzZShocHJpdi0+YmFzZSwgcG9ydCk7CisJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwb3J0X21taW8gLSBocHJpdi0+YmFzZTsKKworCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIE1WX1BSSU1BUllfQkFSLCAtMSwgIm1taW8iKTsKKwkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBNVl9QUklNQVJZX0JBUiwgb2Zmc2V0LCAicG9ydCIpOworCX0KKwogCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLwotCXJjID0gbXZfaW5pdF9ob3N0KGhvc3QsIGJvYXJkX2lkeCk7CisJcmMgPSBtdl9pbml0X2hvc3QoaG9zdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTQyNDcsNiArNDMzMiwyNyBAQAogCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIG12X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJIElTX0dFTl9JKGhwcml2KSA/ICZtdjVfc2h0IDogJm12Nl9zaHQpOwogfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG12X3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLworCXJjID0gbXZfaW5pdF9ob3N0KGhvc3QpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKICNlbmRpZgogCiBzdGF0aWMgaW50IG12X3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IDYzYzE0M2UuLmMwYzVhNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTcwMyw5ICs3MDMsOSBAQAogCXJldHVybiAwOwogCiBvdXRfdW5yZWdpc3RlcjoKKwlrb2JqZWN0X3B1dCgmcHJpdi0+a29iaik7CiAJa2ZyZWUoZHJ2LT5wKTsKIAlkcnYtPnAgPSBOVUxMOwotCWtvYmplY3RfcHV0KCZwcml2LT5rb2JqKTsKIG91dF9wdXRfYnVzOgogCWJ1c19wdXQoYnVzKTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCBmMTI5MGNiLi4yODIwMjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTQ0Niw3ICs0NDYsOCBAQAogICogQGRldjogZGV2aWNlLgogICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwotaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQoraW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWlmIChkZXYpCkBAIC00NTksNyArNDYwLDggQEAKICAqIEBkZXY6IGRldmljZS4KICAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KLXZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpCit2b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQljb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpZiAoZGV2KQogCQlzeXNmc19yZW1vdmVfZmlsZSgmZGV2LT5rb2JqLCAmYXR0ci0+YXR0cik7CkBAIC00NzAsNyArNDcyLDggQEAKICAqIEBkZXY6IGRldmljZS4KICAqIEBhdHRyOiBkZXZpY2UgYmluYXJ5IGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCi1pbnQgZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQoraW50IGRldmljZV9jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaW50IGVycm9yID0gLUVJTlZBTDsKIAlpZiAoZGV2KQpAQCAtNDg0LDcgKzQ4Nyw4IEBACiAgKiBAZGV2OiBkZXZpY2UuCiAgKiBAYXR0cjogZGV2aWNlIGJpbmFyeSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwotdm9pZCBkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCit2b2lkIGRldmljZV9yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogCWlmIChkZXYpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCBhdHRyKTsKQEAgLTkwNSw4ICs5MDksMTAgQEAKIAkJZGV2LT5pbml0X25hbWUgPSBOVUxMOwogCX0KIAotCWlmICghZGV2X25hbWUoZGV2KSkKKwlpZiAoIWRldl9uYW1lKGRldikpIHsKKwkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIG5hbWVfZXJyb3I7CisJfQogCiAJcHJfZGVidWcoImRldmljZTogJyVzJzogJXNcbiIsIGRldl9uYW1lKGRldiksIF9fZnVuY19fKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwppbmRleCA1MDM3NWJiLi4wOTBkZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYworKysgYi9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYwpAQCAtMzIsNyArMzIsNyBAQAogc3RhdGljIGludCBkZXZfbW91bnQ7CiAjZW5kaWYKIAotc3RhdGljIHJ3bG9ja190IGRpcmxvY2s7CitzdGF0aWMgREVGSU5FX01VVEVYKGRpcmxvY2spOwogCiBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9wYXJhbShjaGFyICpzdHIpCiB7CkBAIC05Myw3ICs5Myw3IEBACiB7CiAJaW50IGVycjsKIAotCXJlYWRfbG9jaygmZGlybG9jayk7CisJbXV0ZXhfbG9jaygmZGlybG9jayk7CiAJZXJyID0gZGV2X21rZGlyKG5vZGVwYXRoLCAwNzU1KTsKIAlpZiAoZXJyID09IC1FTk9FTlQpIHsKIAkJY2hhciAqcGF0aDsKQEAgLTEwMSw4ICsxMDEsMTAgQEAKIAogCQkvKiBwYXJlbnQgZGlyZWN0b3JpZXMgZG8gbm90IGV4aXN0LCBjcmVhdGUgdGhlbSAqLwogCQlwYXRoID0ga3N0cmR1cChub2RlcGF0aCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGF0aCkKLQkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoIXBhdGgpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQogCQlzID0gcGF0aDsKIAkJZm9yICg7OykgewogCQkJcyA9IHN0cmNocihzLCAnLycpOwpAQCAtMTE3LDcgKzExOSw4IEBACiAJCX0KIAkJa2ZyZWUocGF0aCk7CiAJfQotCXJlYWRfdW5sb2NrKCZkaXJsb2NrKTsKK291dDoKKwltdXRleF91bmxvY2soJmRpcmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIyOSw3ICsyMzIsNyBAQAogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl3cml0ZV9sb2NrKCZkaXJsb2NrKTsKKwltdXRleF9sb2NrKCZkaXJsb2NrKTsKIAlmb3IgKDs7KSB7CiAJCWNoYXIgKmJhc2U7CiAKQEAgLTI0MSw3ICsyNDQsNyBAQAogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfQotCXdyaXRlX3VubG9jaygmZGlybG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkaXJsb2NrKTsKIAogCWtmcmVlKHBhdGgpOwogCXJldHVybiBlcnI7CkBAIC0zNTIsOCArMzU1LDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCi0Jcndsb2NrX2luaXQoJmRpcmxvY2spOwotCiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZGV2X2ZzX3R5cGUpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJkZXZ0bXBmczogdW5hYmxlIHRvIHJlZ2lzdGVyIGRldnRtcGZzICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwppbmRleCBmMzY3ODg1Li45MGM5ZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCkBAIC05OCw3ICs5OCw3IEBACiAgKiBAYXR0cjogZHJpdmVyIGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCiBpbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsCi0JCSAgICAgICBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cikKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKQogewogCWludCBlcnJvcjsKIAlpZiAoZHJ2KQpAQCAtMTE1LDcgKzExNSw3IEBACiAgKiBAYXR0cjogZHJpdmVyIGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCiB2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAotCQkJc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpCisJCQljb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpZiAoZHJ2KQogCQlzeXNmc19yZW1vdmVfZmlsZSgmZHJ2LT5wLT5rb2JqLCAmYXR0ci0+YXR0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKaW5kZXggYzRjOGYyZS4uZDdkNzdkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jCisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwpAQCAtNjMsNiArNjMsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIpOwogCitzdGF0aWMgQVRPTUlDX05PVElGSUVSX0hFQUQobWVtb3J5X2lzb2xhdGVfY2hhaW4pOworCitpbnQgcmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZtZW1vcnlfaXNvbGF0ZV9jaGFpbiwgbmIpOworfQorRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcik7CisKK3ZvaWQgdW5yZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZtZW1vcnlfaXNvbGF0ZV9jaGFpbiwgbmIpOworfQorRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKTsKKwogLyoKICAqIHJlZ2lzdGVyX21lbW9yeSAtIFNldHVwIGEgc3lzZnMgZGV2aWNlIGZvciBhIG1lbW9yeSBibG9jawogICovCkBAIC0xNTcsNiArMTcxLDExIEBACiAJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm1lbW9yeV9jaGFpbiwgdmFsLCB2KTsKIH0KIAoraW50IG1lbW9yeV9pc29sYXRlX25vdGlmeSh1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKK3sKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJm1lbW9yeV9pc29sYXRlX2NoYWluLCB2YWwsIHYpOworfQorCiAvKgogICogTUVNT1JZX0hPVFBMVUcgZGVwZW5kcyBvbiBTUEFSU0VNRU0gaW4gbW0vS2NvbmZpZywgc28gaXQgaXMKICAqIE9LIHRvIGhhdmUgZGlyZWN0IHJlZmVyZW5jZXMgdG8gc3BhcnNlbWVtIHZhcmlhYmxlcyBpbiBoZXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCA5ZDJlZTI1Li41OGVmYWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtNDQxLDYgKzQ0MSw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEpOwogCiBzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggMWEyMTZjMS4uNDhhZGY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC0xNjEsNiArMTYxLDMyIEBACiAJbGlzdF9tb3ZlX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fbGlzdCk7CiB9CiAKK3N0YXRpYyBrdGltZV90IGluaXRjYWxsX2RlYnVnX3N0YXJ0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlrdGltZV90IGNhbGx0aW1lID0ga3RpbWVfc2V0KDAsIDApOworCisJaWYgKGluaXRjYWxsX2RlYnVnKSB7CisJCXByX2luZm8oImNhbGxpbmcgICVzKyBAICVpXG4iLAorCQkJCWRldl9uYW1lKGRldiksIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKKwkJY2FsbHRpbWUgPSBrdGltZV9nZXQoKTsKKwl9CisKKwlyZXR1cm4gY2FsbHRpbWU7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRjYWxsX2RlYnVnX3JlcG9ydChzdHJ1Y3QgZGV2aWNlICpkZXYsIGt0aW1lX3QgY2FsbHRpbWUsCisJCQkJICBpbnQgZXJyb3IpCit7CisJa3RpbWVfdCBkZWx0YSwgcmV0dGltZTsKKworCWlmIChpbml0Y2FsbF9kZWJ1ZykgeworCQlyZXR0aW1lID0ga3RpbWVfZ2V0KCk7CisJCWRlbHRhID0ga3RpbWVfc3ViKHJldHRpbWUsIGNhbGx0aW1lKTsKKwkJcHJfaW5mbygiY2FsbCAlcysgcmV0dXJuZWQgJWQgYWZ0ZXIgJUxkIHVzZWNzXG4iLCBkZXZfbmFtZShkZXYpLAorCQkJZXJyb3IsICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwKTsKKwl9Cit9CisKIC8qKgogICogcG1fb3AgLSBFeGVjdXRlIHRoZSBQTSBvcGVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIGdpdmVuIFBNIGV2ZW50LgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KQEAgLTE3MiwxMyArMTk4LDkgQEAKIAkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWt0aW1lX3QgY2FsbHRpbWUsIGRlbHRhLCByZXR0aW1lOworCWt0aW1lX3QgY2FsbHRpbWU7CiAKLQlpZiAoaW5pdGNhbGxfZGVidWcpIHsKLQkJcHJfaW5mbygiY2FsbGluZyAgJXMrIEAgJWlcbiIsCi0JCQkJZGV2X25hbWUoZGV2KSwgdGFza19waWRfbnIoY3VycmVudCkpOwotCQljYWxsdGltZSA9IGt0aW1lX2dldCgpOwotCX0KKwljYWxsdGltZSA9IGluaXRjYWxsX2RlYnVnX3N0YXJ0KGRldik7CiAKIAlzd2l0Y2ggKHN0YXRlLmV2ZW50KSB7CiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKQEAgLTIyNywxMiArMjQ5LDcgQEAKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KIAotCWlmIChpbml0Y2FsbF9kZWJ1ZykgewotCQlyZXR0aW1lID0ga3RpbWVfZ2V0KCk7Ci0JCWRlbHRhID0ga3RpbWVfc3ViKHJldHRpbWUsIGNhbGx0aW1lKTsKLQkJcHJfaW5mbygiY2FsbCAlcysgcmV0dXJuZWQgJWQgYWZ0ZXIgJUxkIHVzZWNzXG4iLCBkZXZfbmFtZShkZXYpLAotCQkJZXJyb3IsICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwKTsKLQl9CisJaW5pdGNhbGxfZGVidWdfcmVwb3J0KGRldiwgY2FsbHRpbWUsIGVycm9yKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTMwOSw4ICszMjYsOSBAQAogCWlmIChpbml0Y2FsbF9kZWJ1ZykgewogCQlyZXR0aW1lID0ga3RpbWVfZ2V0KCk7CiAJCWRlbHRhID0ga3RpbWVfc3ViKHJldHRpbWUsIGNhbGx0aW1lKTsKLQkJcHJpbnRrKCJpbml0Y2FsbCAlc19pKyByZXR1cm5lZCAlZCBhZnRlciAlTGQgdXNlY3NcbiIsIGRldl9uYW1lKGRldiksCi0JCQllcnJvciwgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhkZWx0YSkgPj4gMTApOworCQlwcmludGsoImluaXRjYWxsICVzX2krIHJldHVybmVkICVkIGFmdGVyICVMZCB1c2Vjc1xuIiwKKwkJCWRldl9uYW1lKGRldiksIGVycm9yLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhkZWx0YSkgPj4gMTApOwogCX0KIAogCXJldHVybiBlcnJvcjsKQEAgLTM1NCw2ICszNzIsMjMgQEAKIAkJa29iamVjdF9uYW1lKCZkZXYtPmtvYmopLCBwbV92ZXJiKHN0YXRlLmV2ZW50KSwgaW5mbywgZXJyb3IpOwogfQogCitzdGF0aWMgdm9pZCBkcG1fc2hvd190aW1lKGt0aW1lX3Qgc3RhcnR0aW1lLCBwbV9tZXNzYWdlX3Qgc3RhdGUsIGNoYXIgKmluZm8pCit7CisJa3RpbWVfdCBjYWxsdGltZTsKKwlzNjQgdXNlY3M2NDsKKwlpbnQgdXNlY3M7CisKKwljYWxsdGltZSA9IGt0aW1lX2dldCgpOworCXVzZWNzNjQgPSBrdGltZV90b19ucyhrdGltZV9zdWIoY2FsbHRpbWUsIHN0YXJ0dGltZSkpOworCWRvX2Rpdih1c2VjczY0LCBOU0VDX1BFUl9VU0VDKTsKKwl1c2VjcyA9IHVzZWNzNjQ7CisJaWYgKHVzZWNzID09IDApCisJCXVzZWNzID0gMTsKKwlwcl9pbmZvKCJQTTogJXMlcyVzIG9mIGRldmljZXMgY29tcGxldGUgYWZ0ZXIgJWxkLiUwM2xkIG1zZWNzXG4iLAorCQlpbmZvID86ICIiLCBpbmZvID8gIiAiIDogIiIsIHBtX3ZlcmIoc3RhdGUuZXZlbnQpLAorCQl1c2VjcyAvIFVTRUNfUEVSX01TRUMsIHVzZWNzICUgVVNFQ19QRVJfTVNFQyk7Cit9CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXN1bWUgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKgpAQCAtMzkwLDYgKzQyNSw3IEBACiB2b2lkIGRwbV9yZXN1bWVfbm9pcnEocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSBmYWxzZTsKQEAgLTQwMywxMSArNDM5LDMyIEBACiAJCQkJcG1fZGV2X2VycihkZXYsIHN0YXRlLCAiIGVhcmx5IiwgZXJyb3IpOwogCQl9CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCWRwbV9zaG93X3RpbWUoc3RhcnR0aW1lLCBzdGF0ZSwgImVhcmx5Iik7CiAJcmVzdW1lX2RldmljZV9pcnFzKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkcG1fcmVzdW1lX25vaXJxKTsKIAogLyoqCisgKiBsZWdhY3lfcmVzdW1lIC0gRXhlY3V0ZSBhIGxlZ2FjeSAoYnVzIG9yIGNsYXNzKSByZXN1bWUgY2FsbGJhY2sgZm9yIGRldmljZS4KKyAqIGRldjogRGV2aWNlIHRvIHJlc3VtZS4KKyAqIGNiOiBSZXN1bWUgY2FsbGJhY2sgdG8gZXhlY3V0ZS4KKyAqLworc3RhdGljIGludCBsZWdhY3lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50ICgqY2IpKHN0cnVjdCBkZXZpY2UgKmRldikpCit7CisJaW50IGVycm9yOworCWt0aW1lX3QgY2FsbHRpbWU7CisKKwljYWxsdGltZSA9IGluaXRjYWxsX2RlYnVnX3N0YXJ0KGRldik7CisKKwllcnJvciA9IGNiKGRldik7CisJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGNiLCBlcnJvcik7CisKKwlpbml0Y2FsbF9kZWJ1Z19yZXBvcnQoZGV2LCBjYWxsdGltZSwgZXJyb3IpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKICAqIGRldmljZV9yZXN1bWUgLSBFeGVjdXRlICJyZXN1bWUiIGNhbGxiYWNrcyBmb3IgZ2l2ZW4gZGV2aWNlLgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgpAQCAtNDI3LDcgKzQ4NCw3IEBACiAJCQllcnJvciA9IHBtX29wKGRldiwgZGV2LT5idXMtPnBtLCBzdGF0ZSk7CiAJCX0gZWxzZSBpZiAoZGV2LT5idXMtPnJlc3VtZSkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAibGVnYWN5ICIpOwotCQkJZXJyb3IgPSBkZXYtPmJ1cy0+cmVzdW1lKGRldik7CisJCQllcnJvciA9IGxlZ2FjeV9yZXN1bWUoZGV2LCBkZXYtPmJ1cy0+cmVzdW1lKTsKIAkJfQogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIEVuZDsKQEAgLTQ0OCw3ICs1MDUsNyBAQAogCQkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+Y2xhc3MtPnBtLCBzdGF0ZSk7CiAJCX0gZWxzZSBpZiAoZGV2LT5jbGFzcy0+cmVzdW1lKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJsZWdhY3kgY2xhc3MgIik7Ci0JCQllcnJvciA9IGRldi0+Y2xhc3MtPnJlc3VtZShkZXYpOworCQkJZXJyb3IgPSBsZWdhY3lfcmVzdW1lKGRldiwgZGV2LT5jbGFzcy0+cmVzdW1lKTsKIAkJfQogCX0KICBFbmQ6CkBAIC00NjgsNiArNTI1LDcgQEAKIHN0YXRpYyB2b2lkIGRwbV9yZXN1bWUocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CkBAIC00OTYsNiArNTU0LDcgQEAKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsICZkcG1fbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCWRwbV9zaG93X3RpbWUoc3RhcnR0aW1lLCBzdGF0ZSwgTlVMTCk7CiB9CiAKIC8qKgpAQCAtNTQ4LDcgKzYwNyw3IEBACiAJCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAKIAkJCWRldmljZV9jb21wbGV0ZShkZXYsIHN0YXRlKTsKLQkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCQkJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwogCiAJCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQl9CkBAIC02MjgsNiArNjg3LDcgQEAKIGludCBkcG1fc3VzcGVuZF9ub2lycShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OworCWt0aW1lX3Qgc3RhcnR0aW1lID0ga3RpbWVfZ2V0KCk7CiAJaW50IGVycm9yID0gMDsKIAogCXN1c3BlbmRfZGV2aWNlX2lycXMoKTsKQEAgLTY0MywxMSArNzAzLDM0IEBACiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCWlmIChlcnJvcikKIAkJZHBtX3Jlc3VtZV9ub2lycShyZXN1bWVfZXZlbnQoc3RhdGUpKTsKKwllbHNlCisJCWRwbV9zaG93X3RpbWUoc3RhcnR0aW1lLCBzdGF0ZSwgImxhdGUiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkcG1fc3VzcGVuZF9ub2lycSk7CiAKIC8qKgorICogbGVnYWN5X3N1c3BlbmQgLSBFeGVjdXRlIGEgbGVnYWN5IChidXMgb3IgY2xhc3MpIHN1c3BlbmQgY2FsbGJhY2sgZm9yIGRldmljZS4KKyAqIGRldjogRGV2aWNlIHRvIHN1c3BlbmQuCisgKiBjYjogU3VzcGVuZCBjYWxsYmFjayB0byBleGVjdXRlLgorICovCitzdGF0aWMgaW50IGxlZ2FjeV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLAorCQkJICBpbnQgKCpjYikoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpKQoreworCWludCBlcnJvcjsKKwlrdGltZV90IGNhbGx0aW1lOworCisJY2FsbHRpbWUgPSBpbml0Y2FsbF9kZWJ1Z19zdGFydChkZXYpOworCisJZXJyb3IgPSBjYihkZXYsIHN0YXRlKTsKKwlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoY2IsIGVycm9yKTsKKworCWluaXRjYWxsX2RlYnVnX3JlcG9ydChkZXYsIGNhbGx0aW1lLCBlcnJvcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgogICogZGV2aWNlX3N1c3BlbmQgLSBFeGVjdXRlICJzdXNwZW5kIiBjYWxsYmFja3MgZm9yIGdpdmVuIGRldmljZS4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KQEAgLTY2NCw4ICs3NDcsNyBAQAogCQkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+Y2xhc3MtPnBtLCBzdGF0ZSk7CiAJCX0gZWxzZSBpZiAoZGV2LT5jbGFzcy0+c3VzcGVuZCkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAibGVnYWN5IGNsYXNzICIpOwotCQkJZXJyb3IgPSBkZXYtPmNsYXNzLT5zdXNwZW5kKGRldiwgc3RhdGUpOwotCQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+Y2xhc3MtPnN1c3BlbmQsIGVycm9yKTsKKwkJCWVycm9yID0gbGVnYWN5X3N1c3BlbmQoZGV2LCBzdGF0ZSwgZGV2LT5jbGFzcy0+c3VzcGVuZCk7CiAJCX0KIAkJaWYgKGVycm9yKQogCQkJZ290byBFbmQ7CkBAIC02ODYsOCArNzY4LDcgQEAKIAkJCWVycm9yID0gcG1fb3AoZGV2LCBkZXYtPmJ1cy0+cG0sIHN0YXRlKTsKIAkJfSBlbHNlIGlmIChkZXYtPmJ1cy0+c3VzcGVuZCkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAibGVnYWN5ICIpOwotCQkJZXJyb3IgPSBkZXYtPmJ1cy0+c3VzcGVuZChkZXYsIHN0YXRlKTsKLQkJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkZXYtPmJ1cy0+c3VzcGVuZCwgZXJyb3IpOworCQkJZXJyb3IgPSBsZWdhY3lfc3VzcGVuZChkZXYsIHN0YXRlLCBkZXYtPmJ1cy0+c3VzcGVuZCk7CiAJCX0KIAl9CiAgRW5kOgpAQCAtNzAzLDYgKzc4NCw3IEBACiBzdGF0aWMgaW50IGRwbV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAlpbnQgZXJyb3IgPSAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwpAQCAtNzI4LDYgKzgxMCw4IEBACiAJfQogCWxpc3Rfc3BsaWNlKCZsaXN0LCBkcG1fbGlzdC5wcmV2KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CisJaWYgKCFlcnJvcikKKwkJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCBOVUxMKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTc5Niw3ICs4ODAsNyBAQAogCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOwogCQlpZiAocG1fcnVudGltZV9iYXJyaWVyKGRldikgJiYgZGV2aWNlX21heV93YWtldXAoZGV2KSkgewogCQkJLyogV2FrZS11cCByZXF1ZXN0ZWQgZHVyaW5nIHN5c3RlbSBzbGVlcCB0cmFuc2l0aW9uLiAqLwotCQkJcG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7CisJCQlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CiAJCQllcnJvciA9IC1FQlVTWTsKIAkJfSBlbHNlIHsKIAkJCWVycm9yID0gZGV2aWNlX3ByZXBhcmUoZGV2LCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwppbmRleCA0MGQ3NzIwLi5mOGIwNDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKQEAgLTg1LDYgKzg1LDE5IEBACiAJCWRldi0+YnVzLT5wbS0+cnVudGltZV9pZGxlKGRldik7CiAKIAkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwl9IGVsc2UgaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtICYmIGRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfaWRsZSkgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJZGV2LT50eXBlLT5wbS0+cnVudGltZV9pZGxlKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwl9IGVsc2UgaWYgKGRldi0+Y2xhc3MgJiYgZGV2LT5jbGFzcy0+cG0KKwkgICAgJiYgZGV2LT5jbGFzcy0+cG0tPnJ1bnRpbWVfaWRsZSkgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJZGV2LT5jbGFzcy0+cG0tPnJ1bnRpbWVfaWRsZShkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CiAJfQogCiAJZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbiA9IGZhbHNlOwpAQCAtMTk0LDYgKzIwNywyMiBAQAogCiAJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CiAJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKKwl9IGVsc2UgaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtCisJICAgICYmIGRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfc3VzcGVuZCkgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJcmV0dmFsID0gZGV2LT50eXBlLT5wbS0+cnVudGltZV9zdXNwZW5kKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOworCX0gZWxzZSBpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5wbQorCSAgICAmJiBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9zdXNwZW5kKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlyZXR2YWwgPSBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9zdXNwZW5kKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOwogCX0gZWxzZSB7CiAJCXJldHZhbCA9IC1FTk9TWVM7CiAJfQpAQCAtMzU5LDYgKzM4OCwyMiBAQAogCiAJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CiAJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKKwl9IGVsc2UgaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtCisJICAgICYmIGRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfcmVzdW1lKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlyZXR2YWwgPSBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKKwl9IGVsc2UgaWYgKGRldi0+Y2xhc3MgJiYgZGV2LT5jbGFzcy0+cG0KKwkgICAgJiYgZGV2LT5jbGFzcy0+cG0tPnJ1bnRpbWVfcmVzdW1lKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlyZXR2YWwgPSBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9yZXN1bWUoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CiAJfSBlbHNlIHsKIAkJcmV0dmFsID0gLUVOT1NZUzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCBlYjRmYTE5Li5jZTFmYTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTcxMDEsNyArNzEwMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgREFDOTYwX3ByaXZkYXRhIERBQzk2MF9MUF9wcml2ZGF0YSA9IHsKIAkuSGFyZHdhcmVUeXBlID0JCURBQzk2MF9MUF9Db250cm9sbGVyLAotCS5GaXJtd2FyZVR5cGUgCT0JREFDOTYwX0xQX0NvbnRyb2xsZXIsCisJLkZpcm13YXJlVHlwZSAJPQlEQUM5NjBfVjJfQ29udHJvbGxlciwKIAkuSW50ZXJydXB0SGFuZGxlciA9CURBQzk2MF9MUF9JbnRlcnJ1cHRIYW5kbGVyLAogCS5NZW1vcnlXaW5kb3dTaXplID0JREFDOTYwX0xQX1JlZ2lzdGVyV2luZG93U2l6ZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCmluZGV4IDEzYmI2OWQuLjY0YTIyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCkBAIC03MzUsMjEgKzczNSw2IEBACiAJcGFydF9zdGF0X3VubG9jaygpOwogfQogCi0vKgotICogRW5zdXJlIHdlIGRvbid0IGNyZWF0ZSBhbGlhc2VzIGluIFZJIGNhY2hlcwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWtpbGxhbGlhcyhzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCWludCBpOwotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpCi0JCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSwgMCkgewotCQkJZmx1c2hfZGNhY2hlX3BhZ2UoYnYtPmJ2X3BhZ2UpOwotCQl9Ci19Ci0KIHZvaWQKIGFvZWNtZF9hdGFfcnNwKHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC04NzEsNyArODU2LDcgQEAKIAkJaWYgKGJ1Zi0+ZmxhZ3MgJiBCVUZGTF9GQUlMKQogCQkJYmlvX2VuZGlvKGJ1Zi0+YmlvLCAtRUlPKTsKIAkJZWxzZSB7Ci0JCQlraWxsYWxpYXMoYnVmLT5iaW8pOworCQkJYmlvX2ZsdXNoX2RjYWNoZV9wYWdlcyhidWYtPmJpbyk7CiAJCQliaW9fZW5kaW8oYnVmLT5iaW8sIDApOwogCQl9CiAJCW1lbXBvb2xfZnJlZShidWYsIGQtPmJ1ZnBvb2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmggYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaAppbmRleCAyMzEyZDc4Li5jOTc1NTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaApAQCAtMTQ5MCw3ICsxNDkwLDcgQEAKIAogLyogZHJiZF9wcm9jLmMgKi8KIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRyYmRfcHJvYzsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRyYmRfcHJvY19mb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJiZF9wcm9jX2ZvcHM7CiBleHRlcm4gY29uc3QgY2hhciAqZHJiZF9jb25uX3N0cihlbnVtIGRyYmRfY29ubnMgcyk7CiBleHRlcm4gY29uc3QgY2hhciAqZHJiZF9yb2xlX3N0cihlbnVtIGRyYmRfcm9sZSBzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jCmluZGV4IDE1N2QxZTQuLjkzNDhmMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RyYmQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpAQCAtMTUxLDcgKzE1MCw3IEBACiAKIERFRklORV9SQVRFTElNSVRfU1RBVEUoZHJiZF9yYXRlbGltaXRfc3RhdGUsIDUgKiBIWiwgNSk7CiAKLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZHJiZF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRyYmRfb3BzID0gewogCS5vd25lciA9ICAgVEhJU19NT0RVTEUsCiAJLm9wZW4gPSAgICBkcmJkX29wZW4sCiAJLnJlbGVhc2UgPSBkcmJkX3JlbGVhc2UsCkBAIC0zNjIzLDcgKzM2MjIsNyBAQAogewogCWxvbmcgcmVmcmVzaDsKIAotCWlmICgtLXJzcC0+Y291bnQgPCAwKSB7CisJaWYgKCFyc3AtPmNvdW50LS0pIHsKIAkJZ2V0X3JhbmRvbV9ieXRlcygmcmVmcmVzaCwgc2l6ZW9mKHJlZnJlc2gpKTsKIAkJcnNwLT5zdGF0ZSArPSByZWZyZXNoOwogCQlyc3AtPmNvdW50ID0gRkFVTFRfUkFORE9NX1JFRlJFU0g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9wcm9jLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9wcm9jLmMKaW5kZXggYmRkMGI0OS4uZGY4YWQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcHJvYy5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3Byb2MuYwpAQCAtMzgsNyArMzgsNyBAQAogCiAKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHJiZF9wcm9jOwotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcmJkX3Byb2NfZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJiZF9wcm9jX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGRyYmRfcHJvY19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKaW5kZXggYzU0OGYyNC4uMjU5YzEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RyYmQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3dvcmtlci5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfd29ya2VyLmMKaW5kZXggZWQ4Nzk2Zi4uYjQ1M2MyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfd29ya2VyLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfd29ya2VyLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RyYmQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CkBAIC0zNCw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9tZ19kaXNrLmMgYi9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYwppbmRleCBlMDMzOWFhLi4wMmIyNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYworKysgYi9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYwpAQCAtODYwLDcgKzg2MCw3IEBACiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gcHJvYmVfZXJyXzI7CiAJfQotCWhvc3QtPmRldl9iYXNlID0gaW9yZW1hcChyc2MtPnN0YXJ0ICwgcnNjLT5lbmQgKyAxKTsKKwlob3N0LT5kZXZfYmFzZSA9IGlvcmVtYXAocnNjLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyc2MpKTsKIAlpZiAoIWhvc3QtPmRldl9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6JWQgaW9yZW1hcCBmYWlsXG4iLAogCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCA0ZDI5MDU5Li5hNjk5ZjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKQEAgLTMwNyw2ICszMDcsNyBAQAogCQlyZXR1cm47CiAKIAl1c2JfYW5jaG9yX3VyYih1cmIsICZkYXRhLT5idWxrX2FuY2hvcik7CisJdXNiX21hcmtfbGFzdF9idXN5KGRhdGEtPnVkZXYpOwogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9jb3JlLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwppbmRleCBlOTg5ZjY3Li4zZDljNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwpAQCAtMTU4LDEwICsxNTgsMTEgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnJuZ19tdXRleCk7CiBvdXQ6CiAJcmV0dXJuIHJldCA/IDogZXJyOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnJuZ19tdXRleCk7CisJZ290byBvdXQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwppbmRleCA2NzljZDA4Li4xNzZmMTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwpAQCAtMzIwNCw3ICszMjA0LDcgQEAKICNpZmRlZiBDT05GSUdfQUNQSQogCXNwbWlfZmluZF9ibWMoKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19QTlAKKyNpZmRlZiBDT05GSUdfQUNQSQogCXBucF9yZWdpc3Rlcl9kcml2ZXIoJmlwbWlfcG5wX2RyaXZlcik7CiAjZW5kaWYKIApAQCAtMzMzMCw3ICszMzMwLDcgQEAKICNpZmRlZiBDT05GSUdfUENJCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpcG1pX3BjaV9kcml2ZXIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BOUAorI2lmZGVmIENPTkZJR19BQ1BJCiAJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZpcG1pX3BucF9kcml2ZXIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCBkMzQwMGIyLi43ZDczY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAl1OCB1cGRhdGVfZmxvd19jb250cm9sOwogCXN0cnVjdCBjdHJsX3VsIGN0cmxfdWw7CiAJc3RydWN0IGN0cmxfZGwgY3RybF9kbDsKLQlzdHJ1Y3Qga2ZpZm8gKmZpZm9fdWw7CisJc3RydWN0IGtmaWZvIGZpZm9fdWw7CiAJdm9pZCBfX2lvbWVtICpkbF9hZGRyWzJdOwogCXUzMiBkbF9zaXplWzJdOwogCXU4IHRvZ2dsZV9kbDsKQEAgLTY4NSw4ICs2ODUsNiBAQAogCQlkdW1wX3RhYmxlKGRjKTsKIAogCQlmb3IgKGkgPSBQT1JUX01ETTsgaSA8IE1BWF9QT1JUOyBpKyspIHsKLQkJCWRjLT5wb3J0W2ldLmZpZm9fdWwgPQotCQkJICAgIGtmaWZvX2FsbG9jKEZJRk9fQlVGRkVSX1NJWkVfVUwsIEdGUF9BVE9NSUMsIE5VTEwpOwogCQkJbWVtc2V0KCZkYy0+cG9ydFtpXS5jdHJsX2RsLCAwLCBzaXplb2Yoc3RydWN0IGN0cmxfZGwpKTsKIAkJCW1lbXNldCgmZGMtPnBvcnRbaV0uY3RybF91bCwgMCwgc2l6ZW9mKHN0cnVjdCBjdHJsX3VsKSk7CiAJCX0KQEAgLTc5OCw3ICs3OTYsNyBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogCS8qIEdldCBkYXRhIGZyb20gdHR5IGFuZCBwbGFjZSBpbiBidWYgZm9yIG5vdyAqLwotCXNpemUgPSBfX2tmaWZvX2dldChwb3J0LT5maWZvX3VsLCBkYy0+c2VuZF9idWYsCisJc2l6ZSA9IGtmaWZvX291dCgmcG9ydC0+Zmlmb191bCwgZGMtPnNlbmRfYnVmLAogCQkJICAgdWxfc2l6ZSA8IFNFTkRfQlVGX01BWCA/IHVsX3NpemUgOiBTRU5EX0JVRl9NQVgpOwogCiAJaWYgKHNpemUgPT0gMCkgewpAQCAtOTg4LDExICs5ODYsMTEgQEAKIAogCX0gZWxzZSBpZiAob2xkX2N0cmwuQ1RTID09IDAgJiYgY3RybF9kbC5DVFMgPT0gMSkgewogCi0JCWlmIChfX2tmaWZvX2xlbihkYy0+cG9ydFtwb3J0XS5maWZvX3VsKSkgeworCQlpZiAoa2ZpZm9fbGVuKCZkYy0+cG9ydFtwb3J0XS5maWZvX3VsKSkgewogCQkJREJHMSgiRW5hYmxlIGludGVycnVwdCAoMHglMDRYKSBvbiBwb3J0OiAlZCIsCiAJCQkJZW5hYmxlX2llciwgcG9ydCk7CiAJCQlEQkcxKCJEYXRhIGluIGJ1ZmZlciBbJWRdLCBlbmFibGUgdHJhbnNtaXQhICIsCi0JCQkJX19rZmlmb19sZW4oZGMtPnBvcnRbcG9ydF0uZmlmb191bCkpOworCQkJCWtmaWZvX2xlbigmZGMtPnBvcnRbcG9ydF0uZmlmb191bCkpOwogCQkJZW5hYmxlX3RyYW5zbWl0X3VsKHBvcnQsIGRjKTsKIAkJfSBlbHNlIHsKIAkJCURCRzEoIk5vIGRhdGEgaW4gYnVmZmVyLi4uIik7CkBAIC0xNDMzLDYgKzE0MzEsMTYgQEAKIAkJZ290byBlcnJfZnJlZV9zYnVmOwogCX0KIAorCWZvciAoaSA9IFBPUlRfTURNOyBpIDwgTUFYX1BPUlQ7IGkrKykgeworCQlpZiAoa2ZpZm9fYWxsb2MoJmRjLT5wb3J0W2ldLmZpZm9fdWwsCisJCSAgICAgIEZJRk9fQlVGRkVSX1NJWkVfVUwsIEdGUF9BVE9NSUMpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJDb3VsZCBub3QgYWxsb2NhdGUga2ZpZm8gYnVmZmVyXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9mcmVlX2tmaWZvOworCQl9CisJfQorCiAJc3Bpbl9sb2NrX2luaXQoJmRjLT5zcGluX211dGV4KTsKIAogCW5vem9taV9zZXR1cF9wcml2YXRlX2RhdGEoZGMpOwpAQCAtMTQ0NSw3ICsxNDUzLDcgQEAKIAkJCU5PWk9NSV9OQU1FLCBkYyk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsIHBkZXYtPmlycSk7Ci0JCWdvdG8gZXJyX2ZyZWVfc2J1ZjsKKwkJZ290byBlcnJfZnJlZV9rZmlmbzsKIAl9CiAKIAlEQkcxKCJiYXNlX2FkZHI6ICVwIiwgZGMtPmJhc2VfYWRkcik7CkBAIC0xNDY0LDEzICsxNDcyLDI4IEBACiAJZGMtPnN0YXRlID0gTk9aT01JX1NUQVRFX0VOQUJMRUQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1BPUlQ7IGkrKykgeworCQlzdHJ1Y3QgZGV2aWNlICp0dHlfZGV2OworCiAJCW11dGV4X2luaXQoJmRjLT5wb3J0W2ldLnR0eV9zZW0pOwogCQl0dHlfcG9ydF9pbml0KCZkYy0+cG9ydFtpXS5wb3J0KTsKLQkJdHR5X3JlZ2lzdGVyX2RldmljZShudHR5X2RyaXZlciwgZGMtPmluZGV4X3N0YXJ0ICsgaSwKKwkJdHR5X2RldiA9IHR0eV9yZWdpc3Rlcl9kZXZpY2UobnR0eV9kcml2ZXIsIGRjLT5pbmRleF9zdGFydCArIGksCiAJCQkJCQkJJnBkZXYtPmRldik7CisKKwkJaWYgKElTX0VSUih0dHlfZGV2KSkgeworCQkJcmV0ID0gUFRSX0VSUih0dHlfZGV2KTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0dHk/XG4iKTsKKwkJCWdvdG8gZXJyX2ZyZWVfdHR5OworCQl9CiAJfQorCiAJcmV0dXJuIDA7CiAKK2Vycl9mcmVlX3R0eToKKwlmb3IgKGkgPSBkYy0+aW5kZXhfc3RhcnQ7IGkgPCBkYy0+aW5kZXhfc3RhcnQgKyBNQVhfUE9SVDsgKytpKQorCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UobnR0eV9kcml2ZXIsIGkpOworZXJyX2ZyZWVfa2ZpZm86CisJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUOyBpKyspCisJCWtmaWZvX2ZyZWUoJmRjLT5wb3J0W2ldLmZpZm9fdWwpOwogZXJyX2ZyZWVfc2J1ZjoKIAlrZnJlZShkYy0+c2VuZF9idWYpOwogCWlvdW5tYXAoZGMtPmJhc2VfYWRkcik7CkBAIC0xNTM2LDggKzE1NTksNyBAQAogCWZyZWVfaXJxKHBkZXYtPmlycSwgZGMpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUOyBpKyspCi0JCWlmIChkYy0+cG9ydFtpXS5maWZvX3VsKQotCQkJa2ZpZm9fZnJlZShkYy0+cG9ydFtpXS5maWZvX3VsKTsKKwkJa2ZpZm9fZnJlZSgmZGMtPnBvcnRbaV0uZmlmb191bCk7CiAKIAlrZnJlZShkYy0+c2VuZF9idWYpOwogCkBAIC0xNjczLDcgKzE2OTUsNyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcnZhbCA9IF9fa2ZpZm9fcHV0KHBvcnQtPmZpZm9fdWwsICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCBjb3VudCk7CisJcnZhbCA9IGtmaWZvX2luKCZwb3J0LT5maWZvX3VsLCAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgY291bnQpOwogCiAJLyogbm90aWZ5IGNhcmQgKi8KIAlpZiAodW5saWtlbHkoZGMgPT0gTlVMTCkpIHsKQEAgLTE3MjEsNyArMTc0Myw3IEBACiAJaWYgKCFwb3J0LT5wb3J0LmNvdW50KQogCQlnb3RvIGV4aXQ7CiAKLQlyb29tID0gcG9ydC0+Zmlmb191bC0+c2l6ZSAtIF9fa2ZpZm9fbGVuKHBvcnQtPmZpZm9fdWwpOworCXJvb20gPSBwb3J0LT5maWZvX3VsLnNpemUgLSBrZmlmb19sZW4oJnBvcnQtPmZpZm9fdWwpOwogCiBleGl0OgogCW11dGV4X3VubG9jaygmcG9ydC0+dHR5X3NlbSk7CkBAIC0xODc4LDcgKzE5MDAsNyBAQAogCQlnb3RvIGV4aXRfaW5fYnVmZmVyOwogCX0KIAotCXJ2YWwgPSBfX2tmaWZvX2xlbihwb3J0LT5maWZvX3VsKTsKKwlydmFsID0ga2ZpZm9fbGVuKCZwb3J0LT5maWZvX3VsKTsKIAogZXhpdF9pbl9idWZmZXI6CiAJcmV0dXJuIHJ2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbndmbGFzaC5jIGIvZHJpdmVycy9jaGFyL253Zmxhc2guYwppbmRleCA4YzdkZjViLi5mODA4MTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbndmbGFzaC5jCisrKyBiL2RyaXZlcnMvY2hhci9ud2ZsYXNoLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWMyMTI4NS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IDhjMjYyYWFmNy4uYmJhNzI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00ODcsNyArNDg2LDcgQEAKIAlpbnQgY2FtZXJhX3Bvd2VyOwogCWludCBibHVldG9vdGhfcG93ZXI7CiAJc3RydWN0IG11dGV4IGxvY2s7Ci0Jc3RydWN0IGtmaWZvICpmaWZvOworCXN0cnVjdCBrZmlmbyBmaWZvOwogCXNwaW5sb2NrX3QgZmlmb19sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90IGZpZm9fcHJvY19saXN0OwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmaWZvX2FzeW5jOwpAQCAtNDk2LDcgKzQ5NSw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfam9nX2RldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9rZXlfZGV2OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBpbnB1dF93b3JrOwotCXN0cnVjdCBrZmlmbyAqaW5wdXRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gaW5wdXRfZmlmbzsKIAlzcGlubG9ja190IGlucHV0X2ZpZm9fbG9jazsKIH0gc29ueXBpX2RldmljZTsKIApAQCAtNzc3LDggKzc3Niw5IEBACiB7CiAJc3RydWN0IHNvbnlwaV9rZXlwcmVzcyBrcDsKIAotCXdoaWxlIChrZmlmb19nZXQoc29ueXBpX2RldmljZS5pbnB1dF9maWZvLCAodW5zaWduZWQgY2hhciAqKSZrcCwKLQkJCSBzaXplb2Yoa3ApKSA9PSBzaXplb2Yoa3ApKSB7CisJd2hpbGUgKGtmaWZvX291dF9sb2NrZWQoJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikma3AsCisJCQkgc2l6ZW9mKGtwKSwgJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmb19sb2NrKQorCQkJPT0gc2l6ZW9mKGtwKSkgewogCQltc2xlZXAoMTApOwogCQlpbnB1dF9yZXBvcnRfa2V5KGtwLmRldiwga3Aua2V5LCAwKTsKIAkJaW5wdXRfc3luYyhrcC5kZXYpOwpAQCAtODI3LDggKzgyNyw5IEBACiAJaWYgKGtwLmRldikgewogCQlpbnB1dF9yZXBvcnRfa2V5KGtwLmRldiwga3Aua2V5LCAxKTsKIAkJaW5wdXRfc3luYyhrcC5kZXYpOwotCQlrZmlmb19wdXQoc29ueXBpX2RldmljZS5pbnB1dF9maWZvLAotCQkJICAodW5zaWduZWQgY2hhciAqKSZrcCwgc2l6ZW9mKGtwKSk7CisJCWtmaWZvX2luX2xvY2tlZCgmc29ueXBpX2RldmljZS5pbnB1dF9maWZvLAorCQkJKHVuc2lnbmVkIGNoYXIgKikma3AsIHNpemVvZihrcCksCisJCQkmc29ueXBpX2RldmljZS5pbnB1dF9maWZvX2xvY2spOwogCQlzY2hlZHVsZV93b3JrKCZzb255cGlfZGV2aWNlLmlucHV0X3dvcmspOwogCX0KIH0KQEAgLTg4MCw3ICs4ODEsOCBAQAogCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KHNvbnlwaV9hY3BpX2RldmljZSwgMSwgZXZlbnQpOwogI2VuZGlmCiAKLQlrZmlmb19wdXQoc29ueXBpX2RldmljZS5maWZvLCAodW5zaWduZWQgY2hhciAqKSZldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisJa2ZpZm9faW5fbG9ja2VkKCZzb255cGlfZGV2aWNlLmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmV2ZW50LAorCQkJc2l6ZW9mKGV2ZW50KSwgJnNvbnlwaV9kZXZpY2UuZmlmb19sb2NrKTsKIAlraWxsX2Zhc3luYygmc29ueXBpX2RldmljZS5maWZvX2FzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzb255cGlfZGV2aWNlLmZpZm9fcHJvY19saXN0KTsKIApAQCAtOTAyLDE0ICs5MDQsMTMgQEAKIAogc3RhdGljIGludCBzb255cGlfbWlzY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmc29ueXBpX2RldmljZS5sb2NrKTsKIAkvKiBGbHVzaCBpbnB1dCBxdWV1ZSBvbiBmaXJzdCBvcGVuICovCiAJaWYgKCFzb255cGlfZGV2aWNlLm9wZW5fY291bnQpCi0JCWtmaWZvX3Jlc2V0KHNvbnlwaV9kZXZpY2UuZmlmbyk7CisJCWtmaWZvX3Jlc2V0KCZzb255cGlfZGV2aWNlLmZpZm8pOwogCXNvbnlwaV9kZXZpY2Uub3Blbl9jb3VudCsrOwogCW11dGV4X3VubG9jaygmc29ueXBpX2RldmljZS5sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE5LDE3ICs5MjAsMTggQEAKIAlzc2l6ZV90IHJldDsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKLQlpZiAoKGtmaWZvX2xlbihzb255cGlfZGV2aWNlLmZpZm8pID09IDApICYmCisJaWYgKChrZmlmb19sZW4oJnNvbnlwaV9kZXZpY2UuZmlmbykgPT0gMCkgJiYKIAkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc29ueXBpX2RldmljZS5maWZvX3Byb2NfbGlzdCwKLQkJCQkgICAgICAga2ZpZm9fbGVuKHNvbnlwaV9kZXZpY2UuZmlmbykgIT0gMCk7CisJCQkJICAgICAgIGtmaWZvX2xlbigmc29ueXBpX2RldmljZS5maWZvKSAhPSAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJd2hpbGUgKHJldCA8IGNvdW50ICYmCi0JICAgICAgIChrZmlmb19nZXQoc29ueXBpX2RldmljZS5maWZvLCAmYywgc2l6ZW9mKGMpKSA9PSBzaXplb2YoYykpKSB7CisJICAgICAgIChrZmlmb19vdXRfbG9ja2VkKCZzb255cGlfZGV2aWNlLmZpZm8sICZjLCBzaXplb2YoYyksCisJCQkJICZzb255cGlfZGV2aWNlLmZpZm9fbG9jaykgPT0gc2l6ZW9mKGMpKSkgewogCQlpZiAocHV0X3VzZXIoYywgYnVmKyspKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldCsrOwpAQCAtOTQ2LDE1ICs5NDgsMTUgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc29ueXBpX21pc2NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlwb2xsX3dhaXQoZmlsZSwgJnNvbnlwaV9kZXZpY2UuZmlmb19wcm9jX2xpc3QsIHdhaXQpOwotCWlmIChrZmlmb19sZW4oc29ueXBpX2RldmljZS5maWZvKSkKKwlpZiAoa2ZpZm9fbGVuKCZzb255cGlfZGV2aWNlLmZpZm8pKQogCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzb255cGlfbWlzY19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnAsCitzdGF0aWMgbG9uZyBzb255cGlfbWlzY19pb2N0bChzdHJ1Y3QgZmlsZSAqZnAsCiAJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWludCByZXQgPSAwOworCWxvbmcgcmV0ID0gMDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAl1OCB2YWw4OwogCXUxNiB2YWwxNjsKQEAgLTEwNzAsNyArMTA3Miw4IEBACiAJLm9wZW4JCT0gc29ueXBpX21pc2Nfb3BlbiwKIAkucmVsZWFzZQk9IHNvbnlwaV9taXNjX3JlbGVhc2UsCiAJLmZhc3luYwkJPSBzb255cGlfbWlzY19mYXN5bmMsCi0JLmlvY3RsCQk9IHNvbnlwaV9taXNjX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IHNvbnlwaV9taXNjX2lvY3RsLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogfTsKIAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHNvbnlwaV9taXNjX2RldmljZSA9IHsKQEAgLTEzMTMsMTEgKzEzMTYsMTAgQEAKIAkJCSJodHRwOi8vd3d3LmxpbnV4Lml0L35tYWxhdHRpYS93aWtpL2luZGV4LnBocC9Tb255X2RyaXZlcnNcbiIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnNvbnlwaV9kZXZpY2UuZmlmb19sb2NrKTsKLQlzb255cGlfZGV2aWNlLmZpZm8gPSBrZmlmb19hbGxvYyhTT05ZUElfQlVGX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkJCSAmc29ueXBpX2RldmljZS5maWZvX2xvY2spOwotCWlmIChJU19FUlIoc29ueXBpX2RldmljZS5maWZvKSkgeworCWVycm9yID0ga2ZpZm9fYWxsb2MoJnNvbnlwaV9kZXZpY2UuZmlmbywgU09OWVBJX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzb255cGk6IGtmaWZvX2FsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHNvbnlwaV9kZXZpY2UuZmlmbyk7CisJCXJldHVybiBlcnJvcjsKIAl9CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb255cGlfZGV2aWNlLmZpZm9fcHJvY19saXN0KTsKQEAgLTEzOTMsMTIgKzEzOTUsMTAgQEAKIAkJfQogCiAJCXNwaW5fbG9ja19pbml0KCZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm9fbG9jayk7Ci0JCXNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbyA9Ci0JCQlrZmlmb19hbGxvYyhTT05ZUElfQlVGX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkJICAgICZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm9fbG9jayk7Ci0JCWlmIChJU19FUlIoc29ueXBpX2RldmljZS5pbnB1dF9maWZvKSkgeworCQllcnJvciA9IGtmaWZvX2FsbG9jKCZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm8sIFNPTllQSV9CVUZfU0laRSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKGVycm9yKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNvbnlwaToga2ZpZm9fYWxsb2MgZmFpbGVkXG4iKTsKLQkJCWVycm9yID0gUFRSX0VSUihzb255cGlfZGV2aWNlLmlucHV0X2ZpZm8pOwogCQkJZ290byBlcnJfaW5wZGV2X3VucmVnaXN0ZXI7CiAJCX0KIApAQCAtMTQyMyw3ICsxNDIzLDcgQEAKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CiAgZXJyX3B1dF9wY2lkZXY6CiAJcGNpX2Rldl9wdXQocGNpZGV2KTsKLQlrZmlmb19mcmVlKHNvbnlwaV9kZXZpY2UuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueXBpX2RldmljZS5maWZvKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTE0MzgsNyArMTQzOCw3IEBACiAJaWYgKHVzZWlucHV0KSB7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHNvbnlwaV9kZXZpY2UuaW5wdXRfa2V5X2Rldik7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHNvbnlwaV9kZXZpY2UuaW5wdXRfam9nX2Rldik7Ci0JCWtmaWZvX2ZyZWUoc29ueXBpX2RldmljZS5pbnB1dF9maWZvKTsKKwkJa2ZpZm9fZnJlZSgmc29ueXBpX2RldmljZS5pbnB1dF9maWZvKTsKIAl9CiAKIAltaXNjX2RlcmVnaXN0ZXIoJnNvbnlwaV9taXNjX2RldmljZSk7CkBAIC0xNDUxLDcgKzE0NTEsNyBAQAogCQlwY2lfZGV2X3B1dChzb255cGlfZGV2aWNlLmRldik7CiAJfQogCi0Ja2ZpZm9fZnJlZShzb255cGlfZGV2aWNlLmZpZm8pOworCWtmaWZvX2ZyZWUoJnNvbnlwaV9kZXZpY2UuZmlmbyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90b3NoaWJhLmMgYi9kcml2ZXJzL2NoYXIvdG9zaGliYS5jCmluZGV4IDY2M2NkMTVkLi5mOGJjNzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdG9zaGliYS5jCisrKyBiL2RyaXZlcnMvY2hhci90b3NoaWJhLmMKQEAgLTY4LDcgKzY4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3Rvc2hpYmEuaD4KIAogI2RlZmluZSBUT1NIX01JTk9SX0RFViAxODEKQEAgLTg4LDEzICs4OCwxMyBAQAogc3RhdGljIGludCB0b3NoX3NjaTsKIHN0YXRpYyBpbnQgdG9zaF9mYW47CiAKLXN0YXRpYyBpbnQgdG9zaF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorc3RhdGljIGxvbmcgdG9zaF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCiAJdW5zaWduZWQgbG9uZyk7CiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdG9zaF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuaW9jdGwJCT0gdG9zaF9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSB0b3NoX2lvY3RsLAogfTsKIAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHRvc2hfZGV2aWNlID0gewpAQCAtMjUyLDggKzI1Miw3IEBACiBFWFBPUlRfU1lNQk9MKHRvc2hfc21tKTsKIAogCi1zdGF0aWMgaW50IHRvc2hfaW9jdGwoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLAotCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgdG9zaF9pb2N0bChzdHJ1Y3QgZmlsZSAqZnAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCVNNTVJlZ2lzdGVycyByZWdzOwogCVNNTVJlZ2lzdGVycyBfX3VzZXIgKmFyZ3AgPSAoU01NUmVnaXN0ZXJzIF9fdXNlciAqKWFyZzsKQEAgLTI3NSwxMyArMjc0LDE2IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJCS8qIGRvIHdlIG5lZWQgdG8gZW11bGF0ZSB0aGUgZmFuID8gKi8KKwkJCWxvY2tfa2VybmVsKCk7CiAJCQlpZiAodG9zaF9mYW49PTEpIHsKIAkJCQlpZiAoKChheD09MHhmMzAwKSB8fCAoYXg9PTB4ZjQwMCkpICYmIChieD09MHgwMDA0KSkgewogCQkJCQllcnIgPSB0b3NoX2VtdWxhdGVfZmFuKCZyZWdzKTsKKwkJCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CiAJCQllcnIgPSB0b3NoX3NtbSgmcmVncyk7CisJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYXRfaGRtYWMuYyBiL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKaW5kZXggZjE1MTEyNS4uZWZjMWE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvYXRfaGRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCkBAIC04MTUsNyArODE1LDcgQEAKIAlkZXZfdmRiZyhjaGFuMmRldihjaGFuKSwgImlzX3R4X2NvbXBsZXRlOiAlZCAoZCVkLCB1JWQpXG4iLAogCQkJY29va2llLCBkb25lID8gKmRvbmUgOiAwLCB1c2VkID8gKnVzZWQgOiAwKTsKIAotCXNwaW5fbG9ja19iaChhdGNoYW4tPmxvY2spOworCXNwaW5fbG9ja19iaCgmYXRjaGFuLT5sb2NrKTsKIAogCWxhc3RfY29tcGxldGUgPSBhdGNoYW4tPmNvbXBsZXRlZF9jb29raWU7CiAJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOwpAQCAtODMwLDcgKzgzMCw3IEBACiAJCXJldCA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIGxhc3RfY29tcGxldGUsIGxhc3RfdXNlZCk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoYXRjaGFuLT5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYXRjaGFuLT5sb2NrKTsKIAogCWlmIChkb25lKQogCQkqZG9uZSA9IGxhc3RfY29tcGxldGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYyBiL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCmluZGV4IDRhOTljZDkuLmI1ZjJlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCisrKyBiL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCkBAIC0xMjk0LDggKzEyOTQsOCBAQAogCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmYmFzZS0+ZG1hX3NsYXZlKTsKIAljb2g5MDEzMThfcG9vbF9kZXN0cm95KCZiYXNlLT5wb29sKTsKIAlmcmVlX2lycShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBiYXNlKTsKLQlrZnJlZShiYXNlKTsKIAlpb3VubWFwKGJhc2UtPnZpcnRiYXNlKTsKKwlrZnJlZShiYXNlKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2UtPnN0YXJ0LAogCQkJICAgcmVzb3VyY2Vfc2l6ZShwZGV2LT5yZXNvdXJjZSkpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHdfZG1hYy5jIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCmluZGV4IDI4NWJlZDAuLmQyODM2OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYworKysgYi9kcml2ZXJzL2RtYS9kd19kbWFjLmMKQEAgLTEyNzAsOCArMTI3MCw2IEBACiAJCWdvdG8gZXJyX2tmcmVlOwogCX0KIAotCW1lbXNldChkdywgMCwgc2l6ZW9mICpkdyk7Ci0KIAlkdy0+cmVncyA9IGlvcmVtYXAoaW8tPnN0YXJ0LCBEV19SRUdMRU4pOwogCWlmICghZHctPnJlZ3MpIHsKIAkJZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5jCmluZGV4IGM1MjRkMzYuLmRjYzRhYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWEuYwpAQCAtMTAzMiw3ICsxMDMyLDcgQEAKIAlkbWEtPmRldiA9ICZwZGV2LT5kZXY7CiAKIAlpZiAoIWRtYS0+Y2hhbmNudCkgewotCQlkZXZfZXJyKGRldiwgInplcm8gY2hhbm5lbHMgZGV0ZWN0ZWRcbiIpOworCQlkZXZfZXJyKGRldiwgImNoYW5uZWwgZW51bWVyYXRpb24gZXJyb3JcbiIpOwogCQlnb3RvIGVycl9zZXR1cF9pbnRlcnJ1cHRzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuaCBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmgKaW5kZXggNDVlZGRlOS4uYmJjM2U3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuaAorKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5oCkBAIC02MCw2ICs2MCw3IEBACiAgKiBAZGNhOiBkaXJlY3QgY2FjaGUgYWNjZXNzIGNvbnRleHQKICAqIEBpbnRyX3F1aXJrOiBpbnRlcnJ1cHQgc2V0dXAgcXVpcmsgKGZvciBpb2F0X3YxIGRldmljZXMpCiAgKiBAZW51bWVyYXRlX2NoYW5uZWxzOiBodyB2ZXJzaW9uIHNwZWNpZmljIGNoYW5uZWwgZW51bWVyYXRpb24KKyAqIEByZXNldF9odzogaHcgdmVyc2lvbiBzcGVjaWZpYyBjaGFubmVsIChyZSlpbml0aWFsaXphdGlvbgogICogQGNsZWFudXBfdGFza2xldDogc2VsZWN0IGJldHdlZW4gdGhlIHYyIGFuZCB2MyBjbGVhbnVwIHJvdXRpbmVzCiAgKiBAdGltZXJfZm46IHNlbGVjdCBiZXR3ZWVuIHRoZSB2MiBhbmQgdjMgdGltZXIgd2F0Y2hkb2cgcm91dGluZXMKICAqIEBzZWxmX3Rlc3Q6IGhhcmR3YXJlIHZlcnNpb24gc3BlY2lmaWMgc2VsZiB0ZXN0IGZvciBlYWNoIHN1cHBvcnRlZCBvcCB0eXBlCkBAIC03OCw2ICs3OSw3IEBACiAJc3RydWN0IGRjYV9wcm92aWRlciAqZGNhOwogCXZvaWQgKCppbnRyX3F1aXJrKShzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSk7CiAJaW50ICgqZW51bWVyYXRlX2NoYW5uZWxzKShzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSk7CisJaW50ICgqcmVzZXRfaHcpKHN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuKTsKIAl2b2lkICgqY2xlYW51cF90YXNrbGV0KSh1bnNpZ25lZCBsb25nIGRhdGEpOwogCXZvaWQgKCp0aW1lcl9mbikodW5zaWduZWQgbG9uZyBkYXRhKTsKIAlpbnQgKCpzZWxmX3Rlc3QpKHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqZGV2aWNlKTsKQEAgLTI2NCw2ICsyNjYsMjIgQEAKIAl3cml0ZWIoSU9BVF9DSEFOQ01EX1NVU1BFTkQsIGNoYW4tPnJlZ19iYXNlICsgSU9BVF9DSEFOQ01EX09GRlNFVCh2ZXIpKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlvYXRfcmVzZXQoc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4pCit7CisJdTggdmVyID0gY2hhbi0+ZGV2aWNlLT52ZXJzaW9uOworCisJd3JpdGViKElPQVRfQ0hBTkNNRF9SRVNFVCwgY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5DTURfT0ZGU0VUKHZlcikpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaW9hdF9yZXNldF9wZW5kaW5nKHN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuKQoreworCXU4IHZlciA9IGNoYW4tPmRldmljZS0+dmVyc2lvbjsKKwl1OCBjbWQ7CisKKwljbWQgPSByZWFkYihjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkNNRF9PRkZTRVQodmVyKSk7CisJcmV0dXJuIChjbWQgJiBJT0FUX0NIQU5DTURfUkVTRVQpID09IElPQVRfQ0hBTkNNRF9SRVNFVDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGlvYXRfc2V0X2NoYWluYWRkcihzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdCwgdTY0IGFkZHIpCiB7CiAJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jCmluZGV4IDhmMWY3ZjAuLjVmN2E1MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYwpAQCAtMjM5LDIwICsyMzksNTAgQEAKIAkJX19pb2F0Ml9zdGFydF9udWxsX2Rlc2MoaW9hdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvYXQyX3Jlc3RhcnRfY2hhbm5lbChzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpCitpbnQgaW9hdDJfcXVpZXNjZShzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgdW5zaWduZWQgbG9uZyB0bW8pCiB7Ci0Jc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKLQl1bnNpZ25lZCBsb25nIHBoeXNfY29tcGxldGU7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgdG1vOworCWludCBlcnIgPSAwOwogCXUzMiBzdGF0dXM7CiAKIAlzdGF0dXMgPSBpb2F0X2NoYW5zdHMoY2hhbik7CiAJaWYgKGlzX2lvYXRfYWN0aXZlKHN0YXR1cykgfHwgaXNfaW9hdF9pZGxlKHN0YXR1cykpCiAJCWlvYXRfc3VzcGVuZChjaGFuKTsKIAl3aGlsZSAoaXNfaW9hdF9hY3RpdmUoc3RhdHVzKSB8fCBpc19pb2F0X2lkbGUoc3RhdHVzKSkgeworCQlpZiAoZW5kICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgeworCQkJZXJyID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CiAJCXN0YXR1cyA9IGlvYXRfY2hhbnN0cyhjaGFuKTsKIAkJY3B1X3JlbGF4KCk7CiAJfQogCisJcmV0dXJuIGVycjsKK30KKworaW50IGlvYXQyX3Jlc2V0X3N5bmMoc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4sIHVuc2lnbmVkIGxvbmcgdG1vKQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIHRtbzsKKwlpbnQgZXJyID0gMDsKKworCWlvYXRfcmVzZXQoY2hhbik7CisJd2hpbGUgKGlvYXRfcmVzZXRfcGVuZGluZyhjaGFuKSkgeworCQlpZiAoZW5kICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgeworCQkJZXJyID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisJCWNwdV9yZWxheCgpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGlvYXQyX3Jlc3RhcnRfY2hhbm5lbChzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpCit7CisJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIHBoeXNfY29tcGxldGU7CisKKwlpb2F0Ml9xdWllc2NlKGNoYW4sIDApOwogCWlmIChpb2F0X2NsZWFudXBfcHJlYW1ibGUoY2hhbiwgJnBoeXNfY29tcGxldGUpKQogCQlfX2NsZWFudXAoaW9hdCwgcGh5c19jb21wbGV0ZSk7CiAKQEAgLTMxOCw2ICszNDgsMTkgQEAKIAlzcGluX3VubG9ja19iaCgmY2hhbi0+Y2xlYW51cF9sb2NrKTsKIH0KIAorc3RhdGljIGludCBpb2F0Ml9yZXNldF9odyhzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbikKK3sKKwkvKiB0aHJvdyBhd2F5IHdoYXRldmVyIHRoZSBjaGFubmVsIHdhcyBkb2luZyBhbmQgZ2V0IGl0IGluaXRpYWxpemVkICovCisJdTMyIGNoYW5lcnI7CisKKwlpb2F0Ml9xdWllc2NlKGNoYW4sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisKKwljaGFuZXJyID0gcmVhZGwoY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKwl3cml0ZWwoY2hhbmVyciwgY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKworCXJldHVybiBpb2F0Ml9yZXNldF9zeW5jKGNoYW4sIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSk7Cit9CisKIC8qKgogICogaW9hdDJfZW51bWVyYXRlX2NoYW5uZWxzIC0gZmluZCBhbmQgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlJ3MgY2hhbm5lbHMKICAqIEBkZXZpY2U6IHRoZSBkZXZpY2UgdG8gYmUgZW51bWVyYXRlZApAQCAtMzYwLDYgKzQwMywxMCBAQAogCQkJCSAgKHVuc2lnbmVkIGxvbmcpIGlvYXQpOwogCQlpb2F0LT54ZmVyY2FwX2xvZyA9IHhmZXJjYXBfbG9nOwogCQlzcGluX2xvY2tfaW5pdCgmaW9hdC0+cmluZ19sb2NrKTsKKwkJaWYgKGRldmljZS0+cmVzZXRfaHcoJmlvYXQtPmJhc2UpKSB7CisJCQlpID0gMDsKKwkJCWJyZWFrOworCQl9CiAJfQogCWRtYS0+Y2hhbmNudCA9IGk7CiAJcmV0dXJuIGk7CkBAIC00NjcsNyArNTE0LDYgQEAKIAlzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQgPSB0b19pb2F0Ml9jaGFuKGMpOwogCXN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuID0gJmlvYXQtPmJhc2U7CiAJc3RydWN0IGlvYXRfcmluZ19lbnQgKipyaW5nOwotCXUzMiBjaGFuZXJyOwogCWludCBvcmRlcjsKIAogCS8qIGhhdmUgd2UgYWxyZWFkeSBiZWVuIHNldCB1cD8gKi8KQEAgLTQ3NywxMiArNTIzLDYgQEAKIAkvKiBTZXR1cCByZWdpc3RlciB0byBpbnRlcnJ1cHQgYW5kIHdyaXRlIGNvbXBsZXRpb24gc3RhdHVzIG9uIGVycm9yICovCiAJd3JpdGV3KElPQVRfQ0hBTkNUUkxfUlVOLCBjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkNUUkxfT0ZGU0VUKTsKIAotCWNoYW5lcnIgPSByZWFkbChjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOwotCWlmIChjaGFuZXJyKSB7Ci0JCWRldl9lcnIodG9fZGV2KGNoYW4pLCAiQ0hBTkVSUiA9ICV4LCBjbGVhcmluZ1xuIiwgY2hhbmVycik7Ci0JCXdyaXRlbChjaGFuZXJyLCBjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOwotCX0KLQogCS8qIGFsbG9jYXRlIGEgY29tcGxldGlvbiB3cml0ZWJhY2sgYXJlYSAqLwogCS8qIGRvaW5nIDIgMzJiaXQgd3JpdGVzIHRvIG1taW8gc2luY2UgMSA2NGIgd3JpdGUgZG9lc24ndCB3b3JrICovCiAJY2hhbi0+Y29tcGxldGlvbiA9IHBjaV9wb29sX2FsbG9jKGNoYW4tPmRldmljZS0+Y29tcGxldGlvbl9wb29sLApAQCAtNzQ2LDEzICs3ODYsNyBAQAogCXRhc2tsZXRfZGlzYWJsZSgmY2hhbi0+Y2xlYW51cF90YXNrKTsKIAlkZWxfdGltZXJfc3luYygmY2hhbi0+dGltZXIpOwogCWRldmljZS0+Y2xlYW51cF90YXNrbGV0KCh1bnNpZ25lZCBsb25nKSBpb2F0KTsKLQotCS8qIERlbGF5IDEwMG1zIGFmdGVyIHJlc2V0IHRvIGFsbG93IGludGVybmFsIERNQSBsb2dpYyB0byBxdWllc2NlCi0JICogYmVmb3JlIHJlbW92aW5nIERNQSBkZXNjcmlwdG9yIHJlc291cmNlcy4KLQkgKi8KLQl3cml0ZWIoSU9BVF9DSEFOQ01EX1JFU0VULAotCSAgICAgICBjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkNNRF9PRkZTRVQoY2hhbi0+ZGV2aWNlLT52ZXJzaW9uKSk7Ci0JbWRlbGF5KDEwMCk7CisJZGV2aWNlLT5yZXNldF9odyhjaGFuKTsKIAogCXNwaW5fbG9ja19iaCgmaW9hdC0+cmluZ19sb2NrKTsKIAlkZXNjcyA9IGlvYXQyX3Jpbmdfc3BhY2UoaW9hdCk7CkBAIC04MzksNiArODczLDcgQEAKIAlpbnQgZXJyOwogCiAJZGV2aWNlLT5lbnVtZXJhdGVfY2hhbm5lbHMgPSBpb2F0Ml9lbnVtZXJhdGVfY2hhbm5lbHM7CisJZGV2aWNlLT5yZXNldF9odyA9IGlvYXQyX3Jlc2V0X2h3OwogCWRldmljZS0+Y2xlYW51cF90YXNrbGV0ID0gaW9hdDJfY2xlYW51cF90YXNrbGV0OwogCWRldmljZS0+dGltZXJfZm4gPSBpb2F0Ml90aW1lcl9ldmVudDsKIAlkZXZpY2UtPnNlbGZfdGVzdCA9IGlvYXRfZG1hX3NlbGZfdGVzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmggYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5oCmluZGV4IDFkODQ5ZWYuLjNhZmFkOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmgKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuaApAQCAtMTg1LDYgKzE4NSw4IEBACiB2b2lkIF9faW9hdDJfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpOwogdm9pZCBpb2F0Ml9jbGVhbnVwX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgaW9hdDJfdGltZXJfZXZlbnQodW5zaWduZWQgbG9uZyBkYXRhKTsKK2ludCBpb2F0Ml9xdWllc2NlKHN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuLCB1bnNpZ25lZCBsb25nIHRtbyk7CitpbnQgaW9hdDJfcmVzZXRfc3luYyhzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgdW5zaWduZWQgbG9uZyB0bW8pOwogZXh0ZXJuIHN0cnVjdCBrb2JqX3R5cGUgaW9hdDJfa3R5cGU7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmlvYXQyX2NhY2hlOwogI2VuZGlmIC8qIElPQVRETUFfVjJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YzLmMKaW5kZXggNDJmNmYxMC4uOTkwOGM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jCkBAIC02NTAsOSArNjUwLDExIEBACiAKIAludW1fZGVzY3MgPSBpb2F0Ml94ZmVybGVuX3RvX2Rlc2NzKGlvYXQsIGxlbik7CiAJLyogd2UgbmVlZCAyeCB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIGNvdmVyIGdyZWF0ZXIgdGhhbiAzCi0JICogc291cmNlcworCSAqIHNvdXJjZXMgKHdlIG5lZWQgMSBleHRyYSBzb3VyY2UgaW4gdGhlIHEtb25seSBjb250aW51YXRpb24KKwkgKiBjYXNlIGFuZCAzIGV4dHJhIHNvdXJjZXMgaW4gdGhlIHArcSBjb250aW51YXRpb24gY2FzZS4KIAkgKi8KLQlpZiAoc3JjX2NudCA+IDMgfHwgZmxhZ3MgJiBETUFfUFJFUF9DT05USU5VRSkgeworCWlmIChzcmNfY250ICsgZG1hZl9wX2Rpc2FibGVkX2NvbnRpbnVlKGZsYWdzKSA+IDMgfHwKKwkgICAgKGRtYWZfY29udGludWUoZmxhZ3MpICYmICFkbWFmX3BfZGlzYWJsZWRfY29udGludWUoZmxhZ3MpKSkgewogCQl3aXRoX2V4dCA9IDE7CiAJCW51bV9kZXNjcyAqPSAyOwogCX0gZWxzZQpAQCAtMTEyOCw2ICsxMTMwLDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaW9hdDNfcmVzZXRfaHcoc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4pCit7CisJLyogdGhyb3cgYXdheSB3aGF0ZXZlciB0aGUgY2hhbm5lbCB3YXMgZG9pbmcgYW5kIGdldCBpdAorCSAqIGluaXRpYWxpemVkLCB3aXRoIGlvYXQzIHNwZWNpZmljIHdvcmthcm91bmRzCisJICovCisJc3RydWN0IGlvYXRkbWFfZGV2aWNlICpkZXZpY2UgPSBjaGFuLT5kZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZpY2UtPnBkZXY7CisJdTMyIGNoYW5lcnI7CisJdTE2IGRldl9pZDsKKwlpbnQgZXJyOworCisJaW9hdDJfcXVpZXNjZShjaGFuLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCisJY2hhbmVyciA9IHJlYWRsKGNoYW4tPnJlZ19iYXNlICsgSU9BVF9DSEFORVJSX09GRlNFVCk7CisJd3JpdGVsKGNoYW5lcnIsIGNoYW4tPnJlZ19iYXNlICsgSU9BVF9DSEFORVJSX09GRlNFVCk7CisKKwkvKiAtPSBJT0FUIHZlci4zIHdvcmthcm91bmRzID0tICovCisJLyogV3JpdGUgQ0hBTkVSUk1TS19JTlQgd2l0aCAzRTA3aCB0byBtYXNrIG91dCB0aGUgZXJyb3JzCisJICogdGhhdCBjYW4gY2F1c2Ugc3RhYmlsaXR5IGlzc3VlcyBmb3IgSU9BVCB2ZXIuMywgYW5kIGNsZWFyIGFueQorCSAqIHBlbmRpbmcgZXJyb3JzCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBJT0FUX1BDSV9DSEFORVJSTUFTS19JTlRfT0ZGU0VULCAweDNlMDcpOworCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBJT0FUX1BDSV9DSEFORVJSX0lOVF9PRkZTRVQsICZjaGFuZXJyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNoYW5uZWwgZXJyb3IgcmVnaXN0ZXIgdW5yZWFjaGFibGVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIElPQVRfUENJX0NIQU5FUlJfSU5UX09GRlNFVCwgY2hhbmVycik7CisKKwkvKiBDbGVhciBETUFVTkNFUlJTVFMgQ2ZnLVJlZyBQYXJpdHkgRXJyb3Igc3RhdHVzIGJpdAorCSAqICh3b3JrYXJvdW5kIGZvciBzcHVyaW91cyBjb25maWcgcGFyaXR5IGVycm9yIGFmdGVyIHJlc3RhcnQpCisJICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSU9BVF9QQ0lfREVWSUNFX0lEX09GRlNFVCwgJmRldl9pZCk7CisJaWYgKGRldl9pZCA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfVEJHMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBJT0FUX1BDSV9ETUFVTkNFUlJTVFNfT0ZGU0VULCAweDEwKTsKKworCXJldHVybiBpb2F0Ml9yZXNldF9zeW5jKGNoYW4sIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSk7Cit9CisKIGludCBfX2RldmluaXQgaW9hdDNfZG1hX3Byb2JlKHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqZGV2aWNlLCBpbnQgZGNhKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2aWNlLT5wZGV2OwpAQCAtMTEzNywxMCArMTE3OCwxMCBAQAogCXN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuOwogCWJvb2wgaXNfcmFpZF9kZXZpY2UgPSBmYWxzZTsKIAlpbnQgZXJyOwotCXUxNiBkZXZfaWQ7CiAJdTMyIGNhcDsKIAogCWRldmljZS0+ZW51bWVyYXRlX2NoYW5uZWxzID0gaW9hdDJfZW51bWVyYXRlX2NoYW5uZWxzOworCWRldmljZS0+cmVzZXRfaHcgPSBpb2F0M19yZXNldF9odzsKIAlkZXZpY2UtPnNlbGZfdGVzdCA9IGlvYXQzX2RtYV9zZWxmX3Rlc3Q7CiAJZG1hID0gJmRldmljZS0+Y29tbW9uOwogCWRtYS0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9IGlvYXQyX2RtYV9wcmVwX21lbWNweV9sb2NrOwpAQCAtMTIxNiwxOSArMTI1Nyw2IEBACiAJZG1hLT5kZXZpY2VfcHJlcF9kbWFfeG9yX3ZhbCA9IE5VTEw7CiAJI2VuZGlmCiAKLQkvKiAtPSBJT0FUIHZlci4zIHdvcmthcm91bmRzID0tICovCi0JLyogV3JpdGUgQ0hBTkVSUk1TS19JTlQgd2l0aCAzRTA3aCB0byBtYXNrIG91dCB0aGUgZXJyb3JzCi0JICogdGhhdCBjYW4gY2F1c2Ugc3RhYmlsaXR5IGlzc3VlcyBmb3IgSU9BVCB2ZXIuMwotCSAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgSU9BVF9QQ0lfQ0hBTkVSUk1BU0tfSU5UX09GRlNFVCwgMHgzZTA3KTsKLQotCS8qIENsZWFyIERNQVVOQ0VSUlNUUyBDZmctUmVnIFBhcml0eSBFcnJvciBzdGF0dXMgYml0Ci0JICogKHdvcmthcm91bmQgZm9yIHNwdXJpb3VzIGNvbmZpZyBwYXJpdHkgZXJyb3IgYWZ0ZXIgcmVzdGFydCkKLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBJT0FUX1BDSV9ERVZJQ0VfSURfT0ZGU0VULCAmZGV2X2lkKTsKLQlpZiAoZGV2X2lkID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9UQkcwKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIElPQVRfUENJX0RNQVVOQ0VSUlNUU19PRkZTRVQsIDB4MTApOwotCiAJZXJyID0gaW9hdF9wcm9iZShkZXZpY2UpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L3JlZ2lzdGVycy5oIGIvZHJpdmVycy9kbWEvaW9hdC9yZWdpc3RlcnMuaAppbmRleCBmMDE1ZWMxLi5lOGFlNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L3JlZ2lzdGVycy5oCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvcmVnaXN0ZXJzLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2RlZmluZSBJT0FUX1BDSV9ERVZJQ0VfSURfT0ZGU0VUCQkweDAyCiAjZGVmaW5lIElPQVRfUENJX0RNQVVOQ0VSUlNUU19PRkZTRVQJCTB4MTQ4CisjZGVmaW5lIElPQVRfUENJX0NIQU5FUlJfSU5UX09GRlNFVAkJMHgxODAKICNkZWZpbmUgSU9BVF9QQ0lfQ0hBTkVSUk1BU0tfSU5UX09GRlNFVAkJMHgxODQKIAogLyogTU1JTyBEZXZpY2UgUmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCAyZTRhNTRjLi5kMTBjYzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTIzLDE2ICsyMywxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8Y3B1L2RtYS5oPgogI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KICNpbmNsdWRlICJzaGRtYS5oIgogCiAvKiBETUEgZGVzY3JpcHRvciBjb250cm9sICovCi0jZGVmaW5lIERFU0NfTEFTVAkoLTEpCi0jZGVmaW5lIERFU0NfQ09NUAkoMSkKLSNkZWZpbmUgREVTQ19OQ09NUAkoMCkKK2VudW0gc2hfZG1hZV9kZXNjX3N0YXR1cyB7CisJREVTQ19JRExFLAorCURFU0NfUFJFUEFSRUQsCisJREVTQ19TVUJNSVRURUQsCisJREVTQ19DT01QTEVURUQsCS8qIGNvbXBsZXRlZCwgaGF2ZSB0byBjYWxsIGNhbGxiYWNrICovCisJREVTQ19XQUlUSU5HLAkvKiBjYWxsYmFjayBjYWxsZWQsIHdhaXRpbmcgZm9yIGFjayAvIHJlLXN1Ym1pdCAqLworfTsKIAogI2RlZmluZSBOUl9ERVNDU19QRVJfQ0hBTk5FTCAzMgogLyoKQEAgLTQ1LDYgKzQ4LDggQEAKICAqLwogI2RlZmluZSBSU19ERUZBVUxUICAoUlNfRFVBTCkKIAorc3RhdGljIHZvaWQgc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgYm9vbCBhbGwpOworCiAjZGVmaW5lIFNIX0RNQUNfQ0hBTl9CQVNFKGlkKSAoZG1hX2Jhc2VfYWRkcltpZF0pCiBzdGF0aWMgdm9pZCBzaF9kbWFlX3dyaXRlbChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9kYywgdTMyIGRhdGEsIHUzMiByZWcpCiB7CkBAIC0xMDYsMTEgKzExMSwxMSBAQAogCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSykgPj4gQ0hDUl9UU19TSElGVF07CiB9CiAKLXN0YXRpYyB2b2lkIGRtYWVfc2V0X3JlZyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3KQorc3RhdGljIHZvaWQgZG1hZV9zZXRfcmVnKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHN0cnVjdCBzaF9kbWFlX3JlZ3MgKmh3KQogewotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LnNhciwgU0FSKTsKLQlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody5kYXIsIERBUik7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHcudGNyID4+IGNhbGNfeG1pdF9zaGlmdChzaF9jaGFuKSwgVENSKTsKKwlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody0+c2FyLCBTQVIpOworCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LT5kYXIsIERBUik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiksIFRDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfc3RhcnQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKQEAgLTE4NCw4ICsxODksOSBAQAogCiBzdGF0aWMgZG1hX2Nvb2tpZV90IHNoX2RtYWVfdHhfc3VibWl0KHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7Ci0Jc3RydWN0IHNoX2Rlc2MgKmRlc2MgPSB0eF90b19zaF9kZXNjKHR4KTsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYyA9IHR4X3RvX3NoX2Rlc2ModHgpLCAqY2h1bmssICpsYXN0ID0gZGVzYywgKmM7CiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4odHgtPmNoYW4pOworCWRtYV9hc3luY190eF9jYWxsYmFjayBjYWxsYmFjayA9IHR4LT5jYWxsYmFjazsKIAlkbWFfY29va2llX3QgY29va2llOwogCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwpAQCAtMTk1LDQ1ICsyMDEsNTMgQEAKIAlpZiAoY29va2llIDwgMCkKIAkJY29va2llID0gMTsKIAotCS8qIElmIGRlc2Mgb25seSBpbiB0aGUgY2FzZSBvZiAxICovCi0JaWYgKGRlc2MtPmFzeW5jX3R4LmNvb2tpZSAhPSAtRUJVU1kpCi0JCWRlc2MtPmFzeW5jX3R4LmNvb2tpZSA9IGNvb2tpZTsKLQlzaF9jaGFuLT5jb21tb24uY29va2llID0gZGVzYy0+YXN5bmNfdHguY29va2llOworCXNoX2NoYW4tPmNvbW1vbi5jb29raWUgPSBjb29raWU7CisJdHgtPmNvb2tpZSA9IGNvb2tpZTsKIAotCWxpc3Rfc3BsaWNlX2luaXQoJmRlc2MtPnR4X2xpc3QsIHNoX2NoYW4tPmxkX3F1ZXVlLnByZXYpOworCS8qIE1hcmsgYWxsIGNodW5rcyBvZiB0aGlzIGRlc2NyaXB0b3IgYXMgc3VibWl0dGVkLCBtb3ZlIHRvIHRoZSBxdWV1ZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgYywgZGVzYy0+bm9kZS5wcmV2LCBub2RlKSB7CisJCS8qCisJCSAqIEFsbCBjaHVua3MgYXJlIG9uIHRoZSBnbG9iYWwgbGRfZnJlZSwgc28sIHdlIGhhdmUgdG8gZmluZAorCQkgKiB0aGUgZW5kIG9mIHRoZSBjaGFpbiBvdXJzZWx2ZXMKKwkJICovCisJCWlmIChjaHVuayAhPSBkZXNjICYmIChjaHVuay0+bWFyayA9PSBERVNDX0lETEUgfHwKKwkJCQkgICAgICBjaHVuay0+YXN5bmNfdHguY29va2llID4gMCB8fAorCQkJCSAgICAgIGNodW5rLT5hc3luY190eC5jb29raWUgPT0gLUVCVVNZIHx8CisJCQkJICAgICAgJmNodW5rLT5ub2RlID09ICZzaF9jaGFuLT5sZF9mcmVlKSkKKwkJCWJyZWFrOworCQljaHVuay0+bWFyayA9IERFU0NfU1VCTUlUVEVEOworCQkvKiBDYWxsYmFjayBnb2VzIHRvIHRoZSBsYXN0IGNodW5rICovCisJCWNodW5rLT5hc3luY190eC5jYWxsYmFjayA9IE5VTEw7CisJCWNodW5rLT5jb29raWUgPSBjb29raWU7CisJCWxpc3RfbW92ZV90YWlsKCZjaHVuay0+bm9kZSwgJnNoX2NoYW4tPmxkX3F1ZXVlKTsKKwkJbGFzdCA9IGNodW5rOworCX0KKworCWxhc3QtPmFzeW5jX3R4LmNhbGxiYWNrID0gY2FsbGJhY2s7CisJbGFzdC0+YXN5bmNfdHguY2FsbGJhY2tfcGFyYW0gPSB0eC0+Y2FsbGJhY2tfcGFyYW07CisKKwlkZXZfZGJnKHNoX2NoYW4tPmRldiwgInN1Ym1pdCAjJWRAJXAgb24gJWQ6ICV4WyVkXSAtPiAleFxuIiwKKwkJdHgtPmNvb2tpZSwgJmxhc3QtPmFzeW5jX3R4LCBzaF9jaGFuLT5pZCwKKwkJZGVzYy0+aHcuc2FyLCBkZXNjLT5ody50Y3IsIGRlc2MtPmh3LmRhcik7CiAKIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAogCXJldHVybiBjb29raWU7CiB9CiAKKy8qIENhbGxlZCB3aXRoIGRlc2NfbG9jayBoZWxkICovCiBzdGF0aWMgc3RydWN0IHNoX2Rlc2MgKnNoX2RtYWVfZ2V0X2Rlc2Moc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKIHsKLQlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYywgKl9kZXNjLCAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYzsKIAotCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZzaF9jaGFuLT5sZF9mcmVlLCBub2RlKSB7Ci0JCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+YXN5bmNfdHgpKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmc2hfY2hhbi0+bGRfZnJlZSwgbm9kZSkKKwkJaWYgKGRlc2MtPm1hcmsgIT0gREVTQ19QUkVQQVJFRCkgeworCQkJQlVHX09OKGRlc2MtPm1hcmsgIT0gREVTQ19JRExFKTsKIAkJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKLQkJCXJldCA9IGRlc2M7Ci0JCQlicmVhazsKKwkJCXJldHVybiBkZXNjOwogCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc2hfZG1hZV9wdXRfZGVzYyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBzdHJ1Y3Qgc2hfZGVzYyAqZGVzYykKLXsKLQlpZiAoZGVzYykgewotCQlzcGluX2xvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7Ci0KLQkJbGlzdF9zcGxpY2VfaW5pdCgmZGVzYy0+dHhfbGlzdCwgJnNoX2NoYW4tPmxkX2ZyZWUpOwotCQlsaXN0X2FkZCgmZGVzYy0+bm9kZSwgJnNoX2NoYW4tPmxkX2ZyZWUpOwotCi0JCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwotCX0KKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBzaF9kbWFlX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKQEAgLTI1MiwxMSArMjY2LDEwIEBACiAJCWRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoJmRlc2MtPmFzeW5jX3R4LAogCQkJCQkmc2hfY2hhbi0+Y29tbW9uKTsKIAkJZGVzYy0+YXN5bmNfdHgudHhfc3VibWl0ID0gc2hfZG1hZV90eF9zdWJtaXQ7Ci0JCWRlc2MtPmFzeW5jX3R4LmZsYWdzID0gRE1BX0NUUkxfQUNLOwotCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+dHhfbGlzdCk7Ci0JCXNoX2RtYWVfcHV0X2Rlc2Moc2hfY2hhbiwgZGVzYyk7CisJCWRlc2MtPm1hcmsgPSBERVNDX0lETEU7CiAKIAkJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCQlsaXN0X2FkZCgmZGVzYy0+bm9kZSwgJnNoX2NoYW4tPmxkX2ZyZWUpOwogCQlzaF9jaGFuLT5kZXNjc19hbGxvY2F0ZWQrKzsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CkBAIC0yNzMsNyArMjg2LDEwIEBACiAJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKIAlMSVNUX0hFQUQobGlzdCk7CiAKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnNoX2NoYW4tPmxkX3F1ZXVlKSk7CisJLyogUHJlcGFyZWQgYW5kIG5vdCBzdWJtaXR0ZWQgZGVzY3JpcHRvcnMgY2FuIHN0aWxsIGJlIG9uIHRoZSBxdWV1ZSAqLworCWlmICghbGlzdF9lbXB0eSgmc2hfY2hhbi0+bGRfcXVldWUpKQorCQlzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzaF9jaGFuLCB0cnVlKTsKKwogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAogCWxpc3Rfc3BsaWNlX2luaXQoJnNoX2NoYW4tPmxkX2ZyZWUsICZsaXN0KTsKQEAgLTI5Miw2ICszMDgsOCBAQAogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW47CiAJc3RydWN0IHNoX2Rlc2MgKmZpcnN0ID0gTlVMTCwgKnByZXYgPSBOVUxMLCAqbmV3OwogCXNpemVfdCBjb3B5X3NpemU7CisJTElTVF9IRUFEKHR4X2xpc3QpOworCWludCBjaHVua3MgPSAobGVuICsgU0hfRE1BX1RDUl9NQVgpIC8gKFNIX0RNQV9UQ1JfTUFYICsgMSk7CiAKIAlpZiAoIWNoYW4pCiAJCXJldHVybiBOVUxMOwpAQCAtMzAxLDEwOCArMzE5LDE4OSBAQAogCiAJc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CiAKKwkvKiBIYXZlIHRvIGxvY2sgdGhlIHdob2xlIGxvb3AgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgcmVsZWFzZSAqLworCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKworCS8qCisJICogQ2hhaW5pbmc6CisJICogZmlyc3QgZGVzY3JpcHRvciBpcyB3aGF0IHVzZXIgaXMgZGVhbGluZyB3aXRoIGluIGFsbCBBUEkgY2FsbHMsIGl0cworCSAqCWNvb2tpZSBpcyBhdCBmaXJzdCBzZXQgdG8gLUVCVVNZLCBhdCB0eC1zdWJtaXQgdG8gYSBwb3NpdGl2ZQorCSAqCW51bWJlcgorCSAqIGlmIG1vcmUgdGhhbiBvbmUgY2h1bmsgaXMgbmVlZGVkIGZ1cnRoZXIgY2h1bmtzIGhhdmUgY29va2llID0gLUVJTlZBTAorCSAqIHRoZSBsYXN0IGNodW5rLCBpZiBub3QgZXF1YWwgdG8gdGhlIGZpcnN0LCBoYXMgY29va2llID0gLUVOT1NQQworCSAqIGFsbCBjaHVua3MgYXJlIGxpbmtlZCBvbnRvIHRoZSB0eF9saXN0IGhlYWQgd2l0aCB0aGVpciAubm9kZSBoZWFkcworCSAqCW9ubHkgZHVyaW5nIHRoaXMgZnVuY3Rpb24sIHRoZW4gdGhleSBhcmUgaW1tZWRpYXRlbHkgc3BsaWNlZAorCSAqCWJhY2sgb250byB0aGUgZnJlZSBsaXN0IGluIGZvcm0gb2YgYSBjaGFpbgorCSAqLwogCWRvIHsKLQkJLyogQWxsb2NhdGUgdGhlIGxpbmsgZGVzY3JpcHRvciBmcm9tIERNQSBwb29sICovCisJCS8qIEFsbG9jYXRlIHRoZSBsaW5rIGRlc2NyaXB0b3IgZnJvbSB0aGUgZnJlZSBsaXN0ICovCiAJCW5ldyA9IHNoX2RtYWVfZ2V0X2Rlc2Moc2hfY2hhbik7CiAJCWlmICghbmV3KSB7CiAJCQlkZXZfZXJyKHNoX2NoYW4tPmRldiwKIAkJCQkiTm8gZnJlZSBtZW1vcnkgZm9yIGxpbmsgZGVzY3JpcHRvclxuIik7Ci0JCQlnb3RvIGVycl9nZXRfZGVzYzsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobmV3LCAmdHhfbGlzdCwgbm9kZSkKKwkJCQluZXctPm1hcmsgPSBERVNDX0lETEU7CisJCQlsaXN0X3NwbGljZSgmdHhfbGlzdCwgJnNoX2NoYW4tPmxkX2ZyZWUpOworCQkJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCi0JCWNvcHlfc2l6ZSA9IG1pbihsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVgpOworCQljb3B5X3NpemUgPSBtaW4obGVuLCAoc2l6ZV90KVNIX0RNQV9UQ1JfTUFYICsgMSk7CiAKIAkJbmV3LT5ody5zYXIgPSBkbWFfc3JjOwogCQluZXctPmh3LmRhciA9IGRtYV9kZXN0OwogCQluZXctPmh3LnRjciA9IGNvcHlfc2l6ZTsKLQkJaWYgKCFmaXJzdCkKKwkJaWYgKCFmaXJzdCkgeworCQkJLyogRmlyc3QgZGVzYyAqLworCQkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUJVU1k7CiAJCQlmaXJzdCA9IG5ldzsKKwkJfSBlbHNlIHsKKwkJCS8qIE90aGVyIGRlc2MgLSBpbnZpc2libGUgdG8gdGhlIHVzZXIgKi8KKwkJCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVJTlZBTDsKKwkJfQogCi0JCW5ldy0+bWFyayA9IERFU0NfTkNPTVA7Ci0JCWFzeW5jX3R4X2FjaygmbmV3LT5hc3luY190eCk7CisJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LAorCQkJImNoYWluaW5nICV1IG9mICV1IHdpdGggJXAsIGRzdCAleCwgY29va2llICVkXG4iLAorCQkJY29weV9zaXplLCBsZW4sICZuZXctPmFzeW5jX3R4LCBkbWFfZGVzdCwKKwkJCW5ldy0+YXN5bmNfdHguY29va2llKTsKKworCQluZXctPm1hcmsgPSBERVNDX1BSRVBBUkVEOworCQluZXctPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJCW5ldy0+Y2h1bmtzID0gY2h1bmtzLS07CiAKIAkJcHJldiA9IG5ldzsKIAkJbGVuIC09IGNvcHlfc2l6ZTsKIAkJZG1hX3NyYyArPSBjb3B5X3NpemU7CiAJCWRtYV9kZXN0ICs9IGNvcHlfc2l6ZTsKIAkJLyogSW5zZXJ0IHRoZSBsaW5rIGRlc2NyaXB0b3IgdG8gdGhlIExEIHJpbmcgKi8KLQkJbGlzdF9hZGRfdGFpbCgmbmV3LT5ub2RlLCAmZmlyc3QtPnR4X2xpc3QpOworCQlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZ0eF9saXN0KTsKIAl9IHdoaWxlIChsZW4pOwogCi0JbmV3LT5hc3luY190eC5mbGFncyA9IGZsYWdzOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLwotCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVCVVNZOyAvKiBMYXN0IGRlc2MgKi8KKwlpZiAobmV3ICE9IGZpcnN0KQorCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FTk9TUEM7CisKKwkvKiBQdXQgdGhlbSBiYWNrIG9uIHRoZSBmcmVlIGxpc3QsIHNvLCB0aGV5IGRvbid0IGdldCBsb3N0ICovCisJbGlzdF9zcGxpY2VfdGFpbCgmdHhfbGlzdCwgJnNoX2NoYW4tPmxkX2ZyZWUpOworCisJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CiAKIAlyZXR1cm4gJmZpcnN0LT5hc3luY190eDsKK30KIAotZXJyX2dldF9kZXNjOgotCXNoX2RtYWVfcHV0X2Rlc2Moc2hfY2hhbiwgZmlyc3QpOwotCXJldHVybiBOVUxMOworc3RhdGljIGRtYV9hc3luY190eF9jYWxsYmFjayBfX2xkX2NsZWFudXAoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgYm9vbCBhbGwpCit7CisJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKKwkvKiBJcyB0aGUgImV4cG9zZWQiIGhlYWQgb2YgYSBjaGFpbiBhY2tlZD8gKi8KKwlib29sIGhlYWRfYWNrZWQgPSBmYWxzZTsKKwlkbWFfY29va2llX3QgY29va2llID0gMDsKKwlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2sgPSBOVUxMOworCXZvaWQgKnBhcmFtID0gTlVMTDsKIAorCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgeworCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gJmRlc2MtPmFzeW5jX3R4OworCisJCUJVR19PTih0eC0+Y29va2llID4gMCAmJiB0eC0+Y29va2llICE9IGRlc2MtPmNvb2tpZSk7CisJCUJVR19PTihkZXNjLT5tYXJrICE9IERFU0NfU1VCTUlUVEVEICYmCisJCSAgICAgICBkZXNjLT5tYXJrICE9IERFU0NfQ09NUExFVEVEICYmCisJCSAgICAgICBkZXNjLT5tYXJrICE9IERFU0NfV0FJVElORyk7CisKKwkJLyoKKwkJICogcXVldWUgaXMgb3JkZXJlZCwgYW5kIHdlIHVzZSB0aGlzIGxvb3AgdG8gKDEpIGNsZWFuIHVwIGFsbAorCQkgKiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMsIGFuZCB0byAoMikgdXBkYXRlIGRlc2NyaXB0b3IgZmxhZ3Mgb2YKKwkJICogYW55IGNodW5rcyBpbiBhIChwYXJ0aWFsbHkpIGNvbXBsZXRlZCBjaGFpbgorCQkgKi8KKwkJaWYgKCFhbGwgJiYgZGVzYy0+bWFyayA9PSBERVNDX1NVQk1JVFRFRCAmJgorCQkgICAgZGVzYy0+Y29va2llICE9IGNvb2tpZSkKKwkJCWJyZWFrOworCisJCWlmICh0eC0+Y29va2llID4gMCkKKwkJCWNvb2tpZSA9IHR4LT5jb29raWU7CisKKwkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQgJiYgZGVzYy0+Y2h1bmtzID09IDEpIHsKKwkJCUJVR19PTihzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICE9IGRlc2MtPmNvb2tpZSAtIDEpOworCQkJc2hfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSA9IGRlc2MtPmNvb2tpZTsKKwkJfQorCisJCS8qIENhbGwgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2h1bmsgKi8KKwkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQgJiYgdHgtPmNhbGxiYWNrKSB7CisJCQlkZXNjLT5tYXJrID0gREVTQ19XQUlUSU5HOworCQkJY2FsbGJhY2sgPSB0eC0+Y2FsbGJhY2s7CisJCQlwYXJhbSA9IHR4LT5jYWxsYmFja19wYXJhbTsKKwkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAiZGVzY3JpcHRvciAjJWRAJXAgb24gJWQgY2FsbGJhY2tcbiIsCisJCQkJdHgtPmNvb2tpZSwgdHgsIHNoX2NoYW4tPmlkKTsKKwkJCUJVR19PTihkZXNjLT5jaHVua3MgIT0gMSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0eC0+Y29va2llID4gMCB8fCB0eC0+Y29va2llID09IC1FQlVTWSkgeworCQkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQpIHsKKwkJCQlCVUdfT04odHgtPmNvb2tpZSA8IDApOworCQkJCWRlc2MtPm1hcmsgPSBERVNDX1dBSVRJTkc7CisJCQl9CisJCQloZWFkX2Fja2VkID0gYXN5bmNfdHhfdGVzdF9hY2sodHgpOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChkZXNjLT5tYXJrKSB7CisJCQljYXNlIERFU0NfQ09NUExFVEVEOgorCQkJCWRlc2MtPm1hcmsgPSBERVNDX1dBSVRJTkc7CisJCQkJLyogRmFsbCB0aHJvdWdoICovCisJCQljYXNlIERFU0NfV0FJVElORzoKKwkJCQlpZiAoaGVhZF9hY2tlZCkKKwkJCQkJYXN5bmNfdHhfYWNrKCZkZXNjLT5hc3luY190eCk7CisJCQl9CisJCX0KKworCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwgImRlc2NyaXB0b3IgJXAgIyVkIGNvbXBsZXRlZC5cbiIsCisJCQl0eCwgdHgtPmNvb2tpZSk7CisKKwkJaWYgKCgoZGVzYy0+bWFyayA9PSBERVNDX0NPTVBMRVRFRCB8fAorCQkgICAgICBkZXNjLT5tYXJrID09IERFU0NfV0FJVElORykgJiYKKwkJICAgICBhc3luY190eF90ZXN0X2FjaygmZGVzYy0+YXN5bmNfdHgpKSB8fCBhbGwpIHsKKwkJCS8qIFJlbW92ZSBmcm9tIGxkX3F1ZXVlIGxpc3QgKi8KKwkJCWRlc2MtPm1hcmsgPSBERVNDX0lETEU7CisJCQlsaXN0X21vdmUoJmRlc2MtPm5vZGUsICZzaF9jaGFuLT5sZF9mcmVlKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKworCWlmIChjYWxsYmFjaykKKwkJY2FsbGJhY2socGFyYW0pOworCisJcmV0dXJuIGNhbGxiYWNrOwogfQogCiAvKgogICogc2hfY2hhbl9sZF9jbGVhbnVwIC0gQ2xlYW4gdXAgbGluayBkZXNjcmlwdG9ycwogICoKLSAqIFRoaXMgZnVuY3Rpb24gY2xlYW4gdXAgdGhlIGxkX3F1ZXVlIG9mIERNQSBjaGFubmVsLgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIGxkX3F1ZXVlIG9mIERNQSBjaGFubmVsLgogICovCi1zdGF0aWMgdm9pZCBzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIHZvaWQgc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgYm9vbCBhbGwpCiB7Ci0Jc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKLQotCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgewotCQlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2s7Ci0JCXZvaWQgKmNhbGxiYWNrX3BhcmFtOwotCi0JCS8qIG5vbiBzZW5kIGRhdGEgKi8KLQkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19OQ09NUCkKLQkJCWJyZWFrOwotCi0JCS8qIHNlbmQgZGF0YSBzZXNjICovCi0JCWNhbGxiYWNrID0gZGVzYy0+YXN5bmNfdHguY2FsbGJhY2s7Ci0JCWNhbGxiYWNrX3BhcmFtID0gZGVzYy0+YXN5bmNfdHguY2FsbGJhY2tfcGFyYW07Ci0KLQkJLyogUmVtb3ZlIGZyb20gbGRfcXVldWUgbGlzdCAqLwotCQlsaXN0X3NwbGljZV9pbml0KCZkZXNjLT50eF9saXN0LCAmc2hfY2hhbi0+bGRfZnJlZSk7Ci0KLQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJsaW5rIGRlc2NyaXB0b3IgJXAgd2lsbCBiZSByZWN5Y2xlLlxuIiwKLQkJCQlkZXNjKTsKLQotCQlsaXN0X21vdmUoJmRlc2MtPm5vZGUsICZzaF9jaGFuLT5sZF9mcmVlKTsKLQkJLyogUnVuIHRoZSBsaW5rIGRlc2NyaXB0b3IgY2FsbGJhY2sgZnVuY3Rpb24gKi8KLQkJaWYgKGNhbGxiYWNrKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAibGluayBkZXNjcmlwdG9yICVwIGNhbGxiYWNrXG4iLAotCQkJCQlkZXNjKTsKLQkJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKLQkJCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKwl3aGlsZSAoX19sZF9jbGVhbnVwKHNoX2NoYW4sIGFsbCkpCisJCTsKIH0KIAogc3RhdGljIHZvaWQgc2hfY2hhbl94ZmVyX2xkX3F1ZXVlKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGRfbm9kZTsKLQlzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3OworCXN0cnVjdCBzaF9kZXNjICpzZDsKIAorCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAkvKiBETUEgd29yayBjaGVjayAqLwotCWlmIChkbWFlX2lzX2J1c3koc2hfY2hhbikpCisJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkgeworCQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAkJcmV0dXJuOworCX0KIAogCS8qIEZpbmQgdGhlIGZpcnN0IHVuLXRyYW5zZmVyIGRlc2NpcHRvciAqLwotCWZvciAobGRfbm9kZSA9IHNoX2NoYW4tPmxkX3F1ZXVlLm5leHQ7Ci0JCShsZF9ub2RlICE9ICZzaF9jaGFuLT5sZF9xdWV1ZSkKLQkJCSYmICh0b19zaF9kZXNjKGxkX25vZGUpLT5tYXJrID09IERFU0NfQ09NUCk7Ci0JCWxkX25vZGUgPSBsZF9ub2RlLT5uZXh0KQotCQljcHVfcmVsYXgoKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmc2hfY2hhbi0+bGRfcXVldWUsIG5vZGUpCisJCWlmIChzZC0+bWFyayA9PSBERVNDX1NVQk1JVFRFRCkgeworCQkJLyogR2V0IHRoZSBsZCBzdGFydCBhZGRyZXNzIGZyb20gbGRfcXVldWUgKi8KKwkJCWRtYWVfc2V0X3JlZyhzaF9jaGFuLCAmc2QtPmh3KTsKKwkJCWRtYWVfc3RhcnQoc2hfY2hhbik7CisJCQlicmVhazsKKwkJfQogCi0JaWYgKGxkX25vZGUgIT0gJnNoX2NoYW4tPmxkX3F1ZXVlKSB7Ci0JCS8qIEdldCB0aGUgbGQgc3RhcnQgYWRkcmVzcyBmcm9tIGxkX3F1ZXVlICovCi0JCWh3ID0gdG9fc2hfZGVzYyhsZF9ub2RlKS0+aHc7Ci0JCWRtYWVfc2V0X3JlZyhzaF9jaGFuLCBodyk7Ci0JCWRtYWVfc3RhcnQoc2hfY2hhbik7Ci0JfQorCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzaF9kbWFlX21lbWNweV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKQEAgLTQyMCwxMiArNTE5LDExIEBACiAJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKIAlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKIAotCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4pOworCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIGZhbHNlKTsKIAogCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKIAlsYXN0X2NvbXBsZXRlID0gc2hfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZTsKLQlpZiAobGFzdF9jb21wbGV0ZSA9PSAtRUJVU1kpCi0JCWxhc3RfY29tcGxldGUgPSBsYXN0X3VzZWQ7CisJQlVHX09OKGxhc3RfY29tcGxldGUgPCAwKTsKIAogCWlmIChkb25lKQogCQkqZG9uZSA9IGxhc3RfY29tcGxldGU7CkBAIC00ODAsMTEgKzU3OCwxMyBAQAogCQllcnIgPSBzaF9kbWFlX3JzdCgwKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CisjaWZkZWYgU0hfRE1BQ19CQVNFMQogCQlpZiAoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9ETUFPUjEpIHsKIAkJCWVyciA9IHNoX2RtYWVfcnN0KDEpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CisjZW5kaWYKIAkJZGlzYWJsZV9pcnEoaXJxKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KQEAgLTQ5NCwzNSArNTk0LDI1IEBACiBzdGF0aWMgdm9pZCBkbWFlX2RvX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4gPSAoc3RydWN0IHNoX2RtYWVfY2hhbiAqKWRhdGE7Ci0Jc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYywgKmN1cl9kZXNjID0gTlVMTDsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYzsKIAl1MzIgc2FyX2J1ZiA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgU0FSKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywKLQkJCQkgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7Ci0JCWlmICgoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmKSB7Ci0JCQljdXJfZGVzYyA9IGRlc2M7CisJc3Bpbl9sb2NrKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7CisJCWlmICgoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmICYmCisJCSAgICBkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CisJCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwgImRvbmUgIyVkQCVwIGRzdCAldVxuIiwKKwkJCQlkZXNjLT5hc3luY190eC5jb29raWUsICZkZXNjLT5hc3luY190eCwKKwkJCQlkZXNjLT5ody5kYXIpOworCQkJZGVzYy0+bWFyayA9IERFU0NfQ09NUExFVEVEOwogCQkJYnJlYWs7CiAJCX0KIAl9CisJc3Bpbl91bmxvY2soJnNoX2NoYW4tPmRlc2NfbG9jayk7CiAKLQlpZiAoY3VyX2Rlc2MpIHsKLQkJc3dpdGNoIChjdXJfZGVzYy0+YXN5bmNfdHguY29va2llKSB7Ci0JCWNhc2UgMDogLyogb3RoZXIgZGVzYyBkYXRhICovCi0JCQlicmVhazsKLQkJY2FzZSAtRUJVU1k6IC8qIGxhc3QgZGVzYyAqLwotCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0KLQkJCQljdXJfZGVzYy0+YXN5bmNfdHguY29va2llOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IC8qIGZpcnN0IGRlc2MgKCAwIDwgKSovCi0JCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0KLQkJCQljdXJfZGVzYy0+YXN5bmNfdHguY29va2llIC0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWN1cl9kZXNjLT5tYXJrID0gREVTQ19DT01QOwotCX0KIAkvKiBOZXh0IGRlc2MgKi8KIAlzaF9jaGFuX3hmZXJfbGRfcXVldWUoc2hfY2hhbik7Ci0Jc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc2hfY2hhbik7CisJc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc2hfY2hhbiwgZmFsc2UpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9kbWFlX2lycSh1bnNpZ25lZCBpbnQgaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCA2MGI4MWU1Li4xMDhmMWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTEzLDkgKzEzLDkgQEAKICNpZm5kZWYgX19ETUFfU0hETUFfSAogI2RlZmluZSBfX0RNQV9TSERNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjZGVmaW5lIFNIX0RNQV9UQ1JfTUFYIDB4MDBGRkZGRkYJLyogMTZNQiAqLwogCkBAIC0yNiwxMyArMjYsMTYgQEAKIH07CiAKIHN0cnVjdCBzaF9kZXNjIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2xpc3Q7CiAJc3RydWN0IHNoX2RtYWVfcmVncyBodzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yIGFzeW5jX3R4OworCWRtYV9jb29raWVfdCBjb29raWU7CisJaW50IGNodW5rczsKIAlpbnQgbWFyazsKIH07CiAKK3N0cnVjdCBkZXZpY2U7CisKIHN0cnVjdCBzaF9kbWFlX2NoYW4gewogCWRtYV9jb29raWVfdCBjb21wbGV0ZWRfY29va2llOwkvKiBUaGUgbWF4aW11bSBjb29raWUgY29tcGxldGVkICovCiAJc3BpbmxvY2tfdCBkZXNjX2xvY2s7CQkvKiBEZXNjcmlwdG9yIG9wZXJhdGlvbiBsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCBkZjViNjg0Li5jNWZhY2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTE3MDAsMTEgKzE3MDAsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKGludCBjdHJsLCBzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JaW50IGRpbW0sIHNpemUwLCBzaXplMTsKKwlpbnQgZGltbSwgc2l6ZTAsIHNpemUxLCBmYWN0b3IgPSAwOwogCXUzMiBkYmFtOwogCXUzMiAqZGNzYjsKIAogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweGYpIHsKKwkJaWYgKHB2dC0+ZGNscjAgJiBGMTBfV0lEVEhfMTI4KQorCQkJZmFjdG9yID0gMTsKKwogCQkvKiBLOCBmYW1pbGllcyA8IHJldkYgbm90IHN1cHBvcnRlZCB5ZXQgKi8KIAkgICAgICAgaWYgKHB2dC0+ZXh0X21vZGVsIDwgSzhfUkVWX0YpCiAJCQlyZXR1cm47CkBAIC0xNzMyLDcgKzE3MzUsOCBAQAogCQkJc2l6ZTEgPSBwdnQtPm9wcy0+ZGJhbV90b19jcyhwdnQsIERCQU1fRElNTShkaW1tLCBkYmFtKSk7CiAKIAkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywgIiAlZDogJTVkTUIgJWQ6ICU1ZE1CXG4iLAotCQkJICAgIGRpbW0gKiAyLCBzaXplMCwgZGltbSAqIDIgKyAxLCBzaXplMSk7CisJCQkgICAgZGltbSAqIDIsICAgICBzaXplMCA8PCBmYWN0b3IsCisJCQkgICAgZGltbSAqIDIgKyAxLCBzaXplMSA8PCBmYWN0b3IpOwogCX0KIH0KIApAQCAtMjM0NSw3ICsyMzQ5LDcgQEAKIAlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDTFJfMCwgJnB2dC0+ZGNscjApOwogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBGMTBfRENIUl8wLCAmcHZ0LT5kY2hyMCk7CiAKLQlpZiAoIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgeworCWlmICghZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpICYmIGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MTApIHsKIAkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0xSXzEsICZwdnQtPmRjbHIxKTsKIAkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0hSXzEsICZwdnQtPmRjaHIxKTsKIAl9CkBAIC0yNjg2LDkgKzI2OTAsOCBAQAogCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgIiVzIiwgZWNjX3dhcm5pbmcpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQl9IGVsc2UKLQkJLyogQ0xFQVIgdGhlIG92ZXJyaWRlLCBzaW5jZSBCSU9TIGNvbnRyb2xsZWQgaXQgKi8KIAkJZWNjX2VuYWJsZV9vdmVycmlkZSA9IDA7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTI1LDE2ICsyOTI4LDE1IEBACiAKIAlhbWQ2NF9mcmVlX21jX3NpYmxpbmdfZGV2aWNlcyhwdnQpOwogCi0Ja2ZyZWUocHZ0KTsKLQltY2ktPnB2dF9pbmZvID0gTlVMTDsKLQotCW1jaV9sb29rdXBbcHZ0LT5tY19ub2RlX2lkXSA9IE5VTEw7Ci0KIAkvKiB1bnJlZ2lzdGVyIGZyb20gRURBQyBNQ0UgKi8KIAlhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKGZhbHNlKTsKIAlhbWRfdW5yZWdpc3Rlcl9lY2NfZGVjb2RlcihhbWQ2NF9kZWNvZGVfYnVzX2Vycm9yKTsKIAogCS8qIEZyZWUgdGhlIEVEQUMgQ09SRSByZXNvdXJjZXMgKi8KKwltY2ktPnB2dF9pbmZvID0gTlVMTDsKKwltY2lfbG9va3VwW3B2dC0+bWNfbm9kZV9pZF0gPSBOVUxMOworCisJa2ZyZWUocHZ0KTsKIAllZGFjX21jX2ZyZWUobWNpKTsKIH0KIApAQCAtMzAxMSwyNSArMzAxMywyOSBAQAogc3RhdGljIGludCBfX2luaXQgYW1kNjRfZWRhY19pbml0KHZvaWQpCiB7CiAJaW50IG5iLCBlcnIgPSAtRU5PREVWOworCWJvb2wgbG9hZF9vayA9IGZhbHNlOwogCiAJZWRhY19wcmludGsoS0VSTl9JTkZPLCBFREFDX01PRF9TVFIsIEVEQUNfQU1ENjRfVkVSU0lPTiAiXG4iKTsKIAogCW9wc3RhdGVfaW5pdCgpOwogCiAJaWYgKGNhY2hlX2s4X25vcnRoYnJpZGdlcygpIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfcmV0OwogCiAJbXNycyA9IG1zcnNfYWxsb2MoKTsKKwlpZiAoIW1zcnMpCisJCWdvdG8gZXJyX3JldDsKIAogCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFtZDY0X3BjaV9kcml2ZXIpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX3BjaTsKIAogCS8qCiAJICogQXQgdGhpcyBwb2ludCwgdGhlIGFycmF5ICdwdnRfbG9va3VwW10nIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGFsbG9jJ2QKIAkgKiBhbWQ2NF9wdnQgc3RydWN0cy4gVGhlc2Ugd2lsbCBiZSB1c2VkIGluIHRoZSAybmQgc3RhZ2UgaW5pdCBmdW5jdGlvbgogCSAqIHRvIGZpbmlzaCBpbml0aWFsaXphdGlvbiBvZiB0aGUgTUMgaW5zdGFuY2VzLgogCSAqLworCWVyciA9IC1FTk9ERVY7CiAJZm9yIChuYiA9IDA7IG5iIDwgbnVtX2s4X25vcnRoYnJpZGdlczsgbmIrKykgewogCQlpZiAoIXB2dF9sb29rdXBbbmJdKQogCQkJY29udGludWU7CkBAIC0zMDM3LDE2ICszMDQzLDIxIEBACiAJCWVyciA9IGFtZDY0X2luaXRfMm5kX3N0YWdlKHB2dF9sb29rdXBbbmJdKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyXzJuZF9zdGFnZTsKKworCQlsb2FkX29rID0gdHJ1ZTsKIAl9CiAKLQlhbWQ2NF9zZXR1cF9wY2lfZGV2aWNlKCk7Ci0KLQlyZXR1cm4gMDsKKwlpZiAobG9hZF9vaykgeworCQlhbWQ2NF9zZXR1cF9wY2lfZGV2aWNlKCk7CisJCXJldHVybiAwOworCX0KIAogZXJyXzJuZF9zdGFnZToKLQlkZWJ1Z2YwKCIybmQgc3RhZ2UgZmFpbGVkXG4iKTsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFtZDY0X3BjaV9kcml2ZXIpOwotCitlcnJfcGNpOgorCW1zcnNfZnJlZShtc3JzKTsKKwltc3JzID0gTlVMTDsKK2Vycl9yZXQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYwppbmRleCA0MjI3MjhjLi5mYjYwYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYwpAQCAtNTM0LDggKzUzNCw2IEBACiB7CiAJdTggaGVhZGVyX3R5cGU7CiAKLQlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0KIAlnZXRfcGNpX3Bhcml0eV9zdGF0dXMoZGV2LCAwKTsKIAogCS8qIHJlYWQgdGhlIGRldmljZSBUWVBFLCBsb29raW5nIGZvciBicmlkZ2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKaW5kZXggMTNlZmNkMy4uYTkzNzFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZwpAQCAtMSw1ICsxLDEwIEBACittZW51ICJJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJIHx8IEJST0tFTgorCSMgZmlyZXdpcmUtY29yZSBkb2VzIG5vdCBkZXBlbmQgb24gUENJIGJ1dCBpcworCSMgbm90IHVzZWZ1bCB3aXRob3V0IFBDSSBjb250cm9sbGVyIGRyaXZlcgorCiBjb21tZW50ICJZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLiIKLWNvbW1lbnQgIlNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCitjb21tZW50ICJUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuIgogCiBjb25maWcgRklSRVdJUkUKIAl0cmlzdGF0ZSAiRmlyZVdpcmUgZHJpdmVyIHN0YWNrIgpAQCAtMTUsMTYgKzIwLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIGZpcmV3aXJlLWNvcmUuCiAKLQkgIFRoaXMgbW9kdWxlIGZ1bmN0aW9uYWxseSByZXBsYWNlcyBpZWVlMTM5NCwgcmF3MTM5NCwgYW5kIHZpZGVvMTM5NC4KLQkgIFRvIGFjY2VzcyBpdCBmcm9tIGFwcGxpY2F0aW9uIHByb2dyYW1zLCB5b3UgZ2VuZXJhbGx5IG5lZWQgYXQgbGVhc3QKLQkgIGxpYnJhdzEzOTQgdjIuICBJSURDL0RDQU0gYXBwbGljYXRpb25zIG5lZWQgbGliZGMxMzk0IHYyLgotCSAgTm8gbGlicmFyaWVzIGFyZSByZXF1aXJlZCB0byBhY2Nlc3Mgc3RvcmFnZSBkZXZpY2VzIHRocm91Z2ggdGhlCi0JICBmaXJld2lyZS1zYnAyIGRyaXZlci4KLQotCSAgTk9URToKLQkgIEZpcmVXaXJlIGF1ZGlvIGRldmljZXMgY3VycmVudGx5IHJlcXVpcmUgdGhlIG9sZCBkcml2ZXJzIChpZWVlMTM5NCwKLQkgIG9oY2kxMzk0LCByYXcxMzk0KS4KLQogY29uZmlnIEZJUkVXSVJFX09IQ0kKIAl0cmlzdGF0ZSAiT0hDSS0xMzk0IGNvbnRyb2xsZXJzIgogCWRlcGVuZHMgb24gUENJICYmIEZJUkVXSVJFCkBAIC0zNCwyMiArMjksNyBAQAogCSAgaXMgdGhlIG9ubHkgY2hpcHNldCBpbiB1c2UsIHNvIHNheSBZIGhlcmUuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6ICBUaGUgbW9kdWxlIHdpbGwgYmUKLQkgIGNhbGxlZCBmaXJld2lyZS1vaGNpLiAgSXQgcmVwbGFjZXMgb2hjaTEzOTQgb2YgdGhlIGNsYXNzaWMgSUVFRSAxMzk0Ci0JICBzdGFjay4KLQotCSAgTk9URToKLQkgIElmIHlvdSB3YW50IHRvIGluc3RhbGwgZmlyZXdpcmUtb2hjaSBhbmQgb2hjaTEzOTQgdG9nZXRoZXIsIHlvdQotCSAgc2hvdWxkIGNvbmZpZ3VyZSB0aGVtIG9ubHkgYXMgbW9kdWxlcyBhbmQgYmxhY2tsaXN0IHRoZSBkcml2ZXIocykKLQkgIHdoaWNoIHlvdSBkb24ndCB3YW50IHRvIGhhdmUgYXV0by1sb2FkZWQuICBBZGQgZWl0aGVyCi0KLQkgICAgICBibGFja2xpc3QgZmlyZXdpcmUtb2hjaQotCSAgb3IKLQkgICAgICBibGFja2xpc3Qgb2hjaTEzOTQKLQkgICAgICBibGFja2xpc3QgdmlkZW8xMzk0Ci0JICAgICAgYmxhY2tsaXN0IGR2MTM5NAotCi0JICB0byAvZXRjL21vZHByb2JlLmNvbmYgb3IgL2V0Yy9tb2Rwcm9iZS5kLyogYW5kIHVwZGF0ZSBtb2Rwcm9iZS5jb25mCi0JICBkZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24uCisJICBjYWxsZWQgZmlyZXdpcmUtb2hjaS4KIAogY29uZmlnIEZJUkVXSVJFX09IQ0lfREVCVUcKIAlib29sCkBAIC02Niw4ICs0Niw3IEBACiAJICBsaWtlIHNjYW5uZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlOiAgVGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgZmlyZXdpcmUtc2JwMi4gIEl0IHJlcGxhY2VzIHNicDIgb2YgdGhlIGNsYXNzaWMgSUVFRSAxMzk0Ci0JICBzdGFjay4KKwkgIGNhbGxlZCBmaXJld2lyZS1zYnAyLgogCiAJICBZb3Ugc2hvdWxkIGFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGRpc2tzLCBDRC1ST01zLCBldGMuIGluIHRoZSBTQ1NJCiAJICBjb25maWd1cmF0aW9uIHNlY3Rpb24uCkBAIC04Myw1ICs2Miw4IEBACiAJICBOT1RFLCB0aGlzIGRyaXZlciBpcyBub3Qgc3RhYmxlIHlldCEKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogIFRoZSBtb2R1bGUgd2lsbCBiZQotCSAgY2FsbGVkIGZpcmV3aXJlLW5ldC4gIEl0IHJlcGxhY2VzIGV0aDEzOTQgb2YgdGhlIGNsYXNzaWMgSUVFRSAxMzk0Ci0JICBzdGFjay4KKwkgIGNhbGxlZCBmaXJld2lyZS1uZXQuCisKK3NvdXJjZSAiZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnIgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwppbmRleCAyMzFlNmVlLi5lNmQ2Mzg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCkBAIC02MDEsOCArNjAxLDkgQEAKIAlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwKIAkJCXN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlLCByZXNvdXJjZSk7CiAKLQlmd19zZW5kX3Jlc3BvbnNlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCByLT5yZXF1ZXN0LAotCQkJIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKKwlpZiAoci0+cmVxdWVzdCkKKwkJZndfc2VuZF9yZXNwb25zZShjbGllbnQtPmRldmljZS0+Y2FyZCwgci0+cmVxdWVzdCwKKwkJCQkgUkNPREVfQ09ORkxJQ1RfRVJST1IpOwogCWtmcmVlKHIpOwogfQogCkBAIC02NDUsNyArNjQ2LDggQEAKICBmYWlsZWQ6CiAJa2ZyZWUocik7CiAJa2ZyZWUoZSk7Ci0JZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9DT05GTElDVF9FUlJPUik7CisJaWYgKHJlcXVlc3QpCisJCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfQ09ORkxJQ1RfRVJST1IpOwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCkBAIC03MTUsMTUgKzcxNywxOCBAQAogCiAJciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UsCiAJCQkgcmVzb3VyY2UpOwotCWlmIChyZXF1ZXN0LT5sZW5ndGggPCByLT5sZW5ndGgpCi0JCXItPmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihyLT5kYXRhLCB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgci0+bGVuZ3RoKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKKwlpZiAoci0+cmVxdWVzdCkgeworCQlpZiAocmVxdWVzdC0+bGVuZ3RoIDwgci0+bGVuZ3RoKQorCQkJci0+bGVuZ3RoID0gcmVxdWVzdC0+bGVuZ3RoOworCQlpZiAoY29weV9mcm9tX3VzZXIoci0+ZGF0YSwgdTY0X3RvX3VwdHIocmVxdWVzdC0+ZGF0YSksCisJCQkJICAgci0+bGVuZ3RoKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWtmcmVlKHItPnJlcXVlc3QpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZndfc2VuZF9yZXNwb25zZShjbGllbnQtPmRldmljZS0+Y2FyZCwgci0+cmVxdWVzdCwKKwkJCQkgcmVxdWVzdC0+cmNvZGUpOwogCX0KLQotCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHItPnJlcXVlc3QsIHJlcXVlc3QtPnJjb2RlKTsKICBvdXQ6CiAJa2ZyZWUocik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKaW5kZXggODQyNzM5ZC4uNDk1ODQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKQEAgLTQzMiwxNCArNDMyLDIwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBib29sIGlzX2VuY2xvc2luZ19oYW5kbGVyKHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXIsCisJCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCit7CisJcmV0dXJuIGhhbmRsZXItPm9mZnNldCA8PSBvZmZzZXQgJiYKKwkJb2Zmc2V0ICsgbGVuZ3RoIDw9IGhhbmRsZXItPm9mZnNldCArIGhhbmRsZXItPmxlbmd0aDsKK30KKwogc3RhdGljIHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmxvb2t1cF9lbmNsb3NpbmdfYWRkcmVzc19oYW5kbGVyKAogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCiB7CiAJc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlcjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaGFuZGxlciwgbGlzdCwgbGluaykgewotCQlpZiAoaGFuZGxlci0+b2Zmc2V0IDw9IG9mZnNldCAmJgotCQkgICAgb2Zmc2V0ICsgbGVuZ3RoIDw9IGhhbmRsZXItPm9mZnNldCArIGhhbmRsZXItPmxlbmd0aCkKKwkJaWYgKGlzX2VuY2xvc2luZ19oYW5kbGVyKGhhbmRsZXIsIG9mZnNldCwgbGVuZ3RoKSkKIAkJCXJldHVybiBoYW5kbGVyOwogCX0KIApAQCAtNDY1LDYgKzQ3MSwxMiBAQAogCXsgLnN0YXJ0ID0gMHhmZmZmZjAwMDA5MDBVTEwsIC5lbmQgPSAweDEwMDAwMDAwMDAwMDBVTEwsIH07CiAjZW5kaWYgIC8qICAwICAqLwogCitzdGF0aWMgYm9vbCBpc19pbl9mY3BfcmVnaW9uKHU2NCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCit7CisJcmV0dXJuIG9mZnNldCA+PSAoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfRkNQX0NPTU1BTkQpICYmCisJCW9mZnNldCArIGxlbmd0aCA8PSAoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfRkNQX0VORCk7Cit9CisKIC8qKgogICogZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyIC0gcmVnaXN0ZXIgZm9yIGluY29taW5nIHJlcXVlc3RzCiAgKiBAaGFuZGxlcjogY2FsbGJhY2sKQEAgLTQ3Nyw4ICs0ODksMTEgQEAKICAqIGdpdmUgdGhlIGRldGFpbHMgb2YgdGhlIHBhcnRpY3VsYXIgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm4gdmFsdWU6ICAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqCiAgKiBUaGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBoYW5kbGVyJ3MgYWRkcmVzcyByZWdpb24gaXMgZGV0ZXJtaW5lZCBieQogICogZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCkgYW5kIGlzIHJldHVybmVkIGluIGhhbmRsZXItPm9mZnNldC4KKyAqCisgKiBBZGRyZXNzIGFsbG9jYXRpb25zIGFyZSBleGNsdXNpdmUsIGV4Y2VwdCBmb3IgdGhlIEZDUCByZWdpc3RlcnMuCiAgKi8KIGludCBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlciwKIAkJCQljb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gKnJlZ2lvbikKQEAgLTQ5OCwxMCArNTEzLDEyIEBACiAKIAloYW5kbGVyLT5vZmZzZXQgPSByZWdpb24tPnN0YXJ0OwogCXdoaWxlIChoYW5kbGVyLT5vZmZzZXQgKyBoYW5kbGVyLT5sZW5ndGggPD0gcmVnaW9uLT5lbmQpIHsKLQkJb3RoZXIgPQotCQkgICAgbG9va3VwX292ZXJsYXBwaW5nX2FkZHJlc3NfaGFuZGxlcigmYWRkcmVzc19oYW5kbGVyX2xpc3QsCi0JCQkJCQkgICAgICAgaGFuZGxlci0+b2Zmc2V0LAotCQkJCQkJICAgICAgIGhhbmRsZXItPmxlbmd0aCk7CisJCWlmIChpc19pbl9mY3BfcmVnaW9uKGhhbmRsZXItPm9mZnNldCwgaGFuZGxlci0+bGVuZ3RoKSkKKwkJCW90aGVyID0gTlVMTDsKKwkJZWxzZQorCQkJb3RoZXIgPSBsb29rdXBfb3ZlcmxhcHBpbmdfYWRkcmVzc19oYW5kbGVyCisJCQkJCSgmYWRkcmVzc19oYW5kbGVyX2xpc3QsCisJCQkJCSBoYW5kbGVyLT5vZmZzZXQsIGhhbmRsZXItPmxlbmd0aCk7CiAJCWlmIChvdGhlciAhPSBOVUxMKSB7CiAJCQloYW5kbGVyLT5vZmZzZXQgKz0gb3RoZXItPmxlbmd0aDsKIAkJfSBlbHNlIHsKQEAgLTY2OCw2ICs2ODUsOSBAQAogdm9pZCBmd19zZW5kX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLAogCQkgICAgICBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwgaW50IHJjb2RlKQogeworCWlmIChXQVJOX09OQ0UoIXJlcXVlc3QsICJpbnZhbGlkIGZvciBGQ1AgYWRkcmVzcyBoYW5kbGVycyIpKQorCQlyZXR1cm47CisKIAkvKiB1bmlmaWVkIHRyYW5zYWN0aW9uIG9yIGJyb2FkY2FzdCB0cmFuc2FjdGlvbjogZG9uJ3QgcmVzcG9uZCAqLwogCWlmIChyZXF1ZXN0LT5hY2sgIT0gQUNLX1BFTkRJTkcgfHwKIAkgICAgSEVBREVSX0RFU1RJTkFUSU9OX0lTX0JST0FEQ0FTVChyZXF1ZXN0LT5yZXF1ZXN0X2hlYWRlclswXSkpIHsKQEAgLTY4NiwyNiArNzA2LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X3NlbmRfcmVzcG9uc2UpOwogCi12b2lkIGZ3X2NvcmVfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnApCitzdGF0aWMgdm9pZCBoYW5kbGVfZXhjbHVzaXZlX3JlZ2lvbl9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCQkgICAgc3RydWN0IGZ3X3BhY2tldCAqcCwKKwkJCQkJICAgIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCkKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOwotCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGNvZGUsIGRlc3RpbmF0aW9uLCBzb3VyY2U7CiAKLQlpZiAocC0+YWNrICE9IEFDS19QRU5ESU5HICYmIHAtPmFjayAhPSBBQ0tfQ09NUExFVEUpCi0JCXJldHVybjsKLQotCXJlcXVlc3QgPSBhbGxvY2F0ZV9yZXF1ZXN0KHApOwotCWlmIChyZXF1ZXN0ID09IE5VTEwpIHsKLQkJLyogRklYTUU6IHNlbmQgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnVzeSBwYWNrZXQuICovCi0JCXJldHVybjsKLQl9Ci0KLQlvZmZzZXQgICAgICA9Ci0JCSgodW5zaWduZWQgbG9uZyBsb25nKQotCQkgSEVBREVSX0dFVF9PRkZTRVRfSElHSChwLT5oZWFkZXJbMV0pIDw8IDMyKSB8IHAtPmhlYWRlclsyXTsKIAl0Y29kZSAgICAgICA9IEhFQURFUl9HRVRfVENPREUocC0+aGVhZGVyWzBdKTsKIAlkZXN0aW5hdGlvbiA9IEhFQURFUl9HRVRfREVTVElOQVRJT04ocC0+aGVhZGVyWzBdKTsKIAlzb3VyY2UgICAgICA9IEhFQURFUl9HRVRfU09VUkNFKHAtPmhlYWRlclsxXSk7CkBAIC03MzIsNiArNzQxLDczIEBACiAJCQkJCSAgcmVxdWVzdC0+ZGF0YSwgcmVxdWVzdC0+bGVuZ3RoLAogCQkJCQkgIGhhbmRsZXItPmNhbGxiYWNrX2RhdGEpOwogfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmNwX3JlZ2lvbl9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCSAgICAgIHN0cnVjdCBmd19wYWNrZXQgKnAsCisJCQkJICAgICAgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRjb2RlLCBkZXN0aW5hdGlvbiwgc291cmNlOworCisJaWYgKChvZmZzZXQgIT0gKENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0ZDUF9DT01NQU5EKSAmJgorCSAgICAgb2Zmc2V0ICE9IChDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9GQ1BfUkVTUE9OU0UpKSB8fAorCSAgICByZXF1ZXN0LT5sZW5ndGggPiAweDIwMCkgeworCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0FERFJFU1NfRVJST1IpOworCisJCXJldHVybjsKKwl9CisKKwl0Y29kZSAgICAgICA9IEhFQURFUl9HRVRfVENPREUocC0+aGVhZGVyWzBdKTsKKwlkZXN0aW5hdGlvbiA9IEhFQURFUl9HRVRfREVTVElOQVRJT04ocC0+aGVhZGVyWzBdKTsKKwlzb3VyY2UgICAgICA9IEhFQURFUl9HRVRfU09VUkNFKHAtPmhlYWRlclsxXSk7CisKKwlpZiAodGNvZGUgIT0gVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUICYmCisJICAgIHRjb2RlICE9IFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1QpIHsKKwkJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9UWVBFX0VSUk9SKTsKKworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkZHJlc3NfaGFuZGxlcl9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShoYW5kbGVyLCAmYWRkcmVzc19oYW5kbGVyX2xpc3QsIGxpbmspIHsKKwkJaWYgKGlzX2VuY2xvc2luZ19oYW5kbGVyKGhhbmRsZXIsIG9mZnNldCwgcmVxdWVzdC0+bGVuZ3RoKSkKKwkJCWhhbmRsZXItPmFkZHJlc3NfY2FsbGJhY2soY2FyZCwgTlVMTCwgdGNvZGUsCisJCQkJCQkgIGRlc3RpbmF0aW9uLCBzb3VyY2UsCisJCQkJCQkgIHAtPmdlbmVyYXRpb24sIHAtPnNwZWVkLAorCQkJCQkJICBvZmZzZXQsIHJlcXVlc3QtPmRhdGEsCisJCQkJCQkgIHJlcXVlc3QtPmxlbmd0aCwKKwkJCQkJCSAgaGFuZGxlci0+Y2FsbGJhY2tfZGF0YSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkZHJlc3NfaGFuZGxlcl9sb2NrLCBmbGFncyk7CisKKwlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTVBMRVRFKTsKK30KKwordm9pZCBmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQoreworCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CisKKwlpZiAocC0+YWNrICE9IEFDS19QRU5ESU5HICYmIHAtPmFjayAhPSBBQ0tfQ09NUExFVEUpCisJCXJldHVybjsKKworCXJlcXVlc3QgPSBhbGxvY2F0ZV9yZXF1ZXN0KHApOworCWlmIChyZXF1ZXN0ID09IE5VTEwpIHsKKwkJLyogRklYTUU6IHNlbmQgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnVzeSBwYWNrZXQuICovCisJCXJldHVybjsKKwl9CisKKwlvZmZzZXQgPSAoKHU2NClIRUFERVJfR0VUX09GRlNFVF9ISUdIKHAtPmhlYWRlclsxXSkgPDwgMzIpIHwKKwkJcC0+aGVhZGVyWzJdOworCisJaWYgKCFpc19pbl9mY3BfcmVnaW9uKG9mZnNldCwgcmVxdWVzdC0+bGVuZ3RoKSkKKwkJaGFuZGxlX2V4Y2x1c2l2ZV9yZWdpb25fcmVxdWVzdChjYXJkLCBwLCByZXF1ZXN0LCBvZmZzZXQpOworCWVsc2UKKwkJaGFuZGxlX2ZjcF9yZWdpb25fcmVxdWVzdChjYXJkLCBwLCByZXF1ZXN0LCBvZmZzZXQpOworCit9CiBFWFBPUlRfU1lNQk9MKGZ3X2NvcmVfaGFuZGxlX3JlcXVlc3QpOwogCiB2b2lkIGZ3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwppbmRleCA5Njc2OGUxLi5hNjE1NzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwpAQCAtMjIyNiw3ICsyMjI2LDYgQEAKIAlpZiAocmVzdCA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEZJWE1FOiBtYWtlIHBhY2tldC1wZXItYnVmZmVyL2R1YWwtYnVmZmVyIGEgY29udGV4dCBvcHRpb24gKi8KIAl3aGlsZSAocmVzdCA+IDApIHsKIAkJZCA9IGNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKCZjdHgtPmNvbnRleHQsCiAJCQkJCSAgICB6ICsgaGVhZGVyX3osICZkX2J1cyk7CkBAIC0yNDcwLDcgKzI0NjksMTAgQEAKIAl9CiAKIAl2ZXJzaW9uID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfVmVyc2lvbikgJiAweDAwZmYwMGZmOworI2lmIDAKKwkvKiBGSVhNRTogbWFrZSBpdCBhIGNvbnRleHQgb3B0aW9uIG9yIHJlbW92ZSBkdWFsLWJ1ZmZlciBtb2RlICovCiAJb2hjaS0+dXNlX2R1YWxidWZmZXIgPSB2ZXJzaW9uID49IE9IQ0lfVkVSU0lPTl8xXzE7CisjZW5kaWYKIAogCS8qIGR1YWwtYnVmZmVyIG1vZGUgaXMgYnJva2VuIGlmIG1vcmUgdGhhbiBvbmUgSVIgY29udGV4dCBpcyBhY3RpdmUgKi8KIAlpZiAoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BR0VSRSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYwppbmRleCA2MjhlYWUzLi5hMWZjZTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYwpAQCAtMzksOCArMzksNyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKIHsKIAlnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZSA9IGRybV9wY2lfYWxsb2MoZGV2LCBnYXJ0X2luZm8tPnRhYmxlX3NpemUsCi0JCQkJCQlQQUdFX1NJWkUsCi0JCQkJCQlnYXJ0X2luZm8tPnRhYmxlX21hc2spOworCQkJCQkJUEFHRV9TSVpFKTsKIAlpZiAoZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTExMiw2ICsxMTEsMTMgQEAKIAlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOKSB7CiAJCURSTV9ERUJVRygiUENJOiBubyB0YWJsZSBpbiBWUkFNOiB1c2luZyBub3JtYWwgUkFNXG4iKTsKIAorCQlpZiAocGNpX3NldF9kbWFfbWFzayhkZXYtPnBkZXYsIGdhcnRfaW5mby0+dGFibGVfbWFzaykpIHsKKwkJCURSTV9FUlJPUigiZmFpbCB0byBzZXQgZG1hIG1hc2sgdG8gMHglTHhcbiIsCisJCQkJICBnYXJ0X2luZm8tPnRhYmxlX21hc2spOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCiAJCXJldCA9IGRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZShkZXYsIGdhcnRfaW5mbyk7CiAJCWlmIChyZXQpIHsKIAkJCURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRlIFBDSSBHQVJUIHBhZ2UhXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKaW5kZXggM2QwOWUzMC4uODQxN2NjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKQEAgLTMyNiw3ICszMjYsNyBAQAogCQkgKiBBcyB3ZSdyZSBsaW1pdGluZyB0aGUgYWRkcmVzcyB0byAyXjMyLTEgKG9yIGxlc3MpLAogCQkgKiBjYXN0aW5nIGl0IGRvd24gdG8gMzIgYml0cyBpcyBubyBwcm9ibGVtLCBidXQgd2UKIAkJICogbmVlZCB0byBwb2ludCB0byBhIDY0Yml0IHZhcmlhYmxlIGZpcnN0LiAqLwotCQlkbWFoID0gZHJtX3BjaV9hbGxvYyhkZXYsIG1hcC0+c2l6ZSwgbWFwLT5zaXplLCAweGZmZmZmZmZmVUwpOworCQlkbWFoID0gZHJtX3BjaV9hbGxvYyhkZXYsIG1hcC0+c2l6ZSwgbWFwLT5zaXplKTsKIAkJaWYgKCFkbWFoKSB7CiAJCQlrZnJlZShtYXApOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC04ODUsNyArODg1LDcgQEAKIAogCXdoaWxlIChlbnRyeS0+YnVmX2NvdW50IDwgY291bnQpIHsKIAotCQlkbWFoID0gZHJtX3BjaV9hbGxvYyhkZXYsIFBBR0VfU0laRSA8PCBwYWdlX29yZGVyLCAweDEwMDAsIDB4ZmZmZmZmZmZ1bCk7CisJCWRtYWggPSBkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFIDw8IHBhZ2Vfb3JkZXIsIDB4MTAwMCk7CiAKIAkJaWYgKCFkbWFoKSB7CiAJCQkvKiBTZXQgY291bnQgY29ycmVjdGx5IHNvIHdlIGZyZWUgdGhlIHByb3BlciBhbW91bnQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwppbmRleCBmZjJmMTA0Li43NjZjNDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKQEAgLTQzNCwxMSArNDM0LDExIEBACiAgKiBMb29rcyB1cCB0aGUgaW9jdGwgZnVuY3Rpb24gaW4gdGhlIDo6aW9jdGxzIHRhYmxlLCBjaGVja2luZyBmb3Igcm9vdAogICogcHJldmlsZWdlcyBpZiBzbyByZXF1aXJlZCwgYW5kIGRpc3BhdGNoZXMgdG8gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb24uCiAgKi8KLWludCBkcm1faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCitsb25nIGRybV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmlsZV9wcml2LT5taW5vci0+ZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IGRybV9pb2N0bF9kZXNjICppb2N0bDsKIAlkcm1faW9jdGxfdCAqZnVuYzsKIAl1bnNpZ25lZCBpbnQgbnIgPSBEUk1fSU9DVExfTlIoY21kKTsKQEAgLTQ0Niw2ICs0NDYsNyBAQAogCWNoYXIgc3RhY2tfa2RhdGFbMTI4XTsKIAljaGFyICprZGF0YSA9IE5VTEw7CiAKKwlkZXYgPSBmaWxlX3ByaXYtPm1pbm9yLT5kZXY7CiAJYXRvbWljX2luYygmZGV2LT5pb2N0bF9jb3VudCk7CiAJYXRvbWljX2luYygmZGV2LT5jb3VudHNbX0RSTV9TVEFUX0lPQ1RMU10pOwogCSsrZmlsZV9wcml2LT5pb2N0bF9jb3VudDsKQEAgLTUwMSw3ICs1MDIsMTMgQEAKIAkJCQlnb3RvIGVycl9pMTsKIAkJCX0KIAkJfQotCQlyZXRjb2RlID0gZnVuYyhkZXYsIGtkYXRhLCBmaWxlX3ByaXYpOworCQlpZiAoaW9jdGwtPmZsYWdzICYgRFJNX1VOTE9DS0VEKQorCQkJcmV0Y29kZSA9IGZ1bmMoZGV2LCBrZGF0YSwgZmlsZV9wcml2KTsKKwkJZWxzZSB7CisJCQlsb2NrX2tlcm5lbCgpOworCQkJcmV0Y29kZSA9IGZ1bmMoZGV2LCBrZGF0YSwgZmlsZV9wcml2KTsKKwkJCXVubG9ja19rZXJuZWwoKTsKKwkJfQogCiAJCWlmIChjbWQgJiBJT0NfT1VUKSB7CiAJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywga2RhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCmluZGV4IGMzOWIyNmYuLmRlZmNhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCkBAIC05MTEsMjMgKzkxMSwyNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKIAlzdHJ1Y3QgY3Z0X3RpbWluZyAqY3Z0OwogCWNvbnN0IGludCByYXRlc1tdID0geyA2MCwgODUsIDc1LCA2MCwgNTAgfTsKKwljb25zdCB1OCBlbXB0eVszXSA9IHsgMCwgMCwgMCB9OwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpbnQgd2lkdGgsIGhlaWdodDsKKwkJaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHdpZHRoKSwgaGVpZ2h0OwogCQljdnQgPSAmKHRpbWluZy0+ZGF0YS5vdGhlcl9kYXRhLmRhdGEuY3Z0W2ldKTsKIAotCQloZWlnaHQgPSAoY3Z0LT5jb2RlWzBdICsgKChjdnQtPmNvZGVbMV0gJiAweGYwKSA8PCA4KSArIDEpICogMjsKLQkJc3dpdGNoIChjdnQtPmNvZGVbMV0gJiAweGMwKSB7CisJCWlmICghbWVtY21wKGN2dC0+Y29kZSwgZW1wdHksIDMpKQorCQkJY29udGludWU7CisKKwkJaGVpZ2h0ID0gKGN2dC0+Y29kZVswXSArICgoY3Z0LT5jb2RlWzFdICYgMHhmMCkgPDwgNCkgKyAxKSAqIDI7CisJCXN3aXRjaCAoY3Z0LT5jb2RlWzFdICYgMHgwYykgewogCQljYXNlIDB4MDA6CiAJCQl3aWR0aCA9IGhlaWdodCAqIDQgLyAzOwogCQkJYnJlYWs7Ci0JCWNhc2UgMHg0MDoKKwkJY2FzZSAweDA0OgogCQkJd2lkdGggPSBoZWlnaHQgKiAxNiAvIDk7CiAJCQlicmVhazsKLQkJY2FzZSAweDgwOgorCQljYXNlIDB4MDg6CiAJCQl3aWR0aCA9IGhlaWdodCAqIDE2IC8gMTA7CiAJCQlicmVhazsKLQkJY2FzZSAweGMwOgorCQljYXNlIDB4MGM6CiAJCQl3aWR0aCA9IGhlaWdodCAqIDE1IC8gOTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCAxYjQ5ZmEwLi4xMDBlZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT047CiAJCQlicmVhazsKIAkJY2FzZSAnRCc6Ci0JCQlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHx8CisJCQlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpICYmCiAJCQkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSkKIAkJCQlmb3JjZSA9IERSTV9GT1JDRV9PTjsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwppbmRleCAyODJkOWZkLi5kNjFkMTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJCSAgJnZlcnNpb24tPmRlc2MpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCWVyciA9IGRybV9pb2N0bChmaWxlLAogCQkJRFJNX0lPQ1RMX1ZFUlNJT04sICh1bnNpZ25lZCBsb25nKXZlcnNpb24pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0xNDUsOCArMTQ1LDcgQEAKIAkJCSAgJnUtPnVuaXF1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9HRVRfVU5JUVVFLCAodW5zaWduZWQgbG9uZyl1KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xNzQsOCArMTczLDcgQEAKIAkJCSAgJnUtPnVuaXF1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9TRVRfVU5JUVVFLCAodW5zaWduZWQgbG9uZyl1KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9TRVRfVU5JUVVFLCAodW5zaWduZWQgbG9uZyl1KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21hcDMyIHsKQEAgLTIwNSw4ICsyMDMsNyBAQAogCWlmIChfX3B1dF91c2VyKGlkeCwgJm1hcC0+b2Zmc2V0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9HRVRfTUFQLCAodW5zaWduZWQgbG9uZyltYXApOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfR0VUX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yNDYsOCArMjQzLDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihtMzIuZmxhZ3MsICZtYXAtPmZsYWdzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BRERfTUFQLCAodW5zaWduZWQgbG9uZyltYXApOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfQUREX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yODQsOCArMjgwLDcgQEAKIAlpZiAoX19wdXRfdXNlcigodm9pZCAqKSh1bnNpZ25lZCBsb25nKWhhbmRsZSwgJm1hcC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JNX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9STV9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9jbGllbnQzMiB7CkBAIC0zMTQsOCArMzA5LDcgQEAKIAlpZiAoX19wdXRfdXNlcihpZHgsICZjbGllbnQtPmlkeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX0NMSUVOVCwgKHVuc2lnbmVkIGxvbmcpY2xpZW50KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0dFVF9DTElFTlQsICh1bnNpZ25lZCBsb25nKWNsaWVudCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzUxLDggKzM0NSw3IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBzdGF0cywgc2l6ZW9mKCpzdGF0cykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9TVEFUUywgKHVuc2lnbmVkIGxvbmcpc3RhdHMpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfR0VUX1NUQVRTLCAodW5zaWduZWQgbG9uZylzdGF0cyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzk1LDggKzM4OCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoYWdwX3N0YXJ0LCAmYnVmLT5hZ3Bfc3RhcnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0FERF9CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfQUREX0JVRlMsICh1bnNpZ25lZCBsb25nKWJ1Zik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNDI3LDggKzQxOSw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoYjMyLmhpZ2hfbWFyaywgJmJ1Zi0+aGlnaF9tYXJrKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX01BUktfQlVGUywgKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9NQVJLX0JVRlMsICh1bnNpZ25lZCBsb25nKWJ1Zik7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9idWZfaW5mbzMyIHsKQEAgLTQ2OSw4ICs0NjAsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGxpc3QsICZyZXF1ZXN0LT5saXN0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9JTkZPX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfSU5GT19CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01MzEsOCArNTIxLDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihsaXN0LCAmcmVxdWVzdC0+bGlzdCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfTUFQX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfTUFQX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTU3OCw4ICs1NjcsNyBAQAogCQkJICAmcmVxdWVzdC0+bGlzdCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9GUkVFX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0ZSRUVfQlVGUywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9jdHhfcHJpdl9tYXAzMiB7CkBAIC02MDUsOCArNTkzLDcgQEAKIAkJCSAgJnJlcXVlc3QtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9TRVRfU0FSRUFfQ1RYLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9TRVRfU0FSRUFfQ1RYLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogc3RhdGljIGludCBjb21wYXRfZHJtX2dldHNhcmVhY3R4KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtNjI4LDggKzYxNSw3IEBACiAJaWYgKF9fcHV0X3VzZXIoY3R4X2lkLCAmcmVxdWVzdC0+Y3R4X2lkKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0dFVF9TQVJFQV9DVFgsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTY2NCw4ICs2NTAsNyBAQAogCQkJICAmcmVzLT5jb250ZXh0cykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfUkVTX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVzKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JFU19DVFgsICh1bnNpZ25lZCBsb25nKXJlcyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNzE4LDggKzcwMyw3IEBACiAJCQkgICZkLT5yZXF1ZXN0X3NpemVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9ETUEsICh1bnNpZ25lZCBsb25nKWQpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfRE1BLCAodW5zaWduZWQgbG9uZylkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC03NTEsOCArNzM1LDcgQEAKIAlpZiAocHV0X3VzZXIobTMyLm1vZGUsICZtb2RlLT5tb2RlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0FHUF9FTkFCTEUsICh1bnNpZ25lZCBsb25nKW1vZGUpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FHUF9FTkFCTEUsICh1bnNpZ25lZCBsb25nKW1vZGUpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2luZm8zMiB7CkBAIC03ODEsOCArNzY0LDcgQEAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGluZm8sIHNpemVvZigqaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0FHUF9JTkZPLCAodW5zaWduZWQgbG9uZylpbmZvKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FHUF9JTkZPLCAodW5zaWduZWQgbG9uZylpbmZvKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC04MjcsMTYgKzgwOSwxNCBAQAogCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLnR5cGUsICZyZXF1ZXN0LT50eXBlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BR1BfQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfQUdQX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJaWYgKF9fZ2V0X3VzZXIocmVxMzIuaGFuZGxlLCAmcmVxdWVzdC0+aGFuZGxlKQogCSAgICB8fCBfX2dldF91c2VyKHJlcTMyLnBoeXNpY2FsLCAmcmVxdWVzdC0+cGh5c2ljYWwpCiAJICAgIHx8IGNvcHlfdG9fdXNlcihhcmdwLCAmcmVxMzIsIHNpemVvZihyZXEzMikpKSB7Ci0JCWRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJICBEUk1fSU9DVExfQUdQX0ZSRUUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCQlkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC04NTYsOCArODM2LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihoYW5kbGUsICZyZXF1ZXN0LT5oYW5kbGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfQUdQX0ZSRUUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9iaW5kaW5nMzIgewpAQCAtODgxLDggKzg2MCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIocmVxMzIub2Zmc2V0LCAmcmVxdWVzdC0+b2Zmc2V0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0FHUF9CSU5ELCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfQklORCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGF0X2RybV9hZ3BfdW5iaW5kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtODk4LDggKzg3Niw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoaGFuZGxlLCAmcmVxdWVzdC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0FHUF9VTkJJTkQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FHUF9VTkJJTkQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogI2VuZGlmCQkJCS8qIF9fT1NfSEFTX0FHUCAqLwogCkBAIC05MjMsOCArOTAwLDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcih4LCAmcmVxdWVzdC0+c2l6ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfU0dfQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0dfQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTk1MCw4ICs5MjYsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKHggPDwgUEFHRV9TSElGVCwgJnJlcXVlc3QtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9TR19GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9TR19GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1g4NikgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKQEAgLTk4MSw4ICs5NTYsNyBAQAogCSAgICBfX3B1dF91c2VyKHVwZGF0ZTMyLmRhdGEsICZyZXF1ZXN0LT5kYXRhKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9VUERBVEVfRFJBVywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9VUERBVEVfRFJBVywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJcmV0dXJuIGVycjsKIH0KICNlbmRpZgpAQCAtMTAyMyw4ICs5OTcsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLnJlcXVlc3Quc2lnbmFsLCAmcmVxdWVzdC0+cmVxdWVzdC5zaWduYWwpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1dBSVRfVkJMQU5LLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1dBSVRfVkJMQU5LLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xMDk0LDE2ICsxMDY3LDE0IEBACiAJICogdGhhbiBhbHdheXMgZmFpbGluZy4KIAkgKi8KIAlpZiAobnIgPj0gQVJSQVlfU0laRShkcm1fY29tcGF0X2lvY3RscykpCi0JCXJldHVybiBkcm1faW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKwkJcmV0dXJuIGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlmbiA9IGRybV9jb21wYXRfaW9jdGxzW25yXTsKIAotCWxvY2tfa2VybmVsKCk7CQkvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKSAoZmlscCwgY21kLCBhcmcpOwogCWVsc2UKLQkJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCmluZGV4IGQ3ZDdlYWMuLmNkZWMzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCQlpZiAoZW50cnktPnNpemUgPj0gc2l6ZSArIHdhc3RlZCkgewogCQkJaWYgKCFiZXN0X21hdGNoKQogCQkJCXJldHVybiBlbnRyeTsKLQkJCWlmIChzaXplIDwgYmVzdF9zaXplKSB7CisJCQlpZiAoZW50cnktPnNpemUgPCBiZXN0X3NpemUpIHsKIAkJCQliZXN0ID0gZW50cnk7CiAJCQkJYmVzdF9zaXplID0gZW50cnktPnNpemU7CiAJCQl9CkBAIC00MDgsNyArNDA4LDcgQEAKIAkJaWYgKGVudHJ5LT5zaXplID49IHNpemUgKyB3YXN0ZWQpIHsKIAkJCWlmICghYmVzdF9tYXRjaCkKIAkJCQlyZXR1cm4gZW50cnk7Ci0JCQlpZiAoc2l6ZSA8IGJlc3Rfc2l6ZSkgeworCQkJaWYgKGVudHJ5LT5zaXplIDwgYmVzdF9zaXplKSB7CiAJCQkJYmVzdCA9IGVudHJ5OwogCQkJCWJlc3Rfc2l6ZSA9IGVudHJ5LT5zaXplOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wY2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGNpLmMKaW5kZXggNTc3MDk0Zi4uZTY4ZWJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wY2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BjaS5jCkBAIC00Nyw4ICs0Nyw3IEBACiAvKioKICAqIFxicmllZiBBbGxvY2F0ZSBhIFBDSSBjb25zaXN0ZW50IG1lbW9yeSBibG9jaywgZm9yIERNQS4KICAqLwotZHJtX2RtYV9oYW5kbGVfdCAqZHJtX3BjaV9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwKLQkJCQlkbWFfYWRkcl90IG1heGFkZHIpCitkcm1fZG1hX2hhbmRsZV90ICpkcm1fcGNpX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQogewogCWRybV9kbWFfaGFuZGxlX3QgKmRtYWg7CiAjaWYgMQpAQCAtNjMsMTEgKzYyLDYgQEAKIAlpZiAoYWxpZ24gPiBzaXplKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGRldi0+cGRldiwgbWF4YWRkcikgIT0gMCkgewotCQlEUk1fRVJST1IoIlNldHRpbmcgcGNpIGRtYSBtYXNrIGZhaWxlZFxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQogCWRtYWggPSBrbWFsbG9jKHNpemVvZihkcm1fZG1hX2hhbmRsZV90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbWFoKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKaW5kZXggOTQyMmE3NC4uODE2ODFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKQEAgLTQwOCw2ICs0MDgsMTEgQEAKIAogCWNoNzAwNl9pbmZvKGNsaWVudCwgIkRldGVjdGVkIHZlcnNpb24gSUQ6ICV4XG4iLCB2YWwpOwogCisJLyogSSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBmb3IsIGJ1dCBvdGhlcndpc2UgSSBnZXQgbm8KKwkgKiBzaWduYWwuCisJICovCisJY2g3MDA2X3dyaXRlKGNsaWVudCwgMHgzZCwgMHgwKTsKKwogCXJldHVybiAwOwogCiBmYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfbW9kZS5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfbW9kZS5jCmluZGV4IDg3ZjU0NDUuLmU0NDdkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X21vZGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL2NoNzAwNl9tb2RlLmMKQEAgLTQyNywxMSArNDI3LDYgQEAKIAljaDcwMDZfbG9hZF9yZWcoY2xpZW50LCBzdGF0ZSwgQ0g3MDA2X1NVQkNfSU5DNyk7CiAJY2g3MDA2X2xvYWRfcmVnKGNsaWVudCwgc3RhdGUsIENINzAwNl9QTExfQ09OVFJPTCk7CiAJY2g3MDA2X2xvYWRfcmVnKGNsaWVudCwgc3RhdGUsIENINzAwNl9DQUxDX1NVQkNfSU5DMCk7Ci0KLQkvKiBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzIGZvciwgYnV0IG90aGVyd2lzZSBJIGdldCBubwotCSAqIHNpZ25hbC4KLQkgKi8KLQljaDcwMDZfd3JpdGUoY2xpZW50LCAweDNkLCAweDApOwogfQogCiB2b2lkIGNoNzAwNl9zdGF0ZV9zYXZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kbWEuYwppbmRleCA3ZDFkODhjLi5kZTMyZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZG1hLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgxMF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbiA9IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsID0gZHJtX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkubW1hcCA9IGk4MTBfbW1hcF9idWZmZXJzLAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5jCmluZGV4IGZhYmI5YTguLmMxZTAyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuYwpAQCAtNTksNyArNTksNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kbWEuYwppbmRleCA4NzdiZjZjLi4wNmJkNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZG1hLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgzMF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbiA9IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsID0gZHJtX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkubW1hcCA9IGk4MzBfbW1hcF9idWZmZXJzLAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5jCmluZGV4IDM4OTU5N2UuLjQ0Zjk5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuYwpAQCAtNzAsNyArNzAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IDE4NDc2YmYuLjljOTk5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAkJbWVtID0ga21hcF9hdG9taWMocGFnZXNbcGFnZV0sIEtNX1VTRVIwKTsKIAkJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRTsgaSArPSA0KQogCQkJc2VxX3ByaW50ZihtLCAiJTA4eCA6ICAlMDh4XG4iLCBpLCBtZW1baSAvIDRdKTsKLQkJa3VubWFwX2F0b21pYyhwYWdlc1twYWdlXSwgS01fVVNFUjApOworCQlrdW5tYXBfYXRvbWljKG1lbSwgS01fVVNFUjApOwogCX0KIH0KIApAQCAtMzg2LDM0ICszODYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGk5MTVfcmVnaXN0ZXJzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKSB7Ci0Jc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCByZWc7Ci0KLSNkZWZpbmUgRFVNUF9SQU5HRShzdGFydCwgZW5kKSBcCi0JZm9yIChyZWc9c3RhcnQ7IHJlZyA8IGVuZDsgcmVnICs9IDQpIFwKLQlzZXFfcHJpbnRmKG0sICIlMDh4XHQlMDh4XG4iLCByZWcsIEk5MTVfUkVBRChyZWcpKTsKLQotCURVTVBfUkFOR0UoMHgwMDAwMCwgMHgwMGZmZik7ICAgLyogVkdBIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgwMjAwMCwgMHgwMmZmZik7ICAgLyogaW5zdHJ1Y3Rpb24sIG1lbW9yeSwgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXJzICovCi0JRFVNUF9SQU5HRSgweDAzMDAwLCAweDAzMWZmKTsgICAvKiBGRU5DRSBhbmQgUFBHVFQgY29udHJvbCByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4MDMyMDAsIDB4MDNmZmYpOyAgIC8qIGZyYW1lIGJ1ZmZlciBjb21wcmVzc2lvbiByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4MDUwMDAsIDB4MDVmZmYpOyAgIC8qIEkvTyBjb250cm9sIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgwNjAwMCwgMHgwNmZmZik7ICAgLyogY2xvY2sgY29udHJvbCByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4MDcwMDAsIDB4MDdmZmYpOyAgIC8qIDNEIGludGVybmFsIGRlYnVnIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgwNzQwMCwgMHgwODhmZik7ICAgLyogR1BFIGRlYnVnIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgwYTAwMCwgMHgwYWZmZik7ICAgLyogZGlzcGxheSBwYWxldHRlIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgxMDAwMCwgMHgxM2ZmZik7ICAgLyogTU1JTyBNQ0hCQVIgKi8KLQlEVU1QX1JBTkdFKDB4MzAwMDAsIDB4M2ZmZmYpOyAgIC8qIG92ZXJsYXkgcmVnaXN0ZXJzICovCi0JRFVNUF9SQU5HRSgweDYwMDAwLCAweDZmZmZmKTsgICAvKiBkaXNwbGF5IGVuZ2luZSBwaXBlbGluZSByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4NzAwMDAsIDB4NzJmZmYpOyAgIC8qIGRpc3BsYXkgYW5kIGN1cnNvciByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4NzMwMDAsIDB4NzNmZmYpOyAgIC8qIHBlcmZvcm1hbmNlIGNvdW50ZXJzICovCi0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogaTkxNV93ZWRnZWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgc3RydWN0IGZpbGUgKmZpbHApCkBAIC01MTksNyArNDkxLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGk5MTVfZGVidWdmc19saXN0W10gPSB7Ci0JeyJpOTE1X3JlZ3MiLCBpOTE1X3JlZ2lzdGVyc19pbmZvLCAwfSwKIAl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIEFDVElWRV9MSVNUfSwKIAl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgRkxVU0hJTkdfTElTVH0sCiAJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIElOQUNUSVZFX0xJU1R9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggNzAxYmZlYS4uYmJlNDc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCiAJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPQotCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUsIDB4ZmZmZmZmZmYpOworCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwogCiAJaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgewogCQlEUk1fRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOwpAQCAtODEzLDkgKzgxMywxMyBAQAogCWNhc2UgSTkxNV9QQVJBTV9IQVNfUEFHRUZMSVBQSU5HOgogCQl2YWx1ZSA9IDE7CiAJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9IQVNfRVhFQ0JVRjI6CisJCS8qIGRlcGVuZHMgb24gR0VNICovCisJCXZhbHVlID0gZGV2X3ByaXYtPmhhc19nZW07CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9ERUJVR19EUklWRVIoIlVua25vd24gcGFyYW1ldGVyICVkXG4iLAotCQkJCQlwYXJhbS0+cGFyYW0pOworCQkJCSBwYXJhbS0+cGFyYW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExMTcsNyArMTEyMSw4IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgKmNvbXByZXNzZWRfZmIsICpjb21wcmVzc2VkX2xsYjsKLQl1bnNpZ25lZCBsb25nIGNmYl9iYXNlLCBsbF9iYXNlOworCXVuc2lnbmVkIGxvbmcgY2ZiX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBsbF9iYXNlID0gMDsKIAogCS8qIExlYXZlIDFNIGZvciBsaW5lIGxlbmd0aCBidWZmZXIgJiBtaXNjLiAqLwogCWNvbXByZXNzZWRfZmIgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJmRldl9wcml2LT52cmFtLCBzaXplLCA0MDk2LCAwKTsKQEAgLTEyMDAsMTQgKzEyMDUsNiBAQAogCWRldi0+bW9kZV9jb25maWcuZmJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZGV2LCBmYl9iYXIpICYKIAkJMHhmZjAwMDAwMDsKIAotCWlmIChJU19NT0JJTEUoZGV2KSB8fCBJU19JOVhYKGRldikpCi0JCWRldl9wcml2LT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSB0cnVlOwotCWVsc2UKLQkJZGV2X3ByaXYtPmN1cnNvcl9uZWVkc19waHlzaWNhbCA9IGZhbHNlOwotCi0JaWYgKElTX0k5NjVHKGRldikgfHwgSVNfRzMzKGRldikpCi0JCWRldl9wcml2LT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSBmYWxzZTsKLQogCS8qIEJhc2ljIG1lbXJhbmdlIGFsbG9jYXRvciBmb3Igc3RvbGVuIHNwYWNlIChha2EgdnJhbSkgKi8KIAlkcm1fbW1faW5pdCgmZGV2X3ByaXYtPnZyYW0sIDAsIHByZWFsbG9jX3NpemUpOwogCURSTV9JTkZPKCJzZXQgdXAgJWxkTSBvZiBzdG9sZW4gc3BhY2VcbiIsIHByZWFsbG9jX3NpemUgLyAoMTAyNCoxMDI0KSk7CkBAIC0xMjU3LDYgKzEyNTQsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZGVzdHJveV9yaW5nYnVmZmVyOwogCisJaW50ZWxfbW9kZXNldF9pbml0KGRldik7CisKIAlyZXQgPSBkcm1faXJxX2luc3RhbGwoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKQEAgLTEyNzEsOCArMTI3MCw2IEBACiAKIAlJOTE1X1dSSVRFKElOU1RQTSwgKDEgPDwgNSkgfCAoMSA8PCAyMSkpOwogCi0JaW50ZWxfbW9kZXNldF9pbml0KGRldik7Ci0KIAlkcm1faGVscGVyX2luaXRpYWxfY29uZmlnKGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTEzNjAsNyArMTM1Nyw3IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlyZXNvdXJjZV9zaXplX3QgYmFzZSwgc2l6ZTsKLQlpbnQgcmV0ID0gMCwgbW1pb19iYXIgPSBJU19JOVhYKGRldikgPyAwIDogMTsKKwlpbnQgcmV0ID0gMCwgbW1pb19iYXI7CiAJdWludDMyX3QgYWdwX3NpemUsIHByZWFsbG9jX3NpemUsIHByZWFsbG9jX3N0YXJ0OwogCiAJLyogaTkxNSBoYXMgNCBtb3JlIGNvdW50ZXJzICovCkBAIC0xMzc2LDggKzEzNzMsMTAgQEAKIAogCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCWRldl9wcml2LT5kZXYgPSBkZXY7CisJZGV2X3ByaXYtPmluZm8gPSAoc3RydWN0IGludGVsX2RldmljZV9pbmZvICopIGZsYWdzOwogCiAJLyogQWRkIHJlZ2lzdGVyIG1hcCAobmVlZGVkIGZvciBzdXNwZW5kL3Jlc3VtZSkgKi8KKwltbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOwogCWJhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgbW1pb19iYXIpOwogCXNpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIG1taW9fYmFyKTsKIApAQCAtMTY1Miw2ICsxNjUxLDcgQEAKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0hXU19BRERSLCBpOTE1X3NldF9zdGF0dXNfcGFnZSwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9JTklULCBpOTE1X2dlbV9pbml0X2lvY3RsLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIsIGk5MTVfZ2VtX2V4ZWNidWZmZXIsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSMiwgaTkxNV9nZW1fZXhlY2J1ZmZlcjIsIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9QSU4sIGk5MTVfZ2VtX3Bpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fVU5QSU4sIGk5MTVfZ2VtX3VucGluX2lvY3RsLCBEUk1fQVVUSHxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9CVVNZLCBpOTE1X2dlbV9idXN5X2lvY3RsLCBEUk1fQVVUSCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAyZmEyMTc4Li4yZmZmZmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAKLSNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgogCkBAIC00OCw4ICs0NywxMjQgQEAKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewotCWk5MTVfUENJX0lEUworI2RlZmluZSBJTlRFTF9WR0FfREVWSUNFKGlkLCBpbmZvKSB7CQlcCisJLmNsYXNzID0gUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsCVwKKwkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwLAkJCVwKKwkudmVuZG9yID0gMHg4MDg2LAkJCVwKKwkuZGV2aWNlID0gaWQsCQkJCVwKKwkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwJCVwKKwkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwJCVwKKwkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgaW5mbyB9CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTgzMF9pbmZvID0geworCS5pc19pOHh4ID0gMSwgLmlzX21vYmlsZSA9IDEsIC5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF84NDVnX2luZm8gPSB7CisJLmlzX2k4eHggPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pODV4X2luZm8gPSB7CisJLmlzX2k4eHggPSAxLCAuaXNfbW9iaWxlID0gMSwgLmN1cnNvcl9uZWVkc19waHlzaWNhbCA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2k4NjVnX2luZm8gPSB7CisJLmlzX2k4eHggPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pOTE1Z19pbmZvID0geworCS5pc19pOTE1ZyA9IDEsIC5pc19pOXh4ID0gMSwgLmN1cnNvcl9uZWVkc19waHlzaWNhbCA9IDEsCit9OworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pOTE1Z21faW5mbyA9IHsKKwkuaXNfaTl4eCA9IDEsICAuaXNfbW9iaWxlID0gMSwgLmhhc19mYmMgPSAxLAorCS5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSAxLAorfTsKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTk0NWdfaW5mbyA9IHsKKwkuaXNfaTl4eCA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsIC5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSAxLAorfTsKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTk0NWdtX2luZm8gPSB7CisJLmlzX2k5NDVnbSA9IDEsIC5pc19pOXh4ID0gMSwgLmlzX21vYmlsZSA9IDEsIC5oYXNfZmJjID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLCAuY3Vyc29yX25lZWRzX3BoeXNpY2FsID0gMSwKK307CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTk2NWdfaW5mbyA9IHsKKwkuaXNfaTk2NWcgPSAxLCAuaXNfaTl4eCA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2k5NjVnbV9pbmZvID0geworCS5pc19pOTY1ZyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfaTk2NWdtID0gMSwgLmlzX2k5eHggPSAxLAorCS5pc19tb2JpbGUgPSAxLCAuaGFzX2ZiYyA9IDEsIC5oYXNfcmM2ID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9nMzNfaW5mbyA9IHsKKwkuaXNfZzMzID0gMSwgLmlzX2k5eHggPSAxLCAubmVlZF9nZnhfaHdzID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9nNDVfaW5mbyA9IHsKKwkuaXNfaTk2NWcgPSAxLCAuaXNfZzR4ID0gMSwgLmlzX2k5eHggPSAxLCAubmVlZF9nZnhfaHdzID0gMSwKKwkuaGFzX3BpcGVfY3hzciA9IDEsCisJLmhhc19ob3RwbHVnID0gMSwKK307CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfZ200NV9pbmZvID0geworCS5pc19pOTY1ZyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfZzR4ID0gMSwgLmlzX2k5eHggPSAxLAorCS5pc19tb2JpbGUgPSAxLCAubmVlZF9nZnhfaHdzID0gMSwgLmhhc19mYmMgPSAxLCAuaGFzX3JjNiA9IDEsCisJLmhhc19waXBlX2N4c3IgPSAxLAorCS5oYXNfaG90cGx1ZyA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX3BpbmV2aWV3X2luZm8gPSB7CisJLmlzX2czMyA9IDEsIC5pc19waW5ldmlldyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfaTl4eCA9IDEsCisJLmhhc19waXBlX2N4c3IgPSAxLAorCS5oYXNfaG90cGx1ZyA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2lyb25sYWtlX2RfaW5mbyA9IHsKKwkuaXNfaXJvbmxha2UgPSAxLCAuaXNfaTk2NWcgPSAxLCAuaXNfaTl4eCA9IDEsIC5uZWVkX2dmeF9od3MgPSAxLAorCS5oYXNfcGlwZV9jeHNyID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pcm9ubGFrZV9tX2luZm8gPSB7CisJLmlzX2lyb25sYWtlID0gMSwgLmlzX21vYmlsZSA9IDEsIC5pc19pOTY1ZyA9IDEsIC5pc19pOXh4ID0gMSwKKwkubmVlZF9nZnhfaHdzID0gMSwgLmhhc19yYzYgPSAxLAorCS5oYXNfaG90cGx1ZyA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CisJSU5URUxfVkdBX0RFVklDRSgweDM1NzcsICZpbnRlbF9pODMwX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTYyLCAmaW50ZWxfODQ1Z19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MzU4MiwgJmludGVsX2k4NXhfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDM1ZTgsICZpbnRlbF9pODV4X2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTcyLCAmaW50ZWxfaTg2NWdfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI1ODIsICZpbnRlbF9pOTE1Z19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MjU4YSwgJmludGVsX2k5MTVnX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTkyLCAmaW50ZWxfaTkxNWdtX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNzcyLCAmaW50ZWxfaTk0NWdfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI3YTIsICZpbnRlbF9pOTQ1Z21faW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI3YWUsICZpbnRlbF9pOTQ1Z21faW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI5NzIsICZpbnRlbF9pOTY1Z19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4Mjk4MiwgJmludGVsX2k5NjVnX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyOTkyLCAmaW50ZWxfaTk2NWdfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI5YTIsICZpbnRlbF9pOTY1Z19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MjliMiwgJmludGVsX2czM19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MjljMiwgJmludGVsX2czM19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MjlkMiwgJmludGVsX2czM19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MmEwMiwgJmludGVsX2k5NjVnbV9pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MmExMiwgJmludGVsX2k5NjVnbV9pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MmE0MiwgJmludGVsX2dtNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlMDIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlMTIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlMjIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlMzIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlNDIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweGEwMDEsICZpbnRlbF9waW5ldmlld19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4YTAxMSwgJmludGVsX3BpbmV2aWV3X2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgwMDQyLCAmaW50ZWxfaXJvbmxha2VfZF9pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MDA0NiwgJmludGVsX2lyb25sYWtlX21faW5mbyksCisJezAsIDAsIDB9CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfRFJNX0k5MTVfS01TKQpAQCAtMjg0LDYgKzM5OSw1MiBAQAogCXJldHVybiBpOTE1X3Jlc3VtZShkZXYpOwogfQogCitzdGF0aWMgaW50CitpOTE1X3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBpOTE1X3BjaV9zdXNwZW5kKHRvX3BjaV9kZXYoZGV2KSwgUE1TR19TVVNQRU5EKTsKK30KKworc3RhdGljIGludAoraTkxNV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBpOTE1X3BjaV9yZXN1bWUodG9fcGNpX2RldihkZXYpKTsKK30KKworc3RhdGljIGludAoraTkxNV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBpOTE1X3BjaV9zdXNwZW5kKHRvX3BjaV9kZXYoZGV2KSwgUE1TR19GUkVFWkUpOworfQorCitzdGF0aWMgaW50CitpOTE1X3BtX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIHRoYXcgZHVyaW5nIGhpYmVybmF0ZSwgZG8gbm90aGluZyEgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9wbV9wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGk5MTVfcGNpX3N1c3BlbmQodG9fcGNpX2RldihkZXYpLCBQTVNHX0hJQkVSTkFURSk7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGk5MTVfcGNpX3Jlc3VtZSh0b19wY2lfZGV2KGRldikpOworfQorCitjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpOTE1X3BtX29wcyA9IHsKKyAgICAgLnN1c3BlbmQgPSBpOTE1X3BtX3N1c3BlbmQsCisgICAgIC5yZXN1bWUgPSBpOTE1X3BtX3Jlc3VtZSwKKyAgICAgLmZyZWV6ZSA9IGk5MTVfcG1fZnJlZXplLAorICAgICAudGhhdyA9IGk5MTVfcG1fdGhhdywKKyAgICAgLnBvd2Vyb2ZmID0gaTkxNV9wbV9wb3dlcm9mZiwKKyAgICAgLnJlc3RvcmUgPSBpOTE1X3BtX3Jlc3RvcmUsCit9OworCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGk5MTVfZ2VtX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpOTE1X2dlbV9mYXVsdCwKIAkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKQEAgLTMwMyw4ICs0NjQsNiBAQAogCS5sYXN0Y2xvc2UgPSBpOTE1X2RyaXZlcl9sYXN0Y2xvc2UsCiAJLnByZWNsb3NlID0gaTkxNV9kcml2ZXJfcHJlY2xvc2UsCiAJLnBvc3RjbG9zZSA9IGk5MTVfZHJpdmVyX3Bvc3RjbG9zZSwKLQkuc3VzcGVuZCA9IGk5MTVfc3VzcGVuZCwKLQkucmVzdW1lID0gaTkxNV9yZXN1bWUsCiAJLmRldmljZV9pc19hZ3AgPSBpOTE1X2RyaXZlcl9kZXZpY2VfaXNfYWdwLAogCS5lbmFibGVfdmJsYW5rID0gaTkxNV9lbmFibGVfdmJsYW5rLAogCS5kaXNhYmxlX3ZibGFuayA9IGk5MTVfZGlzYWJsZV92YmxhbmssCkBAIC0zMjksNyArNDg4LDcgQEAKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgLm9wZW4gPSBkcm1fb3BlbiwKIAkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCSAubW1hcCA9IGRybV9nZW1fbW1hcCwKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKQEAgLTM0NCwxMCArNTAzLDcgQEAKIAkJIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKIAkJIC5wcm9iZSA9IGk5MTVfcGNpX3Byb2JlLAogCQkgLnJlbW92ZSA9IGk5MTVfcGNpX3JlbW92ZSwKLSNpZmRlZiBDT05GSUdfUE0KLQkJIC5yZXN1bWUgPSBpOTE1X3BjaV9yZXN1bWUsCi0JCSAuc3VzcGVuZCA9IGk5MTVfcGNpX3N1c3BlbmQsCi0jZW5kaWYKKwkJIC5kcml2ZXIucG0gPSAmaTkxNV9wbV9vcHMsCiAJfSwKIAogCS5uYW1lID0gRFJJVkVSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBmYmVjYWM3Li4yOWRkNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE3Miw5ICsxNzIsMzEgQEAKIAogc3RydWN0IGludGVsX292ZXJsYXk7CiAKK3N0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyB7CisJdTggaXNfbW9iaWxlIDogMTsKKwl1OCBpc19pOHh4IDogMTsKKwl1OCBpc19pOTE1ZyA6IDE7CisJdTggaXNfaTl4eCA6IDE7CisJdTggaXNfaTk0NWdtIDogMTsKKwl1OCBpc19pOTY1ZyA6IDE7CisJdTggaXNfaTk2NWdtIDogMTsKKwl1OCBpc19nMzMgOiAxOworCXU4IG5lZWRfZ2Z4X2h3cyA6IDE7CisJdTggaXNfZzR4IDogMTsKKwl1OCBpc19waW5ldmlldyA6IDE7CisJdTggaXNfaXJvbmxha2UgOiAxOworCXU4IGhhc19mYmMgOiAxOworCXU4IGhhc19yYzYgOiAxOworCXU4IGhhc19waXBlX2N4c3IgOiAxOworCXU4IGhhc19ob3RwbHVnIDogMTsKKwl1OCBjdXJzb3JfbmVlZHNfcGh5c2ljYWwgOiAxOworfTsKKwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAorCWNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbzsKKwogCWludCBoYXNfZ2VtOwogCiAJdm9pZCBfX2lvbWVtICpyZWdzOwpAQCAtMjMyLDggKzI1NCw2IEBACiAJaW50IGhhbmdjaGVja19jb3VudDsKIAl1aW50MzJfdCBsYXN0X2FjdGhkOwogCi0JYm9vbCBjdXJzb3JfbmVlZHNfcGh5c2ljYWw7Ci0KIAlzdHJ1Y3QgZHJtX21tIHZyYW07CiAKIAl1bnNpZ25lZCBsb25nIGNmYl9zaXplOwpAQCAtMjg3LDggKzMwNyw2IEBACiAJdTMyIHNhdmVEU1BBQ05UUjsKIAl1MzIgc2F2ZURTUEJDTlRSOwogCXUzMiBzYXZlRFNQQVJCOwotCXUzMiBzYXZlUkVOREVSU1RBTkRCWTsKLQl1MzIgc2F2ZVBXUkNUWEE7CiAJdTMyIHNhdmVIV1M7CiAJdTMyIHNhdmVQSVBFQUNPTkY7CiAJdTMyIHNhdmVQSVBFQkNPTkY7CkBAIC01NjEsNiArNTc5LDcgQEAKIAl1MTYgb3JpZ19jbG9jazsKIAlpbnQgY2hpbGRfZGV2X251bTsKIAlzdHJ1Y3QgY2hpbGRfZGV2aWNlX2NvbmZpZyAqY2hpbGRfZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICppbnRfbHZkc19jb25uZWN0b3I7CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKIAogLyoqIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBlYWNoIGRybV9nZW1fb2JqZWN0ICovCkBAIC03OTQsNiArODEzLDggQEAKIAkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IGk5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9leGVjYnVmZmVyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGludCBpOTE1X2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGludCBpOTE1X2dlbV91bnBpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtODYwLDYgKzg4MSw5IEBACiB2b2lkIGk5MTVfZ2VtX2RldGVjdF9iaXRfNl9zd2l6emxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3X3N3aXp6bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogdm9pZCBpOTE1X2dlbV9vYmplY3Rfc2F2ZV9iaXRfMTdfc3dpenpsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Citib29sIGk5MTVfdGlsaW5nX29rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzdHJpZGUsIGludCBzaXplLAorCQkgICAgaW50IHRpbGluZ19tb2RlKTsKK2Jvb2wgaTkxNV9vYmpfZmVuY2VhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIAogLyogaTkxNV9nZW1fZGVidWcuYyAqLwogdm9pZCBpOTE1X2dlbV9kdW1wX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGxlbiwKQEAgLTk4Miw2NyArMTAwNiwzMyBAQAogZXh0ZXJuIGludCBpOTE1X3dyYXBfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gaW50IGk5MTVfd2FpdF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgbiwgY29uc3QgY2hhciAqY2FsbGVyKTsKIAotI2RlZmluZSBJU19JODMwKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MzU3NykKLSNkZWZpbmUgSVNfODQ1RyhkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1NjIpCi0jZGVmaW5lIElTX0k4NVgoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTgyKQotI2RlZmluZSBJU19JODY1RyhkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1NzIpCi0jZGVmaW5lIElTX0k4WFgoZGV2KSAoSVNfSTgzMChkZXYpIHx8IElTXzg0NUcoZGV2KSB8fCBJU19JODVYKGRldikgfHwgSVNfSTg2NUcoZGV2KSkKKyNkZWZpbmUgSU5URUxfSU5GTyhkZXYpCSgoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopIChkZXYpLT5kZXZfcHJpdmF0ZSktPmluZm8pCiAKLSNkZWZpbmUgSVNfSTkxNUcoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNTgyIHx8IChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU4YSkKLSNkZWZpbmUgSVNfSTkxNUdNKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU5MikKLSNkZWZpbmUgSVNfSTk0NUcoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNzcyKQotI2RlZmluZSBJU19JOTQ1R00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyN0EyIHx8XAotCQkgICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjdBRSkKLSNkZWZpbmUgSVNfSTk2NUcoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOTcyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4Mjk4MiB8fCBcCi0JCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5OTIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUEyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkEwMiB8fCBcCi0JCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBMTIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTQyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUwMiB8fCBcCi0JCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMTIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTIyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUzMiB8fCBcCi0JCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFNDIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgwMDQyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MDA0NikKLQotI2RlZmluZSBJU19JOTY1R00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTAyIHx8IFwKLQkJCShkZXYpLT5wY2lfZGV2aWNlID09IDB4MkExMikKLQotI2RlZmluZSBJU19HTTQ1KGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkE0MikKLQotI2RlZmluZSBJU19HNFgoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTAyIHx8IFwKLQkJICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMTIgfHwgXAotCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUyMiB8fCBcCi0JCSAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTMyIHx8IFwKLQkJICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFNDIgfHwgXAotCQkgICAgIElTX0dNNDUoZGV2KSkKLQotI2RlZmluZSBJU19QSU5FVklFV19HKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4YTAwMSkKLSNkZWZpbmUgSVNfUElORVZJRVdfTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweGEwMTEpCi0jZGVmaW5lIElTX1BJTkVWSUVXKGRldikgKElTX1BJTkVWSUVXX0coZGV2KSB8fCBJU19QSU5FVklFV19NKGRldikpCi0KLSNkZWZpbmUgSVNfRzMzKGRldikgICAgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjlDMiB8fAlcCi0JCQkoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5QjIgfHwJXAotCQkJKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUQyIHx8ICBcCi0JCQkoSVNfUElORVZJRVcoZGV2KSkpCi0KKyNkZWZpbmUgSVNfSTgzMChkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTc3KQorI2RlZmluZSBJU184NDVHKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1NjIpCisjZGVmaW5lIElTX0k4NVgoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MzU4MikKKyNkZWZpbmUgSVNfSTg2NUcoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU3MikKKyNkZWZpbmUgSVNfSThYWChkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pOHh4KQorI2RlZmluZSBJU19JOTE1RyhkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pOTE1ZykKKyNkZWZpbmUgSVNfSTkxNUdNKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1OTIpCisjZGVmaW5lIElTX0k5NDVHKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI3NzIpCisjZGVmaW5lIElTX0k5NDVHTShkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pOTQ1Z20pCisjZGVmaW5lIElTX0k5NjVHKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k5NjVnKQorI2RlZmluZSBJU19JOTY1R00oZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTk2NWdtKQorI2RlZmluZSBJU19HTTQ1KGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBNDIpCisjZGVmaW5lIElTX0c0WChkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19nNHgpCisjZGVmaW5lIElTX1BJTkVWSUVXX0coZGV2KQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHhhMDAxKQorI2RlZmluZSBJU19QSU5FVklFV19NKGRldikJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4YTAxMSkKKyNkZWZpbmUgSVNfUElORVZJRVcoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5pc19waW5ldmlldykKKyNkZWZpbmUgSVNfRzMzKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2czMykKICNkZWZpbmUgSVNfSVJPTkxBS0VfRChkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDAwNDIpCiAjZGVmaW5lIElTX0lST05MQUtFX00oZGV2KQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgwMDQ2KQotI2RlZmluZSBJU19JUk9OTEFLRShkZXYpCShJU19JUk9OTEFLRV9EKGRldikgfHwgSVNfSVJPTkxBS0VfTShkZXYpKQorI2RlZmluZSBJU19JUk9OTEFLRShkZXYpCShJTlRFTF9JTkZPKGRldiktPmlzX2lyb25sYWtlKQorI2RlZmluZSBJU19JOVhYKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k5eHgpCisjZGVmaW5lIElTX01PQklMRShkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19tb2JpbGUpCiAKLSNkZWZpbmUgSVNfSTlYWChkZXYpIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8IElTX0k5NDVHKGRldikgfHwgXAotCQkgICAgICBJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1RyhkZXYpIHx8IElTX0czMyhkZXYpIHx8IFwKLQkJICAgICAgSVNfSVJPTkxBS0UoZGV2KSkKKyNkZWZpbmUgSTkxNV9ORUVEX0dGWF9IV1MoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5uZWVkX2dmeF9od3MpCiAKLSNkZWZpbmUgSVNfTU9CSUxFKGRldikgKElTX0k4MzAoZGV2KSB8fCBJU19JODVYKGRldikgfHwgSVNfSTkxNUdNKGRldikgfHwgXAotCQkJSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUdNKGRldikgfHwgSVNfR000NShkZXYpIHx8IFwKLQkJCUlTX1BJTkVWSUVXKGRldikgfHwgSVNfSVJPTkxBS0VfTShkZXYpKQotCi0jZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikgKElTX0czMyhkZXYpIHx8IElTX0dNNDUoZGV2KSB8fCBJU19HNFgoZGV2KSB8fCBcCi0JCQkJSVNfSVJPTkxBS0UoZGV2KSkKIC8qIFdpdGggdGhlIDk0NSBhbmQgbGF0ZXIsIFkgdGlsaW5nIGdvdCBhZGp1c3RlZCBzbyB0aGF0IGl0IHdhcyAzMiAxMjgtYnl0ZQogICogcm93cywgd2hpY2ggY2hhbmdlZCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBhbmQgZmVuY2UgcHJvZ3JhbW1pbmcuCiAgKi8KQEAgLTEwNTQsMTcgKzEwNDQsMTQgQEAKICNkZWZpbmUgU1VQUE9SVFNfRURQKGRldikJCShJU19JUk9OTEFLRV9NKGRldikpCiAjZGVmaW5lIFNVUFBPUlRTX1RWKGRldikJCShJU19JOVhYKGRldikgJiYgSVNfTU9CSUxFKGRldikgJiYgXAogCQkJCQkhSVNfSVJPTkxBS0UoZGV2KSAmJiAhSVNfUElORVZJRVcoZGV2KSkKLSNkZWZpbmUgSTkxNV9IQVNfSE9UUExVRyhkZXYpIChJU19JOTQ1RyhkZXYpIHx8IElTX0k5NDVHTShkZXYpIHx8IElTX0czMyhkZXYpIHx8IElTX0k5NjVHKGRldikpCisjZGVmaW5lIEk5MTVfSEFTX0hPVFBMVUcoZGV2KQkJIChJTlRFTF9JTkZPKGRldiktPmhhc19ob3RwbHVnKQogLyogZHNwYXJiIGNvbnRyb2xsZWQgYnkgaHcgb25seSAqLwogI2RlZmluZSBEU1BBUkJfSFdDT05UUk9MKGRldikgKElTX0c0WChkZXYpIHx8IElTX0lST05MQUtFKGRldikpCiAKICNkZWZpbmUgSEFTX0ZXX0JMQyhkZXYpIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikgfHwgSVNfSVJPTkxBS0UoZGV2KSkKLSNkZWZpbmUgSEFTX1BJUEVfQ1hTUihkZXYpIChJU19HNFgoZGV2KSB8fCBJU19JUk9OTEFLRShkZXYpKQotI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSVNfTU9CSUxFKGRldikgJiYgXAotCQkJICAgKElTX0k5WFgoZGV2KSB8fCBJU19HTTQ1KGRldikpICYmIFwKLQkJCSAgICFJU19QSU5FVklFVyhkZXYpICYmIFwKLQkJCSAgICFJU19JUk9OTEFLRShkZXYpKQotI2RlZmluZSBJOTE1X0hBU19SQzYoZGV2KSAoSVNfSTk2NUdNKGRldikgfHwgSVNfR000NShkZXYpIHx8IElTX0lST05MQUtFX00oZGV2KSkKKyNkZWZpbmUgSEFTX1BJUEVfQ1hTUihkZXYpIChJTlRFTF9JTkZPKGRldiktPmhhc19waXBlX2N4c3IpCisjZGVmaW5lIEk5MTVfSEFTX0ZCQyhkZXYpIChJTlRFTF9JTkZPKGRldiktPmhhc19mYmMpCisjZGVmaW5lIEk5MTVfSEFTX1JDNihkZXYpIChJTlRFTF9JTkZPKGRldiktPmhhc19yYzYpCiAKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDhjNDYzY2YuLjI3NDg2MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMjAyMSw5ICsyMDIxLDYgQEAKIAkvKiBibG93IGF3YXkgbWFwcGluZ3MgaWYgbWFwcGVkIHRocm91Z2ggR1RUICovCiAJaTkxNV9nZW1fcmVsZWFzZV9tbWFwKG9iaik7CiAKLQlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKQotCQlpOTE1X2dlbV9jbGVhcl9mZW5jZV9yZWcob2JqKTsKLQogCS8qIE1vdmUgdGhlIG9iamVjdCB0byB0aGUgQ1BVIGRvbWFpbiB0byBlbnN1cmUgdGhhdAogCSAqIGFueSBwb3NzaWJsZSBDUFUgd3JpdGVzIHdoaWxlIGl0J3Mgbm90IGluIHRoZSBHVFQKIAkgKiBhcmUgZmx1c2hlZCB3aGVuIHdlIGdvIHRvIHJlbWFwIGl0LiBUaGlzIHdpbGwKQEAgLTIwMzksNiArMjAzNiwxMCBAQAogCiAJQlVHX09OKG9ial9wcml2LT5hY3RpdmUpOwogCisJLyogcmVsZWFzZSB0aGUgZmVuY2UgcmVnIF9hZnRlcl8gZmx1c2hpbmcgKi8KKwlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKQorCQlpOTE1X2dlbV9jbGVhcl9mZW5jZV9yZWcob2JqKTsKKwogCWlmIChvYmpfcHJpdi0+YWdwX21lbSAhPSBOVUxMKSB7CiAJCWRybV91bmJpbmRfYWdwKG9ial9wcml2LT5hZ3BfbWVtKTsKIAkJZHJtX2ZyZWVfYWdwKG9ial9wcml2LT5hZ3BfbWVtLCBvYmotPnNpemUgLyBQQUdFX1NJWkUpOwpAQCAtMjU4MSw5ICsyNTgyLDYgQEAKIAlib29sIHJldHJ5X2FsbG9jID0gZmFsc2U7CiAJaW50IHJldDsKIAotCWlmIChkZXZfcHJpdi0+bW0uc3VzcGVuZGVkKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJaWYgKG9ial9wcml2LT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCkgewogCQlEUk1fRVJST1IoIkF0dGVtcHRpbmcgdG8gYmluZCBhIHB1cmdlYWJsZSBvYmplY3RcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMxOTgsNyArMzE5Niw3IEBACiBzdGF0aWMgaW50CiBpOTE1X2dlbV9vYmplY3RfcGluX2FuZF9yZWxvY2F0ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKIAkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmVudHJ5LAorCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnksCiAJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKQEAgLTMyMDYsMTIgKzMyMDQsMzUgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCWludCBpLCByZXQ7CiAJdm9pZCBfX2lvbWVtICpyZWxvY19wYWdlOworCWJvb2wgbmVlZF9mZW5jZTsKKworCW5lZWRfZmVuY2UgPSBlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSAmJgorCSAgICAgICAgICAgICBvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORTsKKworCS8qIENoZWNrIGZlbmNlIHJlZyBjb25zdHJhaW50cyBhbmQgcmViaW5kIGlmIG5lY2Vzc2FyeSAqLworCWlmIChuZWVkX2ZlbmNlICYmICFpOTE1X29ial9mZW5jZWFibGUoZGV2LCBvYmopKQorCQlpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CiAKIAkvKiBDaG9vc2UgdGhlIEdUVCBvZmZzZXQgZm9yIG91ciBidWZmZXIgYW5kIHB1dCBpdCB0aGVyZS4gKi8KIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgKHVpbnQzMl90KSBlbnRyeS0+YWxpZ25tZW50KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyoKKwkgKiBQcmUtOTY1IGNoaXBzIG5lZWQgYSBmZW5jZSByZWdpc3RlciBzZXQgdXAgaW4gb3JkZXIgdG8KKwkgKiBwcm9wZXJseSBoYW5kbGUgYmxpdHMgdG8vZnJvbSB0aWxlZCBzdXJmYWNlcy4KKwkgKi8KKwlpZiAobmVlZF9mZW5jZSkgeworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlX3JlZyhvYmopOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWlmIChyZXQgIT0gLUVCVVNZICYmIHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQkJRFJNX0VSUk9SKCJGYWlsdXJlIHRvIGluc3RhbGwgZmVuY2U6ICVkXG4iLAorCQkJCQkgIHJldCk7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKIAllbnRyeS0+b2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CiAKIAkvKiBBcHBseSB0aGUgcmVsb2NhdGlvbnMsIHVzaW5nIHRoZSBHVFQgYXBlcnR1cmUgdG8gYXZvaWQgY2FjaGUKQEAgLTMzNzMsNyArMzM5NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQKIGk5MTVfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqZXhlYywKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWMsCiAJCQkgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzLAogCQkJICAgICAgdWludDY0X3QgZXhlY19vZmZzZXQpCiB7CkBAIC0zNDYzLDcgKzM0ODQsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1pOTE1X2dlbV9nZXRfcmVsb2NzX2Zyb21fdXNlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QsCitpOTE1X2dlbV9nZXRfcmVsb2NzX2Zyb21fdXNlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlY19saXN0LAogCQkJICAgICAgdWludDMyX3QgYnVmZmVyX2NvdW50LAogCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICoqcmVsb2NzKQogewpAQCAtMzQ3OCw4ICszNDk5LDEwIEBACiAJfQogCiAJKnJlbG9jcyA9IGRybV9jYWxsb2NfbGFyZ2UocmVsb2NfY291bnQsIHNpemVvZigqKnJlbG9jcykpOwotCWlmICgqcmVsb2NzID09IE5VTEwpCisJaWYgKCpyZWxvY3MgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvYyByZWxvY3MsIGNvdW50ICVkXG4iLCByZWxvY19jb3VudCk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBidWZmZXJfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1c2VyX3JlbG9jczsKQEAgLTM1MDMsNyArMzUyNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX3B1dF9yZWxvY3NfdG9fdXNlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QsCitpOTE1X2dlbV9wdXRfcmVsb2NzX3RvX3VzZXIoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWNfbGlzdCwKIAkJCSAgICB1aW50MzJfdCBidWZmZXJfY291bnQsCiAJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3MpCiB7CkBAIC0zNTM2LDcgKzM1NTksNyBAQAogfQogCiBzdGF0aWMgaW50Ci1pOTE1X2dlbV9jaGVja19leGVjYnVmZmVyIChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgKmV4ZWMsCitpOTE1X2dlbV9jaGVja19leGVjYnVmZmVyIChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjLAogCQkJICAgdWludDY0X3QgZXhlY19vZmZzZXQpCiB7CiAJdWludDMyX3QgZXhlY19zdGFydCwgZXhlY19sZW47CkBAIC0zNTg5LDE4ICszNjEyLDE4IEBACiB9CiAKIGludAotaTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlY19saXN0KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqYXJncyA9IGRhdGE7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZXhlY19saXN0ID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipvYmplY3RfbGlzdCA9IE5VTEw7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwogCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgPSBOVUxMOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzOwotCWludCByZXQsIHJldDIsIGksIHBpbm5lZCA9IDA7CisJaW50IHJldCA9IDAsIHJldDIsIGksIHBpbm5lZCA9IDA7CiAJdWludDY0X3QgZXhlY19vZmZzZXQ7CiAJdWludDMyX3Qgc2Vxbm8sIGZsdXNoX2RvbWFpbnMsIHJlbG9jX2luZGV4OwogCWludCBwaW5fdHJpZXMsIGZsaXBzOwpAQCAtMzYxNCwyNSArMzYzNywxMyBAQAogCQlEUk1fRVJST1IoImV4ZWNidWYgd2l0aCAlZCBidWZmZXJzXG4iLCBhcmdzLT5idWZmZXJfY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JLyogQ29weSBpbiB0aGUgZXhlYyBsaXN0IGZyb20gdXNlcmxhbmQgKi8KLQlleGVjX2xpc3QgPSBkcm1fbWFsbG9jX2FiKHNpemVvZigqZXhlY19saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50KTsKIAlvYmplY3RfbGlzdCA9IGRybV9tYWxsb2NfYWIoc2l6ZW9mKCpvYmplY3RfbGlzdCksIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7Ci0JaWYgKGV4ZWNfbGlzdCA9PSBOVUxMIHx8IG9iamVjdF9saXN0ID09IE5VTEwpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBvciBvYmplY3QgbGlzdCAiCi0JCQkgICJmb3IgJWQgYnVmZmVyc1xuIiwKKwlpZiAob2JqZWN0X2xpc3QgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBvYmplY3QgbGlzdCBmb3IgJWQgYnVmZmVyc1xuIiwKIAkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBwcmVfbXV0ZXhfZXJyOwogCX0KLQlyZXQgPSBjb3B5X2Zyb21fdXNlcihleGVjX2xpc3QsCi0JCQkgICAgIChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKLQkJCSAgICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCi0JCQkgICAgIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCURSTV9FUlJPUigiY29weSAlZCBleGVjIGVudHJpZXMgZmFpbGVkICVkXG4iLAotCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7Ci0JCWdvdG8gcHJlX211dGV4X2VycjsKLQl9CiAKIAlpZiAoYXJncy0+bnVtX2NsaXByZWN0cyAhPSAwKSB7CiAJCWNsaXByZWN0cyA9IGtjYWxsb2MoYXJncy0+bnVtX2NsaXByZWN0cywgc2l6ZW9mKCpjbGlwcmVjdHMpLApAQCAtMzg4NCwyMCArMzg5NSw2IEBACiAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCWlmICghcmV0KSB7Ci0JCS8qIENvcHkgdGhlIG5ldyBidWZmZXIgb2Zmc2V0cyBiYWNrIHRvIHRoZSB1c2VyJ3MgZXhlYyBsaXN0LiAqLwotCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQotCQkJCSAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAotCQkJCSAgIGV4ZWNfbGlzdCwKLQkJCQkgICBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQpOwotCQlpZiAocmV0KSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY29weSAlZCBleGVjIGVudHJpZXMgIgotCQkJCSAgImJhY2sgdG8gdXNlciAoJWQpXG4iLAotCQkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOwotCQl9Ci0JfQotCiAJLyogQ29weSB0aGUgdXBkYXRlZCByZWxvY2F0aW9ucyBvdXQgcmVnYXJkbGVzcyBvZiBjdXJyZW50IGVycm9yCiAJICogc3RhdGUuICBGYWlsdXJlIHRvIHVwZGF0ZSB0aGUgcmVsb2NzIHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV4dAogCSAqIHRpbWUgdXNlcmxhbmQgY2FsbHMgZXhlY2J1ZiwgaXQgd291bGQgZG8gc28gd2l0aCBwcmVzdW1lZCBvZmZzZXQKQEAgLTM5MTQsMTIgKzM5MTEsMTU4IEBACiAKIHByZV9tdXRleF9lcnI6CiAJZHJtX2ZyZWVfbGFyZ2Uob2JqZWN0X2xpc3QpOwotCWRybV9mcmVlX2xhcmdlKGV4ZWNfbGlzdCk7CiAJa2ZyZWUoY2xpcHJlY3RzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBMZWdhY3kgZXhlY2J1ZmZlciBqdXN0IGNyZWF0ZXMgYW4gZXhlYzIgbGlzdCBmcm9tIHRoZSBvcmlnaW5hbCBleGVjIG9iamVjdAorICogbGlzdCBhcnJheSBhbmQgcGFzc2VzIGl0IHRvIHRoZSByZWFsIGZ1bmN0aW9uLgorICovCitpbnQKK2k5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjMjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QgPSBOVUxMOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjMl9saXN0ID0gTlVMTDsKKwlpbnQgcmV0LCBpOworCisjaWYgV0FUQ0hfRVhFQworCURSTV9JTkZPKCJidWZmZXJzX3B0ciAlZCBidWZmZXJfY291bnQgJWQgbGVuICUwOHhcbiIsCisJCSAgKGludCkgYXJncy0+YnVmZmVyc19wdHIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgYXJncy0+YmF0Y2hfbGVuKTsKKyNlbmRpZgorCisJaWYgKGFyZ3MtPmJ1ZmZlcl9jb3VudCA8IDEpIHsKKwkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggJWQgYnVmZmVyc1xuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29weSBpbiB0aGUgZXhlYyBsaXN0IGZyb20gdXNlcmxhbmQgKi8KKwlleGVjX2xpc3QgPSBkcm1fbWFsbG9jX2FiKHNpemVvZigqZXhlY19saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwlleGVjMl9saXN0ID0gZHJtX21hbGxvY19hYihzaXplb2YoKmV4ZWMyX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQpOworCWlmIChleGVjX2xpc3QgPT0gTlVMTCB8fCBleGVjMl9saXN0ID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBsaXN0IGZvciAlZCBidWZmZXJzXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQpOworCQlkcm1fZnJlZV9sYXJnZShleGVjX2xpc3QpOworCQlkcm1fZnJlZV9sYXJnZShleGVjMl9saXN0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4ZWNfbGlzdCwKKwkJCSAgICAgKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJICAgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKKwkJCSAgICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJjb3B5ICVkIGV4ZWMgZW50cmllcyBmYWlsZWQgJWRcbiIsCisJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKKwkJZHJtX2ZyZWVfbGFyZ2UoZXhlY19saXN0KTsKKwkJZHJtX2ZyZWVfbGFyZ2UoZXhlYzJfbGlzdCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlleGVjMl9saXN0W2ldLmhhbmRsZSA9IGV4ZWNfbGlzdFtpXS5oYW5kbGU7CisJCWV4ZWMyX2xpc3RbaV0ucmVsb2NhdGlvbl9jb3VudCA9IGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50OworCQlleGVjMl9saXN0W2ldLnJlbG9jc19wdHIgPSBleGVjX2xpc3RbaV0ucmVsb2NzX3B0cjsKKwkJZXhlYzJfbGlzdFtpXS5hbGlnbm1lbnQgPSBleGVjX2xpc3RbaV0uYWxpZ25tZW50OworCQlleGVjMl9saXN0W2ldLm9mZnNldCA9IGV4ZWNfbGlzdFtpXS5vZmZzZXQ7CisJCWlmICghSVNfSTk2NUcoZGV2KSkKKwkJCWV4ZWMyX2xpc3RbaV0uZmxhZ3MgPSBFWEVDX09CSkVDVF9ORUVEU19GRU5DRTsKKwkJZWxzZQorCQkJZXhlYzJfbGlzdFtpXS5mbGFncyA9IDA7CisJfQorCisJZXhlYzIuYnVmZmVyc19wdHIgPSBhcmdzLT5idWZmZXJzX3B0cjsKKwlleGVjMi5idWZmZXJfY291bnQgPSBhcmdzLT5idWZmZXJfY291bnQ7CisJZXhlYzIuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0OworCWV4ZWMyLmJhdGNoX2xlbiA9IGFyZ3MtPmJhdGNoX2xlbjsKKwlleGVjMi5EUjEgPSBhcmdzLT5EUjE7CisJZXhlYzIuRFI0ID0gYXJncy0+RFI0OworCWV4ZWMyLm51bV9jbGlwcmVjdHMgPSBhcmdzLT5udW1fY2xpcHJlY3RzOworCWV4ZWMyLmNsaXByZWN0c19wdHIgPSBhcmdzLT5jbGlwcmVjdHNfcHRyOworCWV4ZWMyLmZsYWdzID0gMDsKKworCXJldCA9IGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoZGV2LCBkYXRhLCBmaWxlX3ByaXYsICZleGVjMiwgZXhlYzJfbGlzdCk7CisJaWYgKCFyZXQpIHsKKwkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCisJCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykKKwkJCWV4ZWNfbGlzdFtpXS5vZmZzZXQgPSBleGVjMl9saXN0W2ldLm9mZnNldDsKKwkJLyogLi4uIGFuZCBiYWNrIG91dCB0byB1c2Vyc3BhY2UgKi8KKwkJcmV0ID0gY29weV90b191c2VyKChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCQkgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKKwkJCQkgICBleGVjX2xpc3QsCisJCQkJICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNvcHkgJWQgZXhlYyBlbnRyaWVzICIKKwkJCQkgICJiYWNrIHRvIHVzZXIgKCVkKVxuIiwKKwkJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKKwkJfQorCX0gZWxzZSB7CisJCURSTV9FUlJPUigiaTkxNV9nZW1fZG9fZXhlY2J1ZmZlciByZXR1cm5zICVkXG4iLCByZXQpOworCX0KKworCWRybV9mcmVlX2xhcmdlKGV4ZWNfbGlzdCk7CisJZHJtX2ZyZWVfbGFyZ2UoZXhlYzJfbGlzdCk7CisJcmV0dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9leGVjYnVmZmVyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjMl9saXN0ID0gTlVMTDsKKwlpbnQgcmV0OworCisjaWYgV0FUQ0hfRVhFQworCURSTV9JTkZPKCJidWZmZXJzX3B0ciAlZCBidWZmZXJfY291bnQgJWQgbGVuICUwOHhcbiIsCisJCSAgKGludCkgYXJncy0+YnVmZmVyc19wdHIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgYXJncy0+YmF0Y2hfbGVuKTsKKyNlbmRpZgorCisJaWYgKGFyZ3MtPmJ1ZmZlcl9jb3VudCA8IDEpIHsKKwkJRFJNX0VSUk9SKCJleGVjYnVmMiB3aXRoICVkIGJ1ZmZlcnNcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWV4ZWMyX2xpc3QgPSBkcm1fbWFsbG9jX2FiKHNpemVvZigqZXhlYzJfbGlzdCksIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKGV4ZWMyX2xpc3QgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBleGVjIGxpc3QgZm9yICVkIGJ1ZmZlcnNcbiIsCisJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihleGVjMl9saXN0LAorCQkJICAgICAoc3RydWN0IGRybV9pOTE1X3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCisJCQkgICAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAorCQkJICAgICBzaXplb2YoKmV4ZWMyX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJjb3B5ICVkIGV4ZWMgZW50cmllcyBmYWlsZWQgJWRcbiIsCisJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKKwkJZHJtX2ZyZWVfbGFyZ2UoZXhlYzJfbGlzdCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldCA9IGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoZGV2LCBkYXRhLCBmaWxlX3ByaXYsIGFyZ3MsIGV4ZWMyX2xpc3QpOworCWlmICghcmV0KSB7CisJCS8qIENvcHkgdGhlIG5ldyBidWZmZXIgb2Zmc2V0cyBiYWNrIHRvIHRoZSB1c2VyJ3MgZXhlYyBsaXN0LiAqLworCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJCSAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAorCQkJCSAgIGV4ZWMyX2xpc3QsCisJCQkJICAgc2l6ZW9mKCpleGVjMl9saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBjb3B5ICVkIGV4ZWMgZW50cmllcyAiCisJCQkJICAiYmFjayB0byB1c2VyICglZClcbiIsCisJCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7CisJCX0KKwl9CisKKwlkcm1fZnJlZV9sYXJnZShleGVjMl9saXN0KTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQKIGk5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IGFsaWdubWVudCkKIHsKQEAgLTM5MzMsMTkgKzQwNzYsNyBAQAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9Ci0JLyoKLQkgKiBQcmUtOTY1IGNoaXBzIG5lZWQgYSBmZW5jZSByZWdpc3RlciBzZXQgdXAgaW4gb3JkZXIgdG8KLQkgKiBwcm9wZXJseSBoYW5kbGUgdGlsZWQgc3VyZmFjZXMuCi0JICovCi0JaWYgKCFJU19JOTY1RyhkZXYpICYmIG9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKSB7Ci0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2VfcmVnKG9iaik7Ci0JCWlmIChyZXQgIT0gMCkgewotCQkJaWYgKHJldCAhPSAtRUJVU1kgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUykKLQkJCQlEUk1fRVJST1IoIkZhaWx1cmUgdG8gaW5zdGFsbCBmZW5jZTogJWRcbiIsCi0JCQkJCSAgcmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9CisKIAlvYmpfcHJpdi0+cGluX2NvdW50Kys7CiAKIAkvKiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBhY3RpdmUgYW5kIG5vdCBwZW5kaW5nIGEgZmx1c2gsCkBAIC00NzA4LDcgKzQ4MzksNyBAQAogCiAJcGh5c19vYmotPmlkID0gaWQ7CiAKLQlwaHlzX29iai0+aGFuZGxlID0gZHJtX3BjaV9hbGxvYyhkZXYsIHNpemUsIDAsIDB4ZmZmZmZmZmYpOworCXBoeXNfb2JqLT5oYW5kbGUgPSBkcm1fcGNpX2FsbG9jKGRldiwgc2l6ZSwgMCk7CiAJaWYgKCFwaHlzX29iai0+aGFuZGxlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8ga2ZyZWVfb2JqOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCAzMGQ2YWY2Yy4uZGYyNzhiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKQEAgLTMwNCwzNSArMzA0LDM5IEBACiAKIAogLyoqCi0gKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBmZW5jZSBmb3IgYSB0aWxlZCBvYmplY3Qgb2YgdGhlIGdpdmVuIHNpemUuCisgKiBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGN1cnJlbnRseSBmZW5jZWFibGUuICBJZiBub3QsIGl0IG1heSBuZWVkCisgKiB0byBiZSB1bmJvdW5kIGFuZCBoYXZlIGl0cyBwaXRjaCBhZGp1c3RlZC4KICAqLwotc3RhdGljIGludAotaTkxNV9nZXRfZmVuY2Vfc2l6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgc2l6ZSkKK2Jvb2wKK2k5MTVfb2JqX2ZlbmNlYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKLQlpbnQgaTsKLQlpbnQgc3RhcnQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAogCWlmIChJU19JOTY1RyhkZXYpKSB7CiAJCS8qIFRoZSA5NjUgY2FuIGhhdmUgZmVuY2VzIGF0IGFueSBwYWdlIGJvdW5kYXJ5LiAqLwotCQlyZXR1cm4gQUxJR04oc2l6ZSwgNDA5Nik7CisJCWlmIChvYmotPnNpemUgJiA0MDk1KQorCQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgaWYgKElTX0k5WFgoZGV2KSkgeworCQlpZiAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STkxNV9GRU5DRV9TVEFSVF9NQVNLKQorCQkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7Ci0JCS8qIEFsaWduIHRoZSBzaXplIHRvIGEgcG93ZXIgb2YgdHdvIGdyZWF0ZXIgdGhhbiB0aGUgc21hbGxlc3QKLQkJICogZmVuY2Ugc2l6ZS4KLQkJICovCi0JCWlmIChJU19JOVhYKGRldikpCi0JCQlzdGFydCA9IDEwMjQgKiAxMDI0OwotCQllbHNlCi0JCQlzdGFydCA9IDUxMiAqIDEwMjQ7Ci0KLQkJZm9yIChpID0gc3RhcnQ7IGkgPCBzaXplOyBpIDw8PSAxKQotCQkJOwotCi0JCXJldHVybiBpOworCQlpZiAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STgzMF9GRU5DRV9TVEFSVF9NQVNLKQorCQkJcmV0dXJuIGZhbHNlOwogCX0KKworCS8qIFBvd2VyIG9mIHR3byBzaXplZC4uLiAqLworCWlmIChvYmotPnNpemUgJiAob2JqLT5zaXplIC0gMSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIE9iamVjdHMgbXVzdCBiZSBzaXplIGFsaWduZWQgYXMgd2VsbCAqLworCWlmIChvYmpfcHJpdi0+Z3R0X29mZnNldCAmIChvYmotPnNpemUgLSAxKSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOwogfQogCiAvKiBDaGVjayBwaXRjaCBjb25zdHJpYW50cyBmb3IgYWxsIGNoaXBzICYgdGlsaW5nIGZvcm1hdHMgKi8KLXN0YXRpYyBib29sCitib29sCiBpOTE1X3RpbGluZ19vayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgc3RyaWRlLCBpbnQgc2l6ZSwgaW50IHRpbGluZ19tb2RlKQogewogCWludCB0aWxlX3dpZHRoOwpAQCAtMzg0LDEyICszODgsNiBAQAogCWlmIChzdHJpZGUgJiAoc3RyaWRlIC0gMSkpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIFdlIGRvbid0IDBoYW5kbGUgdGhlIGFwZXJ0dXJlIGFyZWEgY292ZXJlZCBieSB0aGUgZmVuY2UgYmVpbmcgYmlnZ2VyCi0JICogdGhhbiB0aGUgb2JqZWN0IHNpemUuCi0JICovCi0JaWYgKGk5MTVfZ2V0X2ZlbmNlX3NpemUoZGV2LCBzaXplKSAhPSBzaXplKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pb2MzMi5jCmluZGV4IDFmZTY4YTIuLjEzYjAyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lvYzMyLmMKQEAgLTY2LDggKzY2LDcgQEAKIAkJCSAgJmJhdGNoYnVmZmVyLT5jbGlwcmVjdHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9CQVRDSEJVRkZFUiwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0JBVENIQlVGRkVSLAogCQkJICh1bnNpZ25lZCBsb25nKWJhdGNoYnVmZmVyKTsKIH0KIApAQCAtMTAyLDggKzEwMSw4IEBACiAJCQkgICZjbWRidWZmZXItPmNsaXByZWN0cykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0NNREJVRkZFUiwgKHVuc2lnbmVkIGxvbmcpY21kYnVmZmVyKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0NNREJVRkZFUiwKKwkJCSAodW5zaWduZWQgbG9uZyljbWRidWZmZXIpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfZW1pdDMyIHsKQEAgLTEyNSw4ICsxMjQsOCBAQAogCQkJICAmcmVxdWVzdC0+aXJxX3NlcSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0lSUV9FTUlULCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0lSUV9FTUlULAorCQkJICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0zMiB7CiAJaW50IHBhcmFtOwpAQCAtMTQ5LDggKzE0OCw4IEBACiAJCQkgICZyZXF1ZXN0LT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLAorCQkJICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9tZW1fYWxsb2MzMiB7CkBAIC0xNzgsOCArMTc3LDggQEAKIAkJCSAgJnJlcXVlc3QtPnJlZ2lvbl9vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfSTkxNV9BTExPQywKKwkJCSAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogZHJtX2lvY3RsX2NvbXBhdF90ICppOTE1X2NvbXBhdF9pb2N0bHNbXSA9IHsKQEAgLTIxMSwxMiArMjEwLDEwIEBACiAJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9BUlJBWV9TSVpFKGk5MTVfY29tcGF0X2lvY3RscykpCiAJCWZuID0gaTkxNV9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDg1ZjRjNWQuLjdjZDgxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMzEzLDYgKzMxMyw4IEBACiAJCQlkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyA9IHNlcW5vOwogCQkJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZShkZXYsIHNlcW5vKTsKIAkJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOworCQkJZGV2X3ByaXYtPmhhbmdjaGVja19jb3VudCA9IDA7CisJCQltb2RfdGltZXIoJmRldl9wcml2LT5oYW5nY2hlY2tfdGltZXIsIGppZmZpZXMgKyBEUk1fSTkxNV9IQU5HQ0hFQ0tfUEVSSU9EKTsKIAkJfQogCiAJCWlmIChkZV9paXIgJiBERV9HU0UpCkBAIC0xMDg0LDYgKzEwODYsMTAgQEAKIAkodm9pZCkgSTkxNV9SRUFEKElFUik7CiB9CiAKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBpbnRlbF9tb2Rlc2V0X2luaXQgb3IgaG90cGx1ZyBpbnRlcnJ1cHRzIHdvbid0IGJlCisgKiBlbmFibGVkIGNvcnJlY3RseS4KKyAqLwogaW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xMTA2LDE5ICsxMTEyLDIzIEBACiAJaWYgKEk5MTVfSEFTX0hPVFBMVUcoZGV2KSkgewogCQl1MzIgaG90cGx1Z19lbiA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOwogCi0JCS8qIExlYXZlIG90aGVyIGJpdHMgYWxvbmUgKi8KLQkJaG90cGx1Z19lbiB8PSBIT1RQTFVHX0VOX01BU0s7CisJCS8qIE5vdGUgSERNSSBhbmQgRFAgc2hhcmUgYml0cyAqLworCQlpZiAoZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgJiBIRE1JQl9IT1RQTFVHX0lOVF9TVEFUVVMpCisJCQlob3RwbHVnX2VuIHw9IEhETUlCX0hPVFBMVUdfSU5UX0VOOworCQlpZiAoZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgJiBIRE1JQ19IT1RQTFVHX0lOVF9TVEFUVVMpCisJCQlob3RwbHVnX2VuIHw9IEhETUlDX0hPVFBMVUdfSU5UX0VOOworCQlpZiAoZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgJiBIRE1JRF9IT1RQTFVHX0lOVF9TVEFUVVMpCisJCQlob3RwbHVnX2VuIHw9IEhETUlEX0hPVFBMVUdfSU5UX0VOOworCQlpZiAoZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgJiBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVMpCisJCQlob3RwbHVnX2VuIHw9IFNEVk9DX0hPVFBMVUdfSU5UX0VOOworCQlpZiAoZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgJiBTRFZPQl9IT1RQTFVHX0lOVF9TVEFUVVMpCisJCQlob3RwbHVnX2VuIHw9IFNEVk9CX0hPVFBMVUdfSU5UX0VOOworCQlpZiAoZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgJiBDUlRfSE9UUExVR19JTlRfU1RBVFVTKQorCQkJaG90cGx1Z19lbiB8PSBDUlRfSE9UUExVR19JTlRfRU47CisJCS8qIElnbm9yZSBUViBzaW5jZSBpdCdzIGJ1Z2d5ICovCisKIAkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIGhvdHBsdWdfZW4pOwogCi0JCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrID0gQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUyB8Ci0JCQlUVl9IT1RQTFVHX0lOVF9TVEFUVVMgfCBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVMgfAotCQkJU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTOwotCQlpZiAoSVNfRzRYKGRldikpIHsKLQkJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9Ci0JCQkJSERNSUJfSE9UUExVR19JTlRfU1RBVFVTIHwKLQkJCQlIRE1JQ19IT1RQTFVHX0lOVF9TVEFUVVMgfAotCQkJCUhETUlEX0hPVFBMVUdfSU5UX1NUQVRVUzsKLQkJfQogCQkvKiBFbmFibGUgaW4gSUVSLi4uICovCiAJCWVuYWJsZV9tYXNrIHw9IEk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVDsKIAkJLyogYW5kIHVubWFzayBpbiBJTVIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDk3NGIzY2YuLjE0OWQzNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtODc5LDEzICs4NzksNiBAQAogI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfVk9MVEFHRV80NzVNVgkoMSA8PCAyKQogI2RlZmluZSBDUlRfSE9UUExVR19NQVNLCQkJKDB4M2ZjKSAvKiBCaXRzIDktMiAqLwogI2RlZmluZSBDUlRfRk9SQ0VfSE9UUExVR19NQVNLCQkJMHhmZmZmZmUxZgotI2RlZmluZSBIT1RQTFVHX0VOX01BU0sgKEhETUlCX0hPVFBMVUdfSU5UX0VOIHwgXAotCQkJIEhETUlDX0hPVFBMVUdfSU5UX0VOIHwJICBcCi0JCQkgSERNSURfSE9UUExVR19JTlRfRU4gfAkgIFwKLQkJCSBTRFZPQl9IT1RQTFVHX0lOVF9FTiB8CSAgXAotCQkJIFNEVk9DX0hPVFBMVUdfSU5UX0VOIHwJICBcCi0JCQkgQ1JUX0hPVFBMVUdfSU5UX0VOKQotCiAKICNkZWZpbmUgUE9SVF9IT1RQTFVHX1NUQVQJMHg2MTExNAogI2RlZmluZSAgIEhETUlCX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgMjkpCkBAIC05ODIsNiArOTc1LDggQEAKICNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKIC8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLwogI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qIExWRFMgZGl0aGVyaW5nIGZsYWcgb24gOTY1L2c0eCBwbGF0Zm9ybSAqLworI2RlZmluZSAgIExWRFNfRU5BQkxFX0RJVEhFUgkJKDEgPDwgMjUpCiAvKiBFbmFibGUgYm9yZGVyIGZvciB1bnNjYWxlZCAob3IgYXNwZWN0LXNjYWxlZCkgZGlzcGxheSAqLwogI2RlZmluZSAgIExWRFNfQk9SREVSX0VOQUJMRQkJKDEgPDwgMTUpCiAvKgpAQCAtMTc1MSw2ICsxNzQ2LDggQEAKIAogLyogRGlzcGxheSAmIGN1cnNvciBjb250cm9sICovCiAKKy8qIGRpdGhlcmluZyBmbGFnIG9uIElyb25sYWtlICovCisjZGVmaW5lIFBJUEVfRU5BQkxFX0RJVEhFUgkoMSA8PCA0KQogLyogUGlwZSBBICovCiAjZGVmaW5lIFBJUEVBRFNMCQkweDcwMDAwCiAjZGVmaW5lIFBJUEVBQ09ORgkJMHg3MDAwOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwppbmRleCBkNWViYjAwLi5hM2I5MGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwpAQCAtNzMyLDEyICs3MzIsNiBAQAogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsICZkZXZfcHJpdi0+c2F2ZUxCQik7CiAKLQkvKiBSZW5kZXIgU3RhbmRieSAqLwotCWlmIChJOTE1X0hBU19SQzYoZGV2KSkgewotCQlkZXZfcHJpdi0+c2F2ZVJFTkRFUlNUQU5EQlkgPSBJOTE1X1JFQUQoTUNIQkFSX1JFTkRFUl9TVEFOREJZKTsKLQkJZGV2X3ByaXYtPnNhdmVQV1JDVFhBID0gSTkxNV9SRUFEKFBXUkNUWEEpOwotCX0KLQogCS8qIEhhcmR3YXJlIHN0YXR1cyBwYWdlICovCiAJZGV2X3ByaXYtPnNhdmVIV1MgPSBJOTE1X1JFQUQoSFdTX1BHQSk7CiAKQEAgLTc5MywxMiArNzg3LDYgQEAKIAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgZGV2X3ByaXYtPnNhdmVMQkIpOwogCi0JLyogUmVuZGVyIFN0YW5kYnkgKi8KLQlpZiAoSTkxNV9IQVNfUkM2KGRldikpIHsKLQkJSTkxNV9XUklURShNQ0hCQVJfUkVOREVSX1NUQU5EQlksIGRldl9wcml2LT5zYXZlUkVOREVSU1RBTkRCWSk7Ci0JCUk5MTVfV1JJVEUoUFdSQ1RYQSwgZGV2X3ByaXYtPnNhdmVQV1JDVFhBKTsKLQl9Ci0KIAkvKiBIYXJkd2FyZSBzdGF0dXMgcGFnZSAqLwogCUk5MTVfV1JJVEUoSFdTX1BHQSwgZGV2X3ByaXYtPnNhdmVIV1MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDlmM2QzZTUuLmRkZWZjODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC01NDgsNCArNTQ4LDYgQEAKIAlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmaW50ZWxfY3J0X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwogCiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKKworCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9IENSVF9IT1RQTFVHX0lOVF9TVEFUVVM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNTJjZDliMC4uMDAyNjEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMjYyLDYgKzI2MiwxNCBAQAogI2RlZmluZSBJUk9OTEFLRV9QMl9MVkRTX0ZBU1QgICAgNyAgLyogZG91YmxlIGNoYW5uZWwgKi8KICNkZWZpbmUgSVJPTkxBS0VfUDJfRE9UX0xJTUlUICAgIDIyNTAwMCAvKiAyMjVNaHogKi8KIAorI2RlZmluZSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NSU4JMTAKKyNkZWZpbmUgSVJPTkxBS0VfUF9ESVNQTEFZX1BPUlRfTUFYCTIwCisjZGVmaW5lIElST05MQUtFX1AyX0RJU1BMQVlfUE9SVF9GQVNUCTEwCisjZGVmaW5lIElST05MQUtFX1AyX0RJU1BMQVlfUE9SVF9TTE9XCTEwCisjZGVmaW5lIElST05MQUtFX1AyX0RJU1BMQVlfUE9SVF9MSU1JVAkwCisjZGVmaW5lIElST05MQUtFX1AxX0RJU1BMQVlfUE9SVF9NSU4JMQorI2RlZmluZSBJUk9OTEFLRV9QMV9ESVNQTEFZX1BPUlRfTUFYCTIKKwogc3RhdGljIGJvb2wKIGludGVsX2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spOwpAQCAtMjcxLDkgKzI3OSw2IEBACiBzdGF0aWMgYm9vbAogaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCWludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spOwotc3RhdGljIGJvb2wKLWludGVsX2lyb25sYWtlX2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7CiAKIHN0YXRpYyBib29sCiBpbnRlbF9maW5kX3BsbF9nNHhfZHAoY29uc3QgaW50ZWxfbGltaXRfdCAqLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCkBAIC00OTYsNyArNTAxLDcgQEAKIAkucDIgID0geyAuZG90X2xpbWl0ID0gSVJPTkxBS0VfUDJfRE9UX0xJTUlULAogCQkgLnAyX3Nsb3cgPSBJUk9OTEFLRV9QMl9TRFZPX0RBQ19TTE9XLAogCQkgLnAyX2Zhc3QgPSBJUk9OTEFLRV9QMl9TRFZPX0RBQ19GQVNUIH0sCi0JLmZpbmRfcGxsID0gaW50ZWxfaXJvbmxha2VfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pcm9ubGFrZV9sdmRzID0gewpAQCAtNTExLDcgKzUxNiwzMCBAQAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJUk9OTEFLRV9QMl9ET1RfTElNSVQsCiAJCSAucDJfc2xvdyA9IElST05MQUtFX1AyX0xWRFNfU0xPVywKIAkJIC5wMl9mYXN0ID0gSVJPTkxBS0VfUDJfTFZEU19GQVNUIH0sCi0JLmZpbmRfcGxsID0gaW50ZWxfaXJvbmxha2VfZmluZF9iZXN0X1BMTCwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKK307CisKK3N0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pcm9ubGFrZV9kaXNwbGF5X3BvcnQgPSB7CisgICAgICAgIC5kb3QgPSB7IC5taW4gPSBJUk9OTEFLRV9ET1RfTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfRE9UX01BWCB9LAorICAgICAgICAudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwKKyAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVh9LAorICAgICAgICAubiAgID0geyAubWluID0gSVJPTkxBS0VfTl9NSU4sCisgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9OX01BWCB9LAorICAgICAgICAubSAgID0geyAubWluID0gSVJPTkxBS0VfTV9NSU4sCisgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NX01BWCB9LAorICAgICAgICAubTEgID0geyAubWluID0gSVJPTkxBS0VfTTFfTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTFfTUFYIH0sCisgICAgICAgIC5tMiAgPSB7IC5taW4gPSBJUk9OTEFLRV9NMl9NSU4sCisgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NMl9NQVggfSwKKyAgICAgICAgLnAgICA9IHsgLm1pbiA9IElST05MQUtFX1BfRElTUExBWV9QT1JUX01JTiwKKyAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX1BfRElTUExBWV9QT1JUX01BWCB9LAorICAgICAgICAucDEgID0geyAubWluID0gSVJPTkxBS0VfUDFfRElTUExBWV9QT1JUX01JTiwKKyAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX1AxX0RJU1BMQVlfUE9SVF9NQVh9LAorICAgICAgICAucDIgID0geyAuZG90X2xpbWl0ID0gSVJPTkxBS0VfUDJfRElTUExBWV9QT1JUX0xJTUlULAorICAgICAgICAgICAgICAgICAucDJfc2xvdyA9IElST05MQUtFX1AyX0RJU1BMQVlfUE9SVF9TTE9XLAorICAgICAgICAgICAgICAgICAucDJfZmFzdCA9IElST05MQUtFX1AyX0RJU1BMQVlfUE9SVF9GQVNUIH0sCisgICAgICAgIC5maW5kX3BsbCA9IGludGVsX2ZpbmRfcGxsX2lyb25sYWtlX2RwLAogfTsKIAogc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgKmludGVsX2lyb25sYWtlX2xpbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKQEAgLTUxOSw2ICs1NDcsOSBAQAogCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0OwogCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkKIAkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2x2ZHM7CisJZWxzZSBpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpIHx8CisJCQlIQVNfZURQKQorCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaXJvbmxha2VfZGlzcGxheV9wb3J0OwogCWVsc2UKIAkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX3Nkdm87CiAKQEAgLTc5MSw3ICs4MjIsMTMgQEAKIAlmb3VuZCA9IGZhbHNlOwogCiAJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmICgoSTkxNV9SRUFEKExWRFMpICYgTFZEU19DTEtCX1BPV0VSX01BU0spID09CisJCWludCBsdmRzX3JlZzsKKworCQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwkJCWx2ZHNfcmVnID0gUENIX0xWRFM7CisJCWVsc2UKKwkJCWx2ZHNfcmVnID0gTFZEUzsKKwkJaWYgKChJOTE1X1JFQUQobHZkc19yZWcpICYgTFZEU19DTEtCX1BPV0VSX01BU0spID09CiAJCSAgICBMVkRTX0NMS0JfUE9XRVJfVVApCiAJCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9mYXN0OwogCQllbHNlCkBAIC04MzksNiArODc2LDExIEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlpbnRlbF9jbG9ja190IGNsb2NrOworCisJLyogcmV0dXJuIGRpcmVjdGx5IHdoZW4gaXQgaXMgZURQICovCisJaWYgKEhBU19lRFApCisJCXJldHVybiB0cnVlOworCiAJaWYgKHRhcmdldCA8IDIwMDAwMCkgewogCQljbG9jay5uID0gMTsKIAkJY2xvY2sucDEgPSAyOwpAQCAtODU3LDY4ICs4OTksNiBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbAotaW50ZWxfaXJvbmxha2VfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnRlbF9jbG9ja190IGNsb2NrOwotCWludCBlcnJfbW9zdCA9IDQ3OwotCWludCBlcnJfbWluID0gMTAwMDA7Ci0KLQkvKiBlRFAgaGFzIG9ubHkgMiBjbG9jayBjaG9pY2UsIG5vIG4vbS9wIHNldHRpbmcgKi8KLQlpZiAoSEFTX2VEUCkKLQkJcmV0dXJuIHRydWU7Ci0KLQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpKQotCQlyZXR1cm4gaW50ZWxfZmluZF9wbGxfaXJvbmxha2VfZHAobGltaXQsIGNydGMsIHRhcmdldCwKLQkJCQkJICAgICAgIHJlZmNsaywgYmVzdF9jbG9jayk7Ci0KLQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKLQkJaWYgKChJOTE1X1JFQUQoUENIX0xWRFMpICYgTFZEU19DTEtCX1BPV0VSX01BU0spID09Ci0JCSAgICBMVkRTX0NMS0JfUE9XRVJfVVApCi0JCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9mYXN0OwotCQllbHNlCi0JCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9zbG93OwotCX0gZWxzZSB7Ci0JCWlmICh0YXJnZXQgPCBsaW1pdC0+cDIuZG90X2xpbWl0KQotCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfc2xvdzsKLQkJZWxzZQotCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKLQl9Ci0KLQltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2NrKSk7Ci0JZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxID49IGxpbWl0LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKLQkJLyogYmFzZWQgb24gaGFyZHdhcmUgcmVxdXJpbWVudCBwcmVmZXIgc21hbGxlciBuIHRvIHByZWNpc2lvbiAqLwotCQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OyBjbG9jay5uKyspIHsKLQkJCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcm1lbnQgcHJlZmVyZSBsYXJnZXIgbTEsbTIgKi8KLQkJCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWF4OwotCQkJICAgICBjbG9jay5tMSA+PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMS0tKSB7Ci0JCQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5tYXg7Ci0JCQkJICAgICBjbG9jay5tMiA+PSBsaW1pdC0+bTIubWluOyBjbG9jay5tMi0tKSB7Ci0JCQkJCWludCB0aGlzX2VycjsKLQotCQkJCQlpbnRlbF9jbG9jayhkZXYsIHJlZmNsaywgJmNsb2NrKTsKLQkJCQkJaWYgKCFpbnRlbF9QTExfaXNfdmFsaWQoY3J0YywgJmNsb2NrKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl0aGlzX2VyciA9IGFicygoMTAwMDAgLSAodGFyZ2V0KjEwMDAwL2Nsb2NrLmRvdCkpKTsKLQkJCQkJaWYgKHRoaXNfZXJyIDwgZXJyX21vc3QpIHsKLQkJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7Ci0JCQkJCQkvKiBmb3VuZCBvbiBmaXJzdCBtYXRjaGluZyAqLwotCQkJCQkJZ290byBvdXQ7Ci0JCQkJCX0gZWxzZSBpZiAodGhpc19lcnIgPCBlcnJfbWluKSB7Ci0JCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOwotCQkJCQkJZXJyX21pbiA9IHRoaXNfZXJyOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotb3V0OgotCXJldHVybiB0cnVlOwotfQotCiAvKiBEaXNwbGF5UG9ydCBoYXMgb25seSB0d28gZnJlcXVlbmNpZXMsIDE2Mk1IeiBhbmQgMjcwTUh6ICovCiBzdGF0aWMgYm9vbAogaW50ZWxfZmluZF9wbGxfZzR4X2RwKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCkBAIC0xNDkzLDYgKzE0NzMsMTAgQEAKIAlpbnQgdHJhbnNfdnN5bmNfcmVnID0gKHBpcGUgPT0gMCkgPyBUUkFOU19WU1lOQ19BIDogVFJBTlNfVlNZTkNfQjsKIAl1MzIgdGVtcDsKIAlpbnQgdHJpZXMgPSA1LCBqLCBuOworCXUzMiBwaXBlX2JwYzsKKworCXRlbXAgPSBJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKKwlwaXBlX2JwYyA9IHRlbXAgJiBQSVBFX0JQQ19NQVNLOwogCiAJLyogWFhYOiBXaGVuIG91ciBvdXRwdXRzIGFyZSBhbGwgdW5hd2FyZSBvZiBEUE1TIG1vZGVzIG90aGVyIHRoYW4gb2ZmCiAJICogYW5kIG9uLCB3ZSBzaG91bGQgbWFwIHRob3NlIG1vZGVzIHRvIERSTV9NT0RFX0RQTVNfT0ZGIGluIHRoZSBDUlRDLgpAQCAtMTUyNCw2ICsxNTA4LDEyIEBACiAKIAkJCS8qIGVuYWJsZSBQQ0ggRkRJIFJYIFBMTCwgd2FpdCB3YXJtdXAgcGx1cyBETUkgbGF0ZW5jeSAqLwogCQkJdGVtcCA9IEk5MTVfUkVBRChmZGlfcnhfcmVnKTsKKwkJCS8qCisJCQkgKiBtYWtlIHRoZSBCUEMgaW4gRkRJIFJ4IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGF0IGluCisJCQkgKiBwaXBlY29uZiByZWcuCisJCQkgKi8KKwkJCXRlbXAgJj0gfigweDcgPDwgMTYpOworCQkJdGVtcCB8PSAocGlwZV9icGMgPDwgMTEpOwogCQkJSTkxNV9XUklURShmZGlfcnhfcmVnLCB0ZW1wIHwgRkRJX1JYX1BMTF9FTkFCTEUgfAogCQkJCQlGRElfU0VMX1BDRENMSyB8CiAJCQkJCUZESV9EUF9QT1JUX1dJRFRIX1g0KTsgLyogZGVmYXVsdCA0IGxhbmVzICovCkBAIC0xNjY2LDYgKzE2NTYsMTIgQEAKIAogCQkJLyogZW5hYmxlIFBDSCB0cmFuc2NvZGVyICovCiAJCQl0ZW1wID0gSTkxNV9SRUFEKHRyYW5zY29uZl9yZWcpOworCQkJLyoKKwkJCSAqIG1ha2UgdGhlIEJQQyBpbiB0cmFuc2NvZGVyIGJlIGNvbnNpc3RlbnQgd2l0aAorCQkJICogdGhhdCBpbiBwaXBlY29uZiByZWcuCisJCQkgKi8KKwkJCXRlbXAgJj0gflBJUEVfQlBDX01BU0s7CisJCQl0ZW1wIHw9IHBpcGVfYnBjOwogCQkJSTkxNV9XUklURSh0cmFuc2NvbmZfcmVnLCB0ZW1wIHwgVFJBTlNfRU5BQkxFKTsKIAkJCUk5MTVfUkVBRCh0cmFuc2NvbmZfcmVnKTsKIApAQCAtMTc0NSw2ICsxNzQxLDkgQEAKIAkJSTkxNV9SRUFEKGZkaV90eF9yZWcpOwogCiAJCXRlbXAgPSBJOTE1X1JFQUQoZmRpX3J4X3JlZyk7CisJCS8qIEJQQyBpbiBGREkgcnggaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgaW4gcGlwZWNvbmYgKi8KKwkJdGVtcCAmPSB+KDB4MDcgPDwgMTYpOworCQl0ZW1wIHw9IChwaXBlX2JwYyA8PCAxMSk7CiAJCUk5MTVfV1JJVEUoZmRpX3J4X3JlZywgdGVtcCAmIH5GRElfUlhfRU5BQkxFKTsKIAkJSTkxNV9SRUFEKGZkaV9yeF9yZWcpOwogCkBAIC0xNzg5LDcgKzE3ODgsMTIgQEAKIAkJCQl9CiAJCQl9CiAJCX0KLQorCQl0ZW1wID0gSTkxNV9SRUFEKHRyYW5zY29uZl9yZWcpOworCQkvKiBCUEMgaW4gdHJhbnNjb2RlciBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBpbiBwaXBlY29uZiAqLworCQl0ZW1wICY9IH5QSVBFX0JQQ19NQVNLOworCQl0ZW1wIHw9IHBpcGVfYnBjOworCQlJOTE1X1dSSVRFKHRyYW5zY29uZl9yZWcsIHRlbXApOworCQlJOTE1X1JFQUQodHJhbnNjb25mX3JlZyk7CiAJCXVkZWxheSgxMDApOwogCiAJCS8qIGRpc2FibGUgUENIIERQTEwgKi8KQEAgLTI0NDgsNyArMjQ1Miw3IEBACiAgKiBBIHZhbHVlIG9mIDV1cyBzZWVtcyB0byBiZSBhIGdvb2QgYmFsYW5jZTsgc2FmZSBmb3IgdmVyeSBsb3cgZW5kCiAgKiBwbGF0Zm9ybXMgYnV0IG5vdCBvdmVybHkgYWdncmVzc2l2ZSBvbiBsb3dlciBsYXRlbmN5IGNvbmZpZ3MuCiAgKi8KLWNvbnN0IHN0YXRpYyBpbnQgbGF0ZW5jeV9ucyA9IDUwMDA7CitzdGF0aWMgY29uc3QgaW50IGxhdGVuY3lfbnMgPSA1MDAwOwogCiBzdGF0aWMgaW50IGk5eHhfZ2V0X2ZpZm9fc2l6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGxhbmUpCiB7CkBAIC0yNTU5LDcgKzI1NjMsNyBAQAogCS8qIENhbGMgc3IgZW50cmllcyBmb3Igb25lIHBsYW5lIGNvbmZpZ3MgKi8KIAlpZiAoc3JfaGRpc3BsYXkgJiYgKCFwbGFuZWFfY2xvY2sgfHwgIXBsYW5lYl9jbG9jaykpIHsKIAkJLyogc2VsZi1yZWZyZXNoIGhhcyBtdWNoIGhpZ2hlciBsYXRlbmN5ICovCi0JCWNvbnN0IHN0YXRpYyBpbnQgc3JfbGF0ZW5jeV9ucyA9IDEyMDAwOworCQlzdGF0aWMgY29uc3QgaW50IHNyX2xhdGVuY3lfbnMgPSAxMjAwMDsKIAogCQlzcl9jbG9jayA9IHBsYW5lYV9jbG9jayA/IHBsYW5lYV9jbG9jayA6IHBsYW5lYl9jbG9jazsKIAkJbGluZV90aW1lX3VzID0gKChzcl9oZGlzcGxheSAqIDEwMDApIC8gc3JfY2xvY2spOwpAQCAtMjU5OCw3ICsyNjAyLDcgQEAKIAkvKiBDYWxjIHNyIGVudHJpZXMgZm9yIG9uZSBwbGFuZSBjb25maWdzICovCiAJaWYgKHNyX2hkaXNwbGF5ICYmICghcGxhbmVhX2Nsb2NrIHx8ICFwbGFuZWJfY2xvY2spKSB7CiAJCS8qIHNlbGYtcmVmcmVzaCBoYXMgbXVjaCBoaWdoZXIgbGF0ZW5jeSAqLwotCQljb25zdCBzdGF0aWMgaW50IHNyX2xhdGVuY3lfbnMgPSAxMjAwMDsKKwkJc3RhdGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7CiAKIAkJc3JfY2xvY2sgPSBwbGFuZWFfY2xvY2sgPyBwbGFuZWFfY2xvY2sgOiBwbGFuZWJfY2xvY2s7CiAJCWxpbmVfdGltZV91cyA9ICgoc3JfaGRpc3BsYXkgKiAxMDAwKSAvIHNyX2Nsb2NrKTsKQEAgLTI2NjcsNyArMjY3MSw3IEBACiAJaWYgKEhBU19GV19CTEMoZGV2KSAmJiBzcl9oZGlzcGxheSAmJgogCSAgICAoIXBsYW5lYV9jbG9jayB8fCAhcGxhbmViX2Nsb2NrKSkgewogCQkvKiBzZWxmLXJlZnJlc2ggaGFzIG11Y2ggaGlnaGVyIGxhdGVuY3kgKi8KLQkJY29uc3Qgc3RhdGljIGludCBzcl9sYXRlbmN5X25zID0gNjAwMDsKKwkJc3RhdGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25zID0gNjAwMDsKIAogCQlzcl9jbG9jayA9IHBsYW5lYV9jbG9jayA/IHBsYW5lYV9jbG9jayA6IHBsYW5lYl9jbG9jazsKIAkJbGluZV90aW1lX3VzID0gKChzcl9oZGlzcGxheSAqIDEwMDApIC8gc3JfY2xvY2spOwpAQCAtMjk2OSw2ICsyOTczLDE4IEBACiAKIAkJLyogZGV0ZXJtaW5lIHBhbmVsIGNvbG9yIGRlcHRoICovCiAJCXRlbXAgPSBJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKKwkJdGVtcCAmPSB+UElQRV9CUENfTUFTSzsKKwkJaWYgKGlzX2x2ZHMpIHsKKwkJCWludCBsdmRzX3JlZyA9IEk5MTVfUkVBRChQQ0hfTFZEUyk7CisJCQkvKiB0aGUgQlBDIHdpbGwgYmUgNiBpZiBpdCBpcyAxOC1iaXQgTFZEUyBwYW5lbCAqLworCQkJaWYgKChsdmRzX3JlZyAmIExWRFNfQTNfUE9XRVJfTUFTSykgPT0gTFZEU19BM19QT1dFUl9VUCkKKwkJCQl0ZW1wIHw9IFBJUEVfOEJQQzsKKwkJCWVsc2UKKwkJCQl0ZW1wIHw9IFBJUEVfNkJQQzsKKwkJfSBlbHNlCisJCQl0ZW1wIHw9IFBJUEVfOEJQQzsKKwkJSTkxNV9XUklURShwaXBlY29uZl9yZWcsIHRlbXApOworCQlJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKIAogCQlzd2l0Y2ggKHRlbXAgJiBQSVBFX0JQQ19NQVNLKSB7CiAJCWNhc2UgUElQRV84QlBDOgpAQCAtMzE5NSw3ICszMjExLDIwIEBACiAJCSAqIGFwcHJvcHJpYXRlbHkgaGVyZSwgYnV0IHdlIG5lZWQgdG8gbG9vayBtb3JlIHRob3JvdWdobHkgaW50byBob3cKIAkJICogcGFuZWxzIGJlaGF2ZSBpbiB0aGUgdHdvIG1vZGVzLgogCQkgKi8KLQorCQkvKiBzZXQgdGhlIGRpdGhlcmluZyBmbGFnICovCisJCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCQlpZiAoZGV2X3ByaXYtPmx2ZHNfZGl0aGVyKSB7CisJCQkJaWYgKElTX0lST05MQUtFKGRldikpCisJCQkJCXBpcGVjb25mIHw9IFBJUEVfRU5BQkxFX0RJVEhFUjsKKwkJCQllbHNlCisJCQkJCWx2ZHMgfD0gTFZEU19FTkFCTEVfRElUSEVSOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwkJCQkJcGlwZWNvbmYgJj0gflBJUEVfRU5BQkxFX0RJVEhFUjsKKwkJCQllbHNlCisJCQkJCWx2ZHMgJj0gfkxWRFNfRU5BQkxFX0RJVEhFUjsKKwkJCX0KKwkJfQogCQlJOTE1X1dSSVRFKGx2ZHNfcmVnLCBsdmRzKTsKIAkJSTkxNV9SRUFEKGx2ZHNfcmVnKTsKIAl9CkBAIC0zMzg1LDcgKzM0MTQsNyBAQAogCiAJLyogd2Ugb25seSBuZWVkIHRvIHBpbiBpbnNpZGUgR1RUIGlmIGN1cnNvciBpcyBub24tcGh5ICovCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlmICghZGV2X3ByaXYtPmN1cnNvcl9uZWVkc19waHlzaWNhbCkgeworCWlmICghZGV2X3ByaXYtPmluZm8tPmN1cnNvcl9uZWVkc19waHlzaWNhbCkgewogCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKGJvLCBQQUdFX1NJWkUpOwogCQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gY3Vyc29yIGJvXG4iKTsKQEAgLTM0MjAsNyArMzQ0OSw3IEBACiAJSTkxNV9XUklURShiYXNlLCBhZGRyKTsKIAogCWlmIChpbnRlbF9jcnRjLT5jdXJzb3JfYm8pIHsKLQkJaWYgKGRldl9wcml2LT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpIHsKKwkJaWYgKGRldl9wcml2LT5pbmZvLT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpIHsKIAkJCWlmIChpbnRlbF9jcnRjLT5jdXJzb3JfYm8gIT0gYm8pCiAJCQkJaTkxNV9nZW1fZGV0YWNoX3BoeXNfb2JqZWN0KGRldiwgaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKIAkJfSBlbHNlCkBAIC0zNzc5LDEyNSArMzgwOCw2IEBACiAJcXVldWVfd29yayhkZXZfcHJpdi0+d3EsICZkZXZfcHJpdi0+aWRsZV93b3JrKTsKIH0KIAotdm9pZCBpbnRlbF9pbmNyZWFzZV9yZW5kZXJjbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHNjaGVkdWxlKQotewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKElTX0lST05MQUtFKGRldikpCi0JCXJldHVybjsKLQotCWlmICghZGV2X3ByaXYtPnJlbmRlcl9yZWNsb2NrX2F2YWlsKSB7Ci0JCURSTV9ERUJVR19EUklWRVIoIm5vdCByZWNsb2NraW5nIHJlbmRlciBjbG9ja1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZXN0b3JlIHJlbmRlciBjbG9jayBmcmVxdWVuY3kgdG8gb3JpZ2luYWwgdmFsdWUgKi8KLQlpZiAoSVNfRzRYKGRldikgfHwgSVNfSTlYWChkZXYpKQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZGV2X3ByaXYtPm9yaWdfY2xvY2spOwotCWVsc2UgaWYgKElTX0k4NVgoZGV2KSkKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgSFBMTENDLCBkZXZfcHJpdi0+b3JpZ19jbG9jayk7Ci0JRFJNX0RFQlVHX0RSSVZFUigiaW5jcmVhc2luZyByZW5kZXIgY2xvY2sgZnJlcXVlbmN5XG4iKTsKLQotCS8qIFNjaGVkdWxlIGRvd25jbG9jayAqLwotCWlmIChzY2hlZHVsZSkKLQkJbW9kX3RpbWVyKCZkZXZfcHJpdi0+aWRsZV90aW1lciwgamlmZmllcyArCi0JCQkgIG1zZWNzX3RvX2ppZmZpZXMoR1BVX0lETEVfVElNRU9VVCkpOwotfQotCi12b2lkIGludGVsX2RlY3JlYXNlX3JlbmRlcmNsb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKLQkJcmV0dXJuOwotCi0JaWYgKCFkZXZfcHJpdi0+cmVuZGVyX3JlY2xvY2tfYXZhaWwpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigibm90IHJlY2xvY2tpbmcgcmVuZGVyIGNsb2NrXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChJU19HNFgoZGV2KSkgewotCQl1MTYgZ2NmZ2M7Ci0KLQkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOwotCi0JCS8qIERvd24gdG8gbWluaW11bS4uLiAqLwotCQlnY2ZnYyAmPSB+R000NV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSzsKLQkJZ2NmZ2MgfD0gR000NV9HQ19SRU5ERVJfQ0xPQ0tfMjY2X01IWjsKLQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOwotCX0gZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkgewotCQl1MTYgZ2NmZ2M7Ci0KLQkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOwotCi0JCS8qIERvd24gdG8gbWluaW11bS4uLiAqLwotCQlnY2ZnYyAmPSB+STk2NV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSzsKLQkJZ2NmZ2MgfD0gSTk2NV9HQ19SRU5ERVJfQ0xPQ0tfMjY3X01IWjsKLQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOwotCX0gZWxzZSBpZiAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSkgewotCQl1MTYgZ2NmZ2M7Ci0KLQkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOwotCi0JCS8qIERvd24gdG8gbWluaW11bS4uLiAqLwotCQlnY2ZnYyAmPSB+STk0NV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSzsKLQkJZ2NmZ2MgfD0gSTk0NV9HQ19SRU5ERVJfQ0xPQ0tfMTY2X01IWjsKLQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOwotCX0gZWxzZSBpZiAoSVNfSTkxNUcoZGV2KSkgewotCQl1MTYgZ2NmZ2M7Ci0KLQkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOwotCi0JCS8qIERvd24gdG8gbWluaW11bS4uLiAqLwotCQlnY2ZnYyAmPSB+STkxNV9HQ19SRU5ERVJfQ0xPQ0tfTUFTSzsKLQkJZ2NmZ2MgfD0gSTkxNV9HQ19SRU5ERVJfQ0xPQ0tfMTY2X01IWjsKLQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOwotCX0gZWxzZSBpZiAoSVNfSTg1WChkZXYpKSB7Ci0JCXUxNiBocGxsY2M7Ci0KLQkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEhQTExDQywgJmhwbGxjYyk7Ci0KLQkJLyogVXAgdG8gbWF4aW11bS4uLiAqLwotCQlocGxsY2MgJj0gfkdDX0NMT0NLX0NPTlRST0xfTUFTSzsKLQkJaHBsbGNjIHw9IEdDX0NMT0NLXzEzM18yMDA7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgSFBMTENDLCBocGxsY2MpOwotCX0KLQlEUk1fREVCVUdfRFJJVkVSKCJkZWNyZWFzaW5nIHJlbmRlciBjbG9jayBmcmVxdWVuY3lcbiIpOwotfQotCi0vKiBOb3RlIHRoYXQgbm8gaW5jcmVhc2UgZnVuY3Rpb24gaXMgbmVlZGVkIGZvciB0aGlzIC0gaW5jcmVhc2VfcmVuZGVyY2xvY2soKQotICogIHdpbGwgYWxzbyByZXdyaXRlIHRoZXNlIGJpdHMKLSAqLwotdm9pZCBpbnRlbF9kZWNyZWFzZV9kaXNwbGF5Y2xvY2soc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKLQkJcmV0dXJuOwotCi0JaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikgfHwgSVNfSTkxNUcoZGV2KSB8fAotCSAgICBJU19JOTE1R00oZGV2KSkgewotCQl1MTYgZ2NmZ2M7Ci0KLQkJLyogQWRqdXN0IHJlbmRlciBjbG9jay4uLiAqLwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOwotCi0JCS8qIERvd24gdG8gbWluaW11bS4uLiAqLwotCQlnY2ZnYyAmPSB+MHhmMDsKLQkJZ2NmZ2MgfD0gMHg4MDsKLQotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgZ2NmZ2MpOwotCX0KLX0KLQogI2RlZmluZSBDUlRDX0lETEVfVElNRU9VVCAxMDAwIC8qIG1zICovCiAKIHN0YXRpYyB2b2lkIGludGVsX2NydGNfaWRsZV90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKQEAgLTQwMTEsMTIgKzM5MjEsNiBAQAogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JLyogR1BVIGlzbid0IHByb2Nlc3NpbmcsIGRvd25jbG9jayBpdC4gKi8KLQlpZiAoIWRldl9wcml2LT5idXN5KSB7Ci0JCWludGVsX2RlY3JlYXNlX3JlbmRlcmNsb2NrKGRldik7Ci0JCWludGVsX2RlY3JlYXNlX2Rpc3BsYXljbG9jayhkZXYpOwotCX0KLQogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CiAJCS8qIFNraXAgaW5hY3RpdmUgQ1JUQ3MgKi8KIAkJaWYgKCFjcnRjLT5mYikKQEAgLTQwNTAsMTMgKzM5NTQsMTEgQEAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCiAJCXJldHVybjsKIAotCWlmICghZGV2X3ByaXYtPmJ1c3kpIHsKKwlpZiAoIWRldl9wcml2LT5idXN5KQogCQlkZXZfcHJpdi0+YnVzeSA9IHRydWU7Ci0JCWludGVsX2luY3JlYXNlX3JlbmRlcmNsb2NrKGRldiwgdHJ1ZSk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1vZF90aW1lcigmZGV2X3ByaXYtPmlkbGVfdGltZXIsIGppZmZpZXMgKwogCQkJICBtc2Vjc190b19qaWZmaWVzKEdQVV9JRExFX1RJTUVPVVQpKTsKLQl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlpZiAoIWNydGMtPmZiKQpAQCAtNDQwMCwyOSArNDMwMiw0MyBAQAogCQlib29sIGZvdW5kID0gZmFsc2U7CiAKIAkJaWYgKEk5MTVfUkVBRChTRFZPQikgJiBTRFZPX0RFVEVDVEVEKSB7CisJCQlEUk1fREVCVUdfS01TKCJwcm9iaW5nIFNEVk9CXG4iKTsKIAkJCWZvdW5kID0gaW50ZWxfc2R2b19pbml0KGRldiwgU0RWT0IpOwotCQkJaWYgKCFmb3VuZCAmJiBTVVBQT1JUU19JTlRFR1JBVEVEX0hETUkoZGV2KSkKKwkJCWlmICghZm91bmQgJiYgU1VQUE9SVFNfSU5URUdSQVRFRF9IRE1JKGRldikpIHsKKwkJCQlEUk1fREVCVUdfS01TKCJwcm9iaW5nIEhETUkgb24gU0RWT0JcbiIpOwogCQkJCWludGVsX2hkbWlfaW5pdChkZXYsIFNEVk9CKTsKKwkJCX0KIAotCQkJaWYgKCFmb3VuZCAmJiBTVVBQT1JUU19JTlRFR1JBVEVEX0RQKGRldikpCisJCQlpZiAoIWZvdW5kICYmIFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KSkgeworCQkJCURSTV9ERUJVR19LTVMoInByb2JpbmcgRFBfQlxuIik7CiAJCQkJaW50ZWxfZHBfaW5pdChkZXYsIERQX0IpOworCQkJfQogCQl9CiAKIAkJLyogQmVmb3JlIEc0WCBTRFZPQyBkb2Vzbid0IGhhdmUgaXRzIG93biBkZXRlY3QgcmVnaXN0ZXIgKi8KIAotCQlpZiAoSTkxNV9SRUFEKFNEVk9CKSAmIFNEVk9fREVURUNURUQpCisJCWlmIChJOTE1X1JFQUQoU0RWT0IpICYgU0RWT19ERVRFQ1RFRCkgeworCQkJRFJNX0RFQlVHX0tNUygicHJvYmluZyBTRFZPQ1xuIik7CiAJCQlmb3VuZCA9IGludGVsX3Nkdm9faW5pdChkZXYsIFNEVk9DKTsKKwkJfQogCiAJCWlmICghZm91bmQgJiYgKEk5MTVfUkVBRChTRFZPQykgJiBTRFZPX0RFVEVDVEVEKSkgewogCi0JCQlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9IRE1JKGRldikpCisJCQlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9IRE1JKGRldikpIHsKKwkJCQlEUk1fREVCVUdfS01TKCJwcm9iaW5nIEhETUkgb24gU0RWT0NcbiIpOwogCQkJCWludGVsX2hkbWlfaW5pdChkZXYsIFNEVk9DKTsKLQkJCWlmIChTVVBQT1JUU19JTlRFR1JBVEVEX0RQKGRldikpCisJCQl9CisJCQlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpKSB7CisJCQkJRFJNX0RFQlVHX0tNUygicHJvYmluZyBEUF9DXG4iKTsKIAkJCQlpbnRlbF9kcF9pbml0KGRldiwgRFBfQyk7CisJCQl9CiAJCX0KIAotCQlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpICYmIChJOTE1X1JFQUQoRFBfRCkgJiBEUF9ERVRFQ1RFRCkpCisJCWlmIChTVVBQT1JUU19JTlRFR1JBVEVEX0RQKGRldikgJiYKKwkJICAgIChJOTE1X1JFQUQoRFBfRCkgJiBEUF9ERVRFQ1RFRCkpIHsKKwkJCURSTV9ERUJVR19LTVMoInByb2JpbmcgRFBfRFxuIik7CiAJCQlpbnRlbF9kcF9pbml0KGRldiwgRFBfRCk7CisJCX0KIAl9IGVsc2UgaWYgKElTX0k4WFgoZGV2KSkKIAkJaW50ZWxfZHZvX2luaXQoZGV2KTsKIApAQCAtNDUyNyw2ICs0NDQzLDQyIEBACiAJLmZiX2NoYW5nZWQgPSBpbnRlbGZiX3Byb2JlLAogfTsKIAorc3RhdGljIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqCitpbnRlbF9hbGxvY19wb3dlcl9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwd3JjdHg7CisJaW50IHJldDsKKworCXB3cmN0eCA9IGRybV9nZW1fb2JqZWN0X2FsbG9jKGRldiwgNDA5Nik7CisJaWYgKCFwd3JjdHgpIHsKKwkJRFJNX0RFQlVHKCJmYWlsZWQgdG8gYWxsb2MgcG93ZXIgY29udGV4dCwgUkM2IGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ocHdyY3R4LCA0MDk2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBwb3dlciBjb250ZXh0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfdW5yZWY7CisJfQorCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHB3cmN0eCwgMSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXQtZG9tYWluIG9uIHBvd2VyIGNvbnRleHQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl91bnBpbjsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gcHdyY3R4OworCitlcnJfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGluKHB3cmN0eCk7CitlcnJfdW5yZWY6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UocHdyY3R4KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gTlVMTDsKK30KKwogdm9pZCBpbnRlbF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC00NTc5LDQyICs0NTMxLDI3IEBACiAJICogR1BVIGNhbiBhdXRvbWF0aWNhbGx5IHBvd2VyIGRvd24gdGhlIHJlbmRlciB1bml0IGlmIGdpdmVuIGEgcGFnZQogCSAqIHRvIHNhdmUgc3RhdGUuCiAJICovCi0JaWYgKEk5MTVfSEFTX1JDNihkZXYpKSB7Ci0JCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqcHdyY3R4OwotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0JCWludCByZXQ7CisJaWYgKEk5MTVfSEFTX1JDNihkZXYpICYmIGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gTlVMTDsKIAogCQlpZiAoZGV2X3ByaXYtPnB3cmN0eCkgewogCQkJb2JqX3ByaXYgPSBkZXZfcHJpdi0+cHdyY3R4LT5kcml2ZXJfcHJpdmF0ZTsKIAkJfSBlbHNlIHsKLQkJCXB3cmN0eCA9IGRybV9nZW1fb2JqZWN0X2FsbG9jKGRldiwgNDA5Nik7Ci0JCQlpZiAoIXB3cmN0eCkgewotCQkJCURSTV9ERUJVRygiZmFpbGVkIHRvIGFsbG9jIHBvd2VyIGNvbnRleHQsICIKLQkJCQkJICAiUkM2IGRpc2FibGVkXG4iKTsKLQkJCQlnb3RvIG91dDsKKwkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqcHdyY3R4OworCisJCQlwd3JjdHggPSBpbnRlbF9hbGxvY19wb3dlcl9jb250ZXh0KGRldik7CisJCQlpZiAocHdyY3R4KSB7CisJCQkJZGV2X3ByaXYtPnB3cmN0eCA9IHB3cmN0eDsKKwkJCQlvYmpfcHJpdiA9IHB3cmN0eC0+ZHJpdmVyX3ByaXZhdGU7CiAJCQl9Ci0KLQkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ocHdyY3R4LCA0MDk2KTsKLQkJCWlmIChyZXQpIHsKLQkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gcG93ZXIgY29udGV4dDogJWRcbiIsCi0JCQkJCSAgcmV0KTsKLQkJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShwd3JjdHgpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ocHdyY3R4LCAxKTsKLQotCQkJZGV2X3ByaXYtPnB3cmN0eCA9IHB3cmN0eDsKLQkJCW9ial9wcml2ID0gcHdyY3R4LT5kcml2ZXJfcHJpdmF0ZTsKIAkJfQogCi0JCUk5MTVfV1JJVEUoUFdSQ1RYQSwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgfCBQV1JDVFhfRU4pOwotCQlJOTE1X1dSSVRFKE1DSEJBUl9SRU5ERVJfU1RBTkRCWSwKLQkJCSAgIEk5MTVfUkVBRChNQ0hCQVJfUkVOREVSX1NUQU5EQlkpICYgflJDWF9TV19FWElUKTsKKwkJaWYgKG9ial9wcml2KSB7CisJCQlJOTE1X1dSSVRFKFBXUkNUWEEsIG9ial9wcml2LT5ndHRfb2Zmc2V0IHwgUFdSQ1RYX0VOKTsKKwkJCUk5MTVfV1JJVEUoTUNIQkFSX1JFTkRFUl9TVEFOREJZLAorCQkJCSAgIEk5MTVfUkVBRChNQ0hCQVJfUkVOREVSX1NUQU5EQlkpICYgflJDWF9TV19FWElUKTsKKwkJfQogCX0KLQotb3V0OgotCXJldHVybjsKIH0KIAogLyogU2V0IHVwIGNoaXAgc3BlY2lmaWMgZGlzcGxheSBmdW5jdGlvbnMgKi8KQEAgLTQ3NzAsNyArNDcwNyw2IEBACiAJCWRlbF90aW1lcl9zeW5jKCZpbnRlbF9jcnRjLT5pZGxlX3RpbWVyKTsKIAl9CiAKLQlpbnRlbF9pbmNyZWFzZV9yZW5kZXJjbG9jayhkZXYsIGZhbHNlKTsKIAlkZWxfdGltZXJfc3luYygmZGV2X3ByaXYtPmlkbGVfdGltZXIpOwogCiAJaWYgKGRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfZmJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggNGU3YWE4Yi4uMTM0OWQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC0xNDAyLDE0ICsxNDAyLDIwIEBACiAJCQlicmVhazsKIAkJY2FzZSBEUF9COgogCQljYXNlIFBDSF9EUF9COgorCQkJZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgfD0KKwkJCQlIRE1JQl9IT1RQTFVHX0lOVF9TVEFUVVM7CiAJCQluYW1lID0gIkRQRERDLUIiOwogCQkJYnJlYWs7CiAJCWNhc2UgRFBfQzoKIAkJY2FzZSBQQ0hfRFBfQzoKKwkJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9CisJCQkJSERNSUNfSE9UUExVR19JTlRfU1RBVFVTOwogCQkJbmFtZSA9ICJEUEREQy1DIjsKIAkJCWJyZWFrOwogCQljYXNlIERQX0Q6CiAJCWNhc2UgUENIX0RQX0Q6CisJCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PQorCQkJCUhETUlEX0hPVFBMVUdfSU5UX1NUQVRVUzsKIAkJCW5hbWUgPSAiRFBEREMtRCI7CiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKaW5kZXggZjA0ZGJiZS4uMDY0MzE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwpAQCAtMzAzLDIxICszMDMsMjYgQEAKIAlpZiAoc2R2b3hfcmVnID09IFNEVk9CKSB7CiAJCWludGVsX291dHB1dC0+Y2xvbmVfbWFzayA9ICgxIDw8IElOVEVMX0hETUlCX0NMT05FX0JJVCk7CiAJCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPRSwgIkhETUlCIik7CisJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9IEhETUlCX0hPVFBMVUdfSU5UX1NUQVRVUzsKIAl9IGVsc2UgaWYgKHNkdm94X3JlZyA9PSBTRFZPQykgewogCQlpbnRlbF9vdXRwdXQtPmNsb25lX21hc2sgPSAoMSA8PCBJTlRFTF9IRE1JQ19DTE9ORV9CSVQpOwogCQlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0QsICJIRE1JQyIpOworCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PSBIRE1JQ19IT1RQTFVHX0lOVF9TVEFUVVM7CiAJfSBlbHNlIGlmIChzZHZveF9yZWcgPT0gSERNSUIpIHsKIAkJaW50ZWxfb3V0cHV0LT5jbG9uZV9tYXNrID0gKDEgPDwgSU5URUxfSERNSURfQ0xPTkVfQklUKTsKIAkJaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gaW50ZWxfaTJjX2NyZWF0ZShkZXYsIFBDSF9HUElPRSwKIAkJCQkJCQkJIkhETUlCIik7CisJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9IEhETUlCX0hPVFBMVUdfSU5UX1NUQVRVUzsKIAl9IGVsc2UgaWYgKHNkdm94X3JlZyA9PSBIRE1JQykgewogCQlpbnRlbF9vdXRwdXQtPmNsb25lX21hc2sgPSAoMSA8PCBJTlRFTF9IRE1JRV9DTE9ORV9CSVQpOwogCQlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgUENIX0dQSU9ELAogCQkJCQkJCQkiSERNSUMiKTsKKwkJZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgfD0gSERNSUNfSE9UUExVR19JTlRfU1RBVFVTOwogCX0gZWxzZSBpZiAoc2R2b3hfcmVnID09IEhETUlEKSB7CiAJCWludGVsX291dHB1dC0+Y2xvbmVfbWFzayA9ICgxIDw8IElOVEVMX0hETUlGX0NMT05FX0JJVCk7CiAJCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBQQ0hfR1BJT0YsCiAJCQkJCQkJCSJIRE1JRCIpOworCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PSBIRE1JRF9IT1RQTFVHX0lOVF9TVEFUVVM7CiAJfQogCWlmICghaW50ZWxfb3V0cHV0LT5kZGNfYnVzKQogCQlnb3RvIGVycl9jb25uZWN0b3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggMzExOGNlMi4uZjRiNGFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNjA4LDYgKzYwOCwxMyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBc3BpcmUgb25lIiksCiAJCX0sCiAJfSwKKwl7CisJCS5pZGVudCA9ICJQQy04MTAwNSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUFMQVRBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBDLTgxMDA1IiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKQEAgLTY3OSw3ICs2ODYsMTQgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQogCQljb250YWluZXJfb2YobmIsIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLCBsaWRfbm90aWZpZXIpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBkZXZfcHJpdi0+aW50X2x2ZHNfY29ubmVjdG9yOwogCisJLyoKKwkgKiBjaGVjayBhbmQgdXBkYXRlIHRoZSBzdGF0dXMgb2YgTFZEUyBjb25uZWN0b3IgYWZ0ZXIgcmVjZWl2aW5nCisJICogdGhlIExJRCBub2ZpY2F0aW9uIGV2ZW50LgorCSAqLworCWlmIChjb25uZWN0b3IpCisJCWNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yLT5mdW5jcy0+ZGV0ZWN0KGNvbm5lY3Rvcik7CiAJaWYgKCFhY3BpX2xpZF9vcGVuKCkpIHsKIAkJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMTsKIAkJcmV0dXJuIE5PVElGWV9PSzsKQEAgLTg1NCw2NSArODY4LDYgQEAKIAl7IH0JLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLSNpZmRlZiBDT05GSUdfQUNQSQotLyoKLSAqIGNoZWNrX2xpZF9kZXZpY2UgLS0gY2hlY2sgd2hldGhlciBAaGFuZGxlIGlzIGFuIEFDUEkgTElEIGRldmljZS4KLSAqIEBoYW5kbGU6IEFDUEkgZGV2aWNlIGhhbmRsZQotICogQGxldmVsIDogZGVwdGggaW4gdGhlIEFDUEkgbmFtZXNwYWNlIHRyZWUKLSAqIEBjb250ZXh0OiB0aGUgbnVtYmVyIG9mIExJRCBkZXZpY2Ugd2hlbiB3ZSBmaW5kIHRoZSBkZXZpY2UKLSAqIEBydjogYSByZXR1cm4gdmFsdWUgdG8gZmlsbCBpZiBkZXNpcmVkIChOb3QgdXNlKQotICovCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWNoZWNrX2xpZF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbGV2ZWwsIHZvaWQgKmNvbnRleHQsCi0JCQl2b2lkICoqcmV0dXJuX3ZhbHVlKQotewotCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXY7Ci0JaW50ICpsaWRfcHJlc2VudCA9IGNvbnRleHQ7Ci0KLQlhY3BpX2RldiA9IE5VTEw7Ci0JLyogR2V0IHRoZSBhY3BpIGRldmljZSBmb3IgZGV2aWNlIGhhbmRsZSAqLwotCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmFjcGlfZGV2KSB8fCAhYWNwaV9kZXYpIHsKLQkJLyogSWYgdGhlcmUgaXMgbm8gQUNQSSBkZXZpY2UgZm9yIGhhbmRsZSwgcmV0dXJuICovCi0JCXJldHVybiBBRV9PSzsKLQl9Ci0KLQlpZiAoIXN0cm5jbXAoYWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSwgIlBOUDBDMEQiLCA3KSkKLQkJKmxpZF9wcmVzZW50ID0gMTsKLQotCXJldHVybiBBRV9PSzsKLX0KLQotLyoqCi0gKiBjaGVjayB3aGV0aGVyIHRoZXJlIGV4aXN0cyB0aGUgQUNQSSBMSUQgZGV2aWNlIGJ5IGVudW1lcmF0aW5nIHRoZSBBQ1BJCi0gKiBkZXZpY2UgdHJlZS4KLSAqLwotc3RhdGljIGludCBpbnRlbF9saWRfcHJlc2VudCh2b2lkKQotewotCWludCBsaWRfcHJlc2VudCA9IDA7Ci0KLQlpZiAoYWNwaV9kaXNhYmxlZCkgewotCQkvKiBJZiBBQ1BJIGlzIGRpc2FibGVkLCB0aGVyZSBpcyBubyBBQ1BJIGRldmljZSB0cmVlIHRvCi0JCSAqIGNoZWNrLCBzbyBhc3N1bWUgdGhlIExJRCBkZXZpY2Ugd291bGQgaGF2ZSBiZWVuIHByZXNlbnQuCi0JCSAqLwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCi0JCQkJQUNQSV9VSU5UMzJfTUFYLAotCQkJCWNoZWNrX2xpZF9kZXZpY2UsIE5VTEwsICZsaWRfcHJlc2VudCwgTlVMTCk7Ci0KLQlyZXR1cm4gbGlkX3ByZXNlbnQ7Ci19Ci0jZWxzZQotc3RhdGljIGludCBpbnRlbF9saWRfcHJlc2VudCh2b2lkKQotewotCS8qIEluIHRoZSBhYnNlbmNlIG9mIEFDUEkgYnVpbHQgaW4sIGFzc3VtZSB0aGF0IHRoZSBMSUQgZGV2aWNlIHdvdWxkCi0JICogaGF2ZSBiZWVuIHByZXNlbnQuCi0JICovCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQogLyoqCiAgKiBpbnRlbF9maW5kX2x2ZHNfZG93bmNsb2NrIC0gZmluZCB0aGUgcmVkdWNlZCBkb3duY2xvY2sgZm9yIExWRFMgaW4gRURJRAogICogQGRldjogZHJtIGRldmljZQpAQCAtMTAzMSwxMiArOTg2LDggQEAKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShpbnRlbF9ub19sdmRzKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBBc3N1bWUgTFZEUyBpcyBwcmVzZW50IGlmIHRoZXJlJ3MgYW4gQUNQSSBsaWQgZGV2aWNlIG9yIGlmIHRoZQotCSAqIGRldmljZSBpcyBwcmVzZW50IGluIHRoZSBWQlQuCi0JICovCi0JaWYgKCFsdmRzX2lzX3ByZXNlbnRfaW5fdmJ0KGRldikgJiYgIWludGVsX2xpZF9wcmVzZW50KCkpIHsKLQkJRFJNX0RFQlVHX0tNUygiTFZEUyBpcyBub3QgcHJlc2VudCBpbiBWQlQgYW5kIG5vIGxpZCBkZXRlY3RlZFxuIik7CisJaWYgKCFsdmRzX2lzX3ByZXNlbnRfaW5fdmJ0KGRldikpIHsKKwkJRFJNX0RFQlVHX0tNUygiTFZEUyBpcyBub3QgcHJlc2VudCBpbiBWQlRcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTgwLDYgKzExMzEsOCBAQAogCQlEUk1fREVCVUdfS01TKCJsaWQgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCWRldl9wcml2LT5saWRfbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IE5VTEw7CiAJfQorCS8qIGtlZXAgdGhlIExWRFMgY29ubmVjdG9yICovCisJZGV2X3ByaXYtPmludF9sdmRzX2Nvbm5lY3RvciA9IGNvbm5lY3RvcjsKIAlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOwogCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCmluZGV4IDI0YTNkYzkuLmRlNTE0NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKQEAgLTI2NjIsNiArMjY2Miw3IEBACiAKIGJvb2wgaW50ZWxfc2R2b19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBvdXRwdXRfZGV2aWNlKQogeworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQ7CiAJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2OwpAQCAtMjcwOCwxMCArMjcwOSwxMiBAQAogCQlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0UsICJTRFZPQiBEREMgQlVTIik7CiAJCXNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0EsCiAJCQkJCQkiU0RWT0IvVkdBIEREQyBCVVMiKTsKKwkJZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgfD0gU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTOwogCX0gZWxzZSB7CiAJCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPRSwgIlNEVk9DIEREQyBCVVMiKTsKIAkJc2R2b19wcml2LT5hbmFsb2dfZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPQSwKIAkJCQkJCSJTRFZPQy9WR0EgRERDIEJVUyIpOworCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PSBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVM7CiAJfQogCiAJaWYgKGludGVsX291dHB1dC0+ZGRjX2J1cyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKaW5kZXggNTUyZWMxMS4uMWQ1YjliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCkBAIC0xODQwLDYgKzE4NDAsOCBAQAogCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwKIAkJCQkgICBkZXYtPm1vZGVfY29uZmlnLnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHksCiAJCQkJICAgdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9CT1RUT01dKTsKKworCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9IFRWX0hPVFBMVUdfSU5UX1NUQVRVUzsKIG91dDoKIAlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYwppbmRleCA5N2VlNTY2Li5kZGZlMTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYwpAQCAtNjgsNyArNjgsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gZHJtX21tYXAsCiAJCS5wb2xsID0gZHJtX3BvbGwsCiAJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMKaW5kZXggMzBkMDA0Ny4uYzFmODc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pb2MzMi5jCkBAIC0xMDAsOCArMTAwLDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfTUdBX0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX01HQV9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9nZXRwYXJhbTMyIHsKQEAgLTEyNSw4ICsxMjQsNyBAQAogCQkJICAmZ2V0cGFyYW0tPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX01HQV9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpZ2V0cGFyYW0pOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX01HQV9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpZ2V0cGFyYW0pOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWdhX2RybV9ib290c3RyYXAzMiB7CkBAIC0xNjYsOCArMTY0LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihkbWFfYm9vdHN0cmFwMzIuYWdwX3NpemUsICZkbWFfYm9vdHN0cmFwLT5hZ3Bfc2l6ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAsCisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9NR0FfRE1BX0JPT1RTVFJBUCwKIAkJCSh1bnNpZ25lZCBsb25nKWRtYV9ib290c3RyYXApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMjAsMTIgKzIxNywxMCBAQAogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UgKyBEUk1fQVJSQVlfU0laRShtZ2FfY29tcGF0X2lvY3RscykpCiAJCWZuID0gbWdhX2NvbXBhdF9pb2N0bHNbbnIgLSBEUk1fQ09NTUFORF9CQVNFXTsKIAotCWxvY2tfa2VybmVsKCk7CQkvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKSAoZmlscCwgY21kLCBhcmcpOwogCWVsc2UKLQkJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQppbmRleCAxZDkwZDRkLi40OGMyOTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZQpAQCAtOCwxNCArOCwxNSBAQAogICAgICAgICAgICAgIG5vdXZlYXVfc2dkbWEubyBub3V2ZWF1X2RtYS5vIFwKICAgICAgICAgICAgICBub3V2ZWF1X2JvLm8gbm91dmVhdV9mZW5jZS5vIG5vdXZlYXVfZ2VtLm8gbm91dmVhdV90dG0ubyBcCiAgICAgICAgICAgICAgbm91dmVhdV9ody5vIG5vdXZlYXVfY2FsYy5vIG5vdXZlYXVfYmlvcy5vIG5vdXZlYXVfaTJjLm8gXAotCSAgICAgbm91dmVhdV9kaXNwbGF5Lm8gbm91dmVhdV9jb25uZWN0b3IubyBub3V2ZWF1X2ZiY29uLm8gXAotCSAgICAgbm91dmVhdV9kcC5vIFwKKyAgICAgICAgICAgICBub3V2ZWF1X2Rpc3BsYXkubyBub3V2ZWF1X2Nvbm5lY3Rvci5vIG5vdXZlYXVfZmJjb24ubyBcCisgICAgICAgICAgICAgbm91dmVhdV9kcC5vIG5vdXZlYXVfZ3JjdHgubyBcCiAgICAgICAgICAgICAgbnYwNF90aW1lci5vIFwKICAgICAgICAgICAgICBudjA0X21jLm8gbnY0MF9tYy5vIG52NTBfbWMubyBcCiAgICAgICAgICAgICAgbnYwNF9mYi5vIG52MTBfZmIubyBudjQwX2ZiLm8gXAogICAgICAgICAgICAgIG52MDRfZmlmby5vIG52MTBfZmlmby5vIG52NDBfZmlmby5vIG52NTBfZmlmby5vIFwKICAgICAgICAgICAgICBudjA0X2dyYXBoLm8gbnYxMF9ncmFwaC5vIG52MjBfZ3JhcGgubyBcCiAgICAgICAgICAgICAgbnY0MF9ncmFwaC5vIG52NTBfZ3JhcGgubyBcCisgICAgICAgICAgICAgbnY0MF9ncmN0eC5vIFwKICAgICAgICAgICAgICBudjA0X2luc3RtZW0ubyBudjUwX2luc3RtZW0ubyBcCiAgICAgICAgICAgICAgbnY1MF9jcnRjLm8gbnY1MF9kYWMubyBudjUwX3Nvci5vIFwKICAgICAgICAgICAgICBudjUwX2N1cnNvci5vIG52NTBfZGlzcGxheS5vIG52NTBfZmJjb24ubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCmluZGV4IDVlZWM1ZWQuLmJhMTQzOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCkBAIC0xODEsNDMgKzE4MSw0MiBAQAogCWNvbnN0IGNoYXIgZGVzY1s4XTsKIAl2b2lkICgqbG9hZGJpb3MpKHN0cnVjdCBkcm1fZGV2aWNlICosIHVpbnQ4X3QgKik7CiAJY29uc3QgYm9vbCBydzsKLQlpbnQgc2NvcmU7CiB9OwogCiBzdGF0aWMgc3RydWN0IG1ldGhvZHMgbnYwNF9tZXRob2RzW10gPSB7CiAJeyAiUFJPTSIsIGxvYWRfdmJpb3NfcHJvbSwgZmFsc2UgfSwKIAl7ICJQUkFNSU4iLCBsb2FkX3ZiaW9zX3ByYW1pbiwgdHJ1ZSB9LAogCXsgIlBDSVJPTSIsIGxvYWRfdmJpb3NfcGNpLCB0cnVlIH0sCi0JeyB9CiB9OwogCiBzdGF0aWMgc3RydWN0IG1ldGhvZHMgbnY1MF9tZXRob2RzW10gPSB7CiAJeyAiUFJBTUlOIiwgbG9hZF92Ymlvc19wcmFtaW4sIHRydWUgfSwKIAl7ICJQUk9NIiwgbG9hZF92Ymlvc19wcm9tLCBmYWxzZSB9LAogCXsgIlBDSVJPTSIsIGxvYWRfdmJpb3NfcGNpLCB0cnVlIH0sCi0JeyB9CiB9OwogCisjZGVmaW5lIE1FVEhPRENOVCAzCisKIHN0YXRpYyBib29sIE5WU2hhZG93VkJJT1Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDhfdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBtZXRob2RzICptZXRob2RzLCAqbWV0aG9kOworCXN0cnVjdCBtZXRob2RzICptZXRob2RzOworCWludCBpOwogCWludCB0ZXN0c2NvcmUgPSAzOworCWludCBzY29yZXNbTUVUSE9EQ05UXTsKIAogCWlmIChub3V2ZWF1X3ZiaW9zKSB7Ci0JCW1ldGhvZCA9IG52MDRfbWV0aG9kczsKLQkJd2hpbGUgKG1ldGhvZC0+bG9hZGJpb3MpIHsKLQkJCWlmICghc3RyY2FzZWNtcChub3V2ZWF1X3ZiaW9zLCBtZXRob2QtPmRlc2MpKQorCQltZXRob2RzID0gbnYwNF9tZXRob2RzOworCQlmb3IgKGkgPSAwOyBpIDwgTUVUSE9EQ05UOyBpKyspCisJCQlpZiAoIXN0cmNhc2VjbXAobm91dmVhdV92YmlvcywgbWV0aG9kc1tpXS5kZXNjKSkKIAkJCQlicmVhazsKLQkJCW1ldGhvZCsrOwotCQl9CiAKLQkJaWYgKG1ldGhvZC0+bG9hZGJpb3MpIHsKKwkJaWYgKGkgPCBNRVRIT0RDTlQpIHsKIAkJCU5WX0lORk8oZGV2LCAiQXR0ZW1wdGluZyB0byB1c2UgQklPUyBpbWFnZSBmcm9tICVzXG4iLAotCQkJCW1ldGhvZC0+ZGVzYyk7CisJCQkJbWV0aG9kc1tpXS5kZXNjKTsKIAotCQkJbWV0aG9kLT5sb2FkYmlvcyhkZXYsIGRhdGEpOwotCQkJaWYgKHNjb3JlX3ZiaW9zKGRldiwgZGF0YSwgbWV0aG9kLT5ydykpCisJCQltZXRob2RzW2ldLmxvYWRiaW9zKGRldiwgZGF0YSk7CisJCQlpZiAoc2NvcmVfdmJpb3MoZGV2LCBkYXRhLCBtZXRob2RzW2ldLnJ3KSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCkBAIC0yMjksMjggKzIyOCwyNCBAQAogCWVsc2UKIAkJbWV0aG9kcyA9IG52NTBfbWV0aG9kczsKIAotCW1ldGhvZCA9IG1ldGhvZHM7Ci0Jd2hpbGUgKG1ldGhvZC0+bG9hZGJpb3MpIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUVUSE9EQ05UOyBpKyspIHsKIAkJTlZfVFJBQ0UoZGV2LCAiQXR0ZW1wdGluZyB0byBsb2FkIEJJT1MgaW1hZ2UgZnJvbSAlc1xuIiwKLQkJCSBtZXRob2QtPmRlc2MpOworCQkJIG1ldGhvZHNbaV0uZGVzYyk7CiAJCWRhdGFbMF0gPSBkYXRhWzFdID0gMDsJLyogYXZvaWQgcmV1c2Ugb2YgcHJldmlvdXMgaW1hZ2UgKi8KLQkJbWV0aG9kLT5sb2FkYmlvcyhkZXYsIGRhdGEpOwotCQltZXRob2QtPnNjb3JlID0gc2NvcmVfdmJpb3MoZGV2LCBkYXRhLCBtZXRob2QtPnJ3KTsKLQkJaWYgKG1ldGhvZC0+c2NvcmUgPT0gdGVzdHNjb3JlKQorCQltZXRob2RzW2ldLmxvYWRiaW9zKGRldiwgZGF0YSk7CisJCXNjb3Jlc1tpXSA9IHNjb3JlX3ZiaW9zKGRldiwgZGF0YSwgbWV0aG9kc1tpXS5ydyk7CisJCWlmIChzY29yZXNbaV0gPT0gdGVzdHNjb3JlKQogCQkJcmV0dXJuIHRydWU7Ci0JCW1ldGhvZCsrOwogCX0KIAogCXdoaWxlICgtLXRlc3RzY29yZSA+IDApIHsKLQkJbWV0aG9kID0gbWV0aG9kczsKLQkJd2hpbGUgKG1ldGhvZC0+bG9hZGJpb3MpIHsKLQkJCWlmIChtZXRob2QtPnNjb3JlID09IHRlc3RzY29yZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUVUSE9EQ05UOyBpKyspIHsKKwkJCWlmIChzY29yZXNbaV0gPT0gdGVzdHNjb3JlKSB7CiAJCQkJTlZfVFJBQ0UoZGV2LCAiVXNpbmcgQklPUyBpbWFnZSBmcm9tICVzXG4iLAotCQkJCQkgbWV0aG9kLT5kZXNjKTsKLQkJCQltZXRob2QtPmxvYWRiaW9zKGRldiwgZGF0YSk7CisJCQkJCSBtZXRob2RzW2ldLmRlc2MpOworCQkJCW1ldGhvZHNbaV0ubG9hZGJpb3MoZGV2LCBkYXRhKTsKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KLQkJCW1ldGhvZCsrOwogCQl9CiAJfQogCkBAIC0yNjEsMTAgKzI1Niw3IEBACiBzdHJ1Y3QgaW5pdF90YmxfZW50cnkgewogCWNoYXIgKm5hbWU7CiAJdWludDhfdCBpZDsKLQlpbnQgbGVuZ3RoOwotCWludCBsZW5ndGhfb2Zmc2V0OwotCWludCBsZW5ndGhfbXVsdGlwbGllcjsKLQlib29sICgqaGFuZGxlcikoc3RydWN0IG52YmlvcyAqLCB1aW50MTZfdCwgc3RydWN0IGluaXRfZXhlYyAqKTsKKwlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgbnZiaW9zICosIHVpbnQxNl90LCBzdHJ1Y3QgaW5pdF9leGVjICopOwogfTsKIAogc3RydWN0IGJpdF9lbnRyeSB7CkBAIC04MjAsNyArODEyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lvX3Jlc3RyaWN0X3Byb2coc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTg1Miw5ICs4NDQsMTAgQEAKIAl1aW50MzJfdCByZWcgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDddKTsKIAl1aW50OF90IGNvbmZpZzsKIAl1aW50MzJfdCBjb25maWd2YWw7CisJaW50IGxlbiA9IDExICsgY291bnQgKiA0OwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFBvcnQ6IDB4JTA0WCwgSW5kZXg6IDB4JTAyWCwgTWFzazogMHglMDJYLCAiCiAJCSAgICAgICJTaGlmdDogMHglMDJYLCBDb3VudDogMHglMDJYLCBSZWc6IDB4JTA4WFxuIiwKQEAgLTg2NSw3ICs4NTgsNyBAQAogCQlOVl9FUlJPUihiaW9zLT5kZXYsCiAJCQkgIjB4JTA0WDogQ29uZmlnIDB4JTAyWCBleGNlZWRzIG1heGltYWwgYm91bmQgMHglMDJYXG4iLAogCQkJIG9mZnNldCwgY29uZmlnLCBjb3VudCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJY29uZmlndmFsID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxMSArIGNvbmZpZyAqIDRdKTsKQEAgLTg3NCwxMCArODY3LDEwIEBACiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLCBjb25maWd2YWwpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmVwZWF0KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTkxMiwxMCArOTA1LDEwIEBACiAKIAlpZXhlYy0+cmVwZWF0ID0gZmFsc2U7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW9fcmVzdHJpY3RfcGxsKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTk1MSw5ICs5NDQsMTAgQEAKIAl1aW50MzJfdCByZWcgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDhdKTsKIAl1aW50OF90IGNvbmZpZzsKIAl1aW50MTZfdCBmcmVxOworCWludCBsZW4gPSAxMiArIGNvdW50ICogMjsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBQb3J0OiAweCUwNFgsIEluZGV4OiAweCUwMlgsIE1hc2s6IDB4JTAyWCwgIgogCQkgICAgICAiU2hpZnQ6IDB4JTAyWCwgSU8gRmxhZyBDb25kaXRpb246IDB4JTAyWCwgIgpAQCAtOTY2LDcgKzk2MCw3IEBACiAJCU5WX0VSUk9SKGJpb3MtPmRldiwKIAkJCSAiMHglMDRYOiBDb25maWcgMHglMDJYIGV4Y2VlZHMgbWF4aW1hbCBib3VuZCAweCUwMlhcbiIsCiAJCQkgb2Zmc2V0LCBjb25maWcsIGNvdW50KTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlmcmVxID0gUk9NMTYoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxMiArIGNvbmZpZyAqIDJdKTsKQEAgLTk4NiwxMCArOTgwLDEwIEBACiAKIAlzZXRQTEwoYmlvcywgcmVnLCBmcmVxICogMTApOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfZW5kX3JlcGVhdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xMDA3LDEyICsxMDAxLDEyIEBACiAJICogd2UncmUgbm90IGluIHJlcGVhdCBtb2RlCiAJICovCiAJaWYgKGlleGVjLT5yZXBlYXQpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29weShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xMDQxLDcgKzEwMzUsNyBAQAogCXVpbnQ4X3QgY3J0Y2RhdGE7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDExOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBSZWc6IDB4JTA4WCwgU2hpZnQ6IDB4JTAyWCwgU3JjTWFzazogMHglMDJYLCAiCiAJCSAgICAgICJQb3J0OiAweCUwNFgsIEluZGV4OiAweCUwMlgsIE1hc2s6IDB4JTAyWFxuIiwKQEAgLTEwNjAsMTAgKzEwNTQsMTAgQEAKIAljcnRjZGF0YSB8PSAodWludDhfdClkYXRhOwogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIGNydGNwb3J0LCBjcnRjaW5kZXgsIGNydGNkYXRhKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfbm90KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTEwNzksMTAgKzEwNzMsMTAgQEAKIAkJQklPU0xPRyhiaW9zLCAiMHglMDRYOiAtLS0tLS0gRXhlY3V0aW5nIGZvbGxvd2luZyBjb21tYW5kcyAtLS0tLS1cbiIsIG9mZnNldCk7CiAKIAlpZXhlYy0+ZXhlY3V0ZSA9ICFpZXhlYy0+ZXhlY3V0ZTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW9fZmxhZ19jb25kaXRpb24oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xMTAwLDcgKzEwOTQsNyBAQAogCXVpbnQ4X3QgY29uZCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDI7CiAKIAlpZiAoaW9fZmxhZ19jb25kaXRpb25fbWV0KGJpb3MsIG9mZnNldCwgY29uZCkpCiAJCUJJT1NMT0coYmlvcywgIjB4JTA0WDogQ29uZGl0aW9uIGZ1bGZpbGxlZCAtLSBjb250aW51aW5nIHRvIGV4ZWN1dGVcbiIsIG9mZnNldCk7CkBAIC0xMTA5LDEwICsxMTAzLDEwIEBACiAJCWlleGVjLT5leGVjdXRlID0gZmFsc2U7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lkeF9hZGRyX2xhdGNoZWQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTExNDAsMTEgKzExMzQsMTIgQEAKIAl1aW50MzJfdCBtYXNrID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA5XSk7CiAJdWludDMyX3QgZGF0YSA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTNdKTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxN107CisJaW50IGxlbiA9IDE4ICsgY291bnQgKiAyOwogCXVpbnQzMl90IHZhbHVlOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IENvbnRyb2xSZWc6IDB4JTA4WCwgRGF0YVJlZzogMHglMDhYLCAiCiAJCSAgICAgICJNYXNrOiAweCUwOFgsIERhdGE6IDB4JTA4WCwgQ291bnQ6IDB4JTAyWFxuIiwKQEAgLTExNjQsMTAgKzExNTksMTAgQEAKIAkJYmlvc193cjMyKGJpb3MsIGNvbnRyb2xyZWcsIHZhbHVlKTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pb19yZXN0cmljdF9wbGwyKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xMTk2LDI1ICsxMTkxLDI2IEBACiAJdWludDhfdCBzaGlmdCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNl07CiAJdWludDMyX3QgcmVnID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA3XSk7CisJaW50IGxlbiA9IDExICsgY291bnQgKiA0OwogCXVpbnQ4X3QgY29uZmlnOwogCXVpbnQzMl90IGZyZXE7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUG9ydDogMHglMDRYLCBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlgsICIKIAkJICAgICAgIlNoaWZ0OiAweCUwMlgsIENvdW50OiAweCUwMlgsIFJlZzogMHglMDhYXG4iLAogCQlvZmZzZXQsIGNydGNwb3J0LCBjcnRjaW5kZXgsIG1hc2ssIHNoaWZ0LCBjb3VudCwgcmVnKTsKIAogCWlmICghcmVnKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCWNvbmZpZyA9IChiaW9zX2lkeHBydF9yZChiaW9zLCBjcnRjcG9ydCwgY3J0Y2luZGV4KSAmIG1hc2spID4+IHNoaWZ0OwogCWlmIChjb25maWcgPiBjb3VudCkgewogCQlOVl9FUlJPUihiaW9zLT5kZXYsCiAJCQkgIjB4JTA0WDogQ29uZmlnIDB4JTAyWCBleGNlZWRzIG1heGltYWwgYm91bmQgMHglMDJYXG4iLAogCQkJIG9mZnNldCwgY29uZmlnLCBjb3VudCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJZnJlcSA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTEgKyBjb25maWcgKiA0XSk7CkBAIC0xMjI0LDEwICsxMjIwLDEwIEBACiAKIAlzZXRQTEwoYmlvcywgcmVnLCBmcmVxKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3BsbDIoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTI0NCwxNiArMTI0MCwxNiBAQAogCXVpbnQzMl90IGZyZXEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDVdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gOTsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUmVnOiAweCUwNFgsIEZyZXE6ICVka0h6XG4iLAogCQlvZmZzZXQsIHJlZywgZnJlcSk7CiAKIAlzZXRQTEwoYmlvcywgcmVnLCBmcmVxKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gOTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaTJjX2J5dGUoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTI3NywxMiArMTI3MywxMyBAQAogCXVpbnQ4X3QgaTJjX2luZGV4ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAl1aW50OF90IGkyY19hZGRyZXNzID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAzXTsKKwlpbnQgbGVuID0gNCArIGNvdW50ICogMzsKIAlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqY2hhbjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogRENCSTJDSW5kZXg6IDB4JTAyWCwgSTJDQWRkcmVzczogMHglMDJYLCAiCiAJCSAgICAgICJDb3VudDogMHglMDJYXG4iLApAQCAtMTI5MCw3ICsxMjg3LDcgQEAKIAogCWNoYW4gPSBpbml0X2kyY19kZXZpY2VfZmluZChiaW9zLT5kZXYsIGkyY19pbmRleCk7CiAJaWYgKCFjaGFuKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJdWludDhfdCBpMmNfcmVnID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0ICsgaSAqIDNdOwpAQCAtMTMwMyw3ICsxMzAwLDcgQEAKIAkJbXNnLmxlbiA9IDE7CiAJCW1zZy5idWYgPSAmdmFsdWU7CiAJCWlmIChpMmNfdHJhbnNmZXIoJmNoYW4tPmFkYXB0ZXIsICZtc2csIDEpICE9IDEpCi0JCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gMDsKIAogCQlCSU9TTE9HKGJpb3MsICIweCUwNFg6IEkyQ1JlZzogMHglMDJYLCBWYWx1ZTogMHglMDJYLCAiCiAJCQkgICAgICAiTWFzazogMHglMDJYLCBEYXRhOiAweCUwMlhcbiIsCkBAIC0xMzE3LDE0ICsxMzE0LDE0IEBACiAJCQltc2cubGVuID0gMTsKIAkJCW1zZy5idWYgPSAmdmFsdWU7CiAJCQlpZiAoaTJjX3RyYW5zZmVyKCZjaGFuLT5hZGFwdGVyLCAmbXNnLCAxKSAhPSAxKQotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX2kyY19ieXRlKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTEzNDYsMTIgKzEzNDMsMTMgQEAKIAl1aW50OF90IGkyY19pbmRleCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDhfdCBpMmNfYWRkcmVzcyA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CisJaW50IGxlbiA9IDQgKyBjb3VudCAqIDI7CiAJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmNoYW47CiAJc3RydWN0IGkyY19tc2cgbXNnOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IERDQkkyQ0luZGV4OiAweCUwMlgsIEkyQ0FkZHJlc3M6IDB4JTAyWCwgIgogCQkgICAgICAiQ291bnQ6IDB4JTAyWFxuIiwKQEAgLTEzNTksNyArMTM1Nyw3IEBACiAKIAljaGFuID0gaW5pdF9pMmNfZGV2aWNlX2ZpbmQoYmlvcy0+ZGV2LCBpMmNfaW5kZXgpOwogCWlmICghY2hhbikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXVpbnQ4X3QgaTJjX3JlZyA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNCArIGkgKiAyXTsKQEAgLTEzNzQsMTQgKzEzNzIsMTQgQEAKIAkJCW1zZy5sZW4gPSAxOwogCQkJbXNnLmJ1ZiA9ICZkYXRhOwogCQkJaWYgKGkyY190cmFuc2ZlcigmY2hhbi0+YWRhcHRlciwgJm1zZywgMSkgIT0gMSkKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9pMmMoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTQwMSwxMyArMTM5OSwxNCBAQAogCXVpbnQ4X3QgaTJjX2luZGV4ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAl1aW50OF90IGkyY19hZGRyZXNzID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAzXTsKKwlpbnQgbGVuID0gNCArIGNvdW50OwogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICpjaGFuOwogCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAl1aW50OF90IGRhdGFbMjU2XTsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBEQ0JJMkNJbmRleDogMHglMDJYLCBJMkNBZGRyZXNzOiAweCUwMlgsICIKIAkJICAgICAgIkNvdW50OiAweCUwMlhcbiIsCkBAIC0xNDE1LDcgKzE0MTQsNyBAQAogCiAJY2hhbiA9IGluaXRfaTJjX2RldmljZV9maW5kKGJpb3MtPmRldiwgaTJjX2luZGV4KTsKIAlpZiAoIWNoYW4pCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlkYXRhW2ldID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0ICsgaV07CkBAIC0xNDI5LDEzICsxNDI4LDEzIEBACiAJCW1zZy5sZW4gPSBjb3VudDsKIAkJbXNnLmJ1ZiA9IGRhdGE7CiAJCWlmIChpMmNfdHJhbnNmZXIoJmNoYW4tPmFkYXB0ZXIsICZtc2csIDEpICE9IDEpCi0JCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF90bWRzKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE0NjAsNyArMTQ1OSw3IEBACiAJdWludDMyX3QgcmVnLCB2YWx1ZTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNTsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogTWFnaWNMb29rdXBWYWx1ZTogMHglMDJYLCBUTURTQWRkcjogMHglMDJYLCAiCiAJCSAgICAgICJNYXNrOiAweCUwMlgsIERhdGE6IDB4JTAyWFxuIiwKQEAgLTE0NjgsNyArMTQ2Nyw3IEBACiAKIAlyZWcgPSBnZXRfdG1kc19pbmRleF9yZWcoYmlvcy0+ZGV2LCBtbHYpOwogCWlmICghcmVnKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJYmlvc193cjMyKGJpb3MsIHJlZywKIAkJICB0bWRzYWRkciB8IE5WX1BSQU1EQUNfRlBfVE1EU19DT05UUk9MX1dSSVRFX0RJU0FCTEUpOwpAQCAtMTQ3NiwxMCArMTQ3NSwxMCBAQAogCWJpb3Nfd3IzMihiaW9zLCByZWcgKyA0LCB2YWx1ZSk7CiAJYmlvc193cjMyKGJpb3MsIHJlZywgdG1kc2FkZHIpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDU7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX3RtZHNfZ3JvdXAoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTE1MDAsMTggKzE0OTksMTkgQEAKIAogCXVpbnQ4X3QgbWx2ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKKwlpbnQgbGVuID0gMyArIGNvdW50ICogMjsKIAl1aW50MzJfdCByZWc7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogTWFnaWNMb29rdXBWYWx1ZTogMHglMDJYLCBDb3VudDogMHglMDJYXG4iLAogCQlvZmZzZXQsIG1sdiwgY291bnQpOwogCiAJcmVnID0gZ2V0X3RtZHNfaW5kZXhfcmVnKGJpb3MtPmRldiwgbWx2KTsKIAlpZiAoIXJlZykKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXVpbnQ4X3QgdG1kc2FkZHIgPSBiaW9zLT5kYXRhW29mZnNldCArIDMgKyBpICogMl07CkBAIC0xNTIxLDEwICsxNTIxLDEwIEBACiAJCWJpb3Nfd3IzMihiaW9zLCByZWcsIHRtZHNhZGRyKTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jcl9pZHhfYWRyX2xhdGNoKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xNTQ3LDExICsxNTQ3LDEyIEBACiAJdWludDhfdCBjcnRjaW5kZXgyID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKIAl1aW50OF90IGJhc2VhZGRyID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAzXTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0XTsKKwlpbnQgbGVuID0gNSArIGNvdW50OwogCXVpbnQ4X3Qgb2xkYWRkciwgZGF0YTsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBJbmRleDE6IDB4JTAyWCwgSW5kZXgyOiAweCUwMlgsICIKIAkJICAgICAgIkJhc2VBZGRyOiAweCUwMlgsIENvdW50OiAweCUwMlhcbiIsCkBAIC0xNTY4LDEwICsxNTY5LDEwIEBACiAKIAliaW9zX2lkeHBydF93cihiaW9zLCBOVl9DSU9fQ1JYX19DT0xPUiwgY3J0Y2luZGV4MSwgb2xkYWRkcik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jcihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xNTkyLDcgKzE1OTMsNyBAQAogCXVpbnQ4X3QgdmFsdWU7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDQ7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IEluZGV4OiAweCUwMlgsIE1hc2s6IDB4JTAyWCwgRGF0YTogMHglMDJYXG4iLAogCQlvZmZzZXQsIGNydGNpbmRleCwgbWFzaywgZGF0YSk7CkBAIC0xNjAxLDEwICsxNjAyLDEwIEBACiAJdmFsdWUgfD0gZGF0YTsKIAliaW9zX2lkeHBydF93cihiaW9zLCBOVl9DSU9fQ1JYX19DT0xPUiwgY3J0Y2luZGV4LCB2YWx1ZSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gNDsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fY3Ioc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTYyMSwxNCArMTYyMiwxNCBAQAogCXVpbnQ4X3QgZGF0YSA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDM7CiAKIAliaW9zX2lkeHBydF93cihiaW9zLCBOVl9DSU9fQ1JYX19DT0xPUiwgY3J0Y2luZGV4LCBkYXRhKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9jcl9ncm91cChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xNjQ1LDE4ICsxNjQ2LDE5IEBACiAJICovCiAKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKKwlpbnQgbGVuID0gMiArIGNvdW50ICogMjsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCiAJCWluaXRfem1fY3IoYmlvcywgb2Zmc2V0ICsgMiArIDIgKiBpIC0gMSwgaWV4ZWMpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29uZGl0aW9uX3RpbWUoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xNjgwLDcgKzE2ODIsNyBAQAogCXVuc2lnbmVkIGNudDsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMzsKIAogCWlmIChyZXRyaWVzID4gMTAwKQogCQlyZXRyaWVzID0gMTAwOwpAQCAtMTcxMSwxMCArMTcxMywxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9yZWdfc2VxdWVuY2Uoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTczNCwxMCArMTczNiwxMSBAQAogCiAJdWludDMyX3QgYmFzZXJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwogCXVpbnQzMl90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKKwlpbnQgbGVuID0gNiArIGNvdW50ICogNDsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBCYXNlUmVnOiAweCUwOFgsIENvdW50OiAweCUwMlhcbiIsCiAJCW9mZnNldCwgYmFzZXJlZywgY291bnQpOwpAQCAtMTc0OSwxMCArMTc1MiwxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgcmVnLCBkYXRhKTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9zdWJfZGlyZWN0KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE3NjgsNyArMTc3MSw3IEBACiAJdWludDE2X3Qgc3ViX29mZnNldCA9IFJPTTE2KGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAzOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBFeGVjdXRpbmcgc3Vicm91dGluZSBhdCAweCUwNFhcbiIsCiAJCW9mZnNldCwgc3ViX29mZnNldCk7CkBAIC0xNzc3LDEwICsxNzgwLDEwIEBACiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IEVuZCBvZiAweCUwNFggc3Vicm91dGluZVxuIiwgb2Zmc2V0LCBzdWJfb2Zmc2V0KTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb3B5X252X3JlZyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xODA4LDcgKzE4MTEsNyBAQAogCXVpbnQzMl90IHNyY3ZhbHVlLCBkc3R2YWx1ZTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMjI7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFNyY1JlZzogMHglMDhYLCBTaGlmdDogMHglMDJYLCBTcmNNYXNrOiAweCUwOFgsICIKIAkJICAgICAgIlhvcjogMHglMDhYLCBEc3RSZWc6IDB4JTA4WCwgRHN0TWFzazogMHglMDhYXG4iLApAQCAtMTgyNywxMCArMTgzMCwxMCBAQAogCiAJYmlvc193cjMyKGJpb3MsIGRzdHJlZywgZHN0dmFsdWUgfCBzcmN2YWx1ZSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMjI7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX2luZGV4X2lvKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE4NDgsMTQgKzE4NTEsMTQgQEAKIAl1aW50OF90IGRhdGEgPSBiaW9zLT5kYXRhW29mZnNldCArIDRdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA1OwogCiAJYmlvc19pZHhwcnRfd3IoYmlvcywgY3J0Y3BvcnQsIGNydGNpbmRleCwgZGF0YSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gNTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29tcHV0ZV9tZW0oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTkwNCw3ICsxOTA3LDcgQEAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBiaW9zLT5kZXYtPmRldl9wcml2YXRlOwogCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTsKIAogCS8qCiAJICogT24gZXZlcnkgY2FyZCBJJ3ZlIHNlZW4sIHRoaXMgc3RlcCBnZXRzIGRvbmUgZm9yIHVzIGVhcmxpZXIgaW4KQEAgLTE5MjIsMTAgKzE5MjUsMTAgQEAKIAkvKiB3cml0ZSBiYWNrIHRoZSBzYXZlZCBjb25maWd1cmF0aW9uIHZhbHVlICovCiAJYmlvc193cjMyKGJpb3MsIE5WX1BGQl9DRkcwLCBiaW9zLT5zdGF0ZS5zYXZlZF9udl9wZmJfY2ZnMCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmVzZXQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTk1OSwxMCArMTk2MiwxMCBAQAogCXBjaV9udl8yMCAmPSB+TlZfUEJVU19QQ0lfTlZfMjBfUk9NX1NIQURPV19FTkFCTEVEOwkvKiAweGZmZmZmZmZlICovCiAJYmlvc193cjMyKGJpb3MsIE5WX1BCVVNfUENJX05WXzIwLCBwY2lfbnZfMjApOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDEzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb25maWd1cmVfbWVtKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xOTgzLDcgKzE5ODYsNyBAQAogCXVpbnQzMl90IHJlZywgZGF0YTsKIAogCWlmIChiaW9zLT5tYWpvcl92ZXJzaW9uID4gMikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIE5WX1ZJT19TUlgsIE5WX1ZJT19TUl9DTE9DS19JTkRFWCwgYmlvc19pZHhwcnRfcmQoCiAJCSAgICAgICBiaW9zLCBOVl9WSU9fU1JYLCBOVl9WSU9fU1JfQ0xPQ0tfSU5ERVgpIHwgMHgyMCk7CkBAIC0yMDE1LDEwICsyMDE4LDEwIEBACiAJCWJpb3Nfd3IzMihiaW9zLCByZWcsIGRhdGEpOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb25maWd1cmVfY2xrKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0yMDM4LDcgKzIwNDEsNyBAQAogCWludCBjbG9jazsKIAogCWlmIChiaW9zLT5tYWpvcl92ZXJzaW9uID4gMikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWNsb2NrID0gUk9NMTYoYmlvcy0+ZGF0YVttZW1pbml0b2ZmcyArIDRdKSAqIDEwOwogCXNldFBMTChiaW9zLCBOVl9QUkFNREFDX05WUExMX0NPRUZGLCBjbG9jayk7CkBAIC0yMDQ4LDEwICsyMDUxLDEwIEBACiAJCWNsb2NrICo9IDI7CiAJc2V0UExMKGJpb3MsIE5WX1BSQU1EQUNfTVBMTF9DT0VGRiwgY2xvY2spOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvbmZpZ3VyZV9wcmVpbml0KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjA3MSwxNSArMjA3NCwxNSBAQAogCXVpbnQ4X3QgY3IzYyA9ICgoc3RyYXBzIDw8IDIpICYgMHhmMCkgfCAoc3RyYXBzICYgKDEgPDwgNikpOwogCiAJaWYgKGJpb3MtPm1ham9yX3ZlcnNpb24gPiAyKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfQ0lPX0NSWF9fQ09MT1IsCiAJCQkgICAgIE5WX0NJT19DUkVfU0NSQVRDSDRfX0lOREVYLCBjcjNjKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pbyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMDk5LDcgKzIxMDIsNyBAQAogCXVpbnQ4X3QgZGF0YSA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNF07CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDU7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFBvcnQ6IDB4JTA0WCwgTWFzazogMHglMDJYLCBEYXRhOiAweCUwMlhcbiIsCiAJCW9mZnNldCwgY3J0Y3BvcnQsIG1hc2ssIGRhdGEpOwpAQCAtMjE1OCwxNSArMjE2MSwxNSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQogCQkJYmlvc193cjMyKGJpb3MsIDB4NjE0MTA4ICsgKGkqMHg4MDApLCBiaW9zX3JkMzIoCiAJCQkJICBiaW9zLCAweDYxNDEwOCArIChpKjB4ODAwKSkgJiAweDBmZmZmZmZmKTsKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA1OwogCX0KIAogCWJpb3NfcG9ydF93cihiaW9zLCBjcnRjcG9ydCwgKGJpb3NfcG9ydF9yZChiaW9zLCBjcnRjcG9ydCkgJiBtYXNrKSB8CiAJCQkJCQkJCQlkYXRhKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gNTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfc3ViKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIxODEsNyArMjE4NCw3IEBACiAJdWludDhfdCBzdWIgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBDYWxsaW5nIHNjcmlwdCAlZFxuIiwgb2Zmc2V0LCBzdWIpOwogCkBAIC0yMTkxLDEwICsyMTk0LDEwIEBACiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IEVuZCBvZiBzY3JpcHQgJWRcbiIsIG9mZnNldCwgc3ViKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yYW1fY29uZGl0aW9uKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0yMjE1LDcgKzIyMTgsNyBAQAogCXVpbnQ4X3QgZGF0YTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMzsKIAogCWRhdGEgPSBiaW9zX3JkMzIoYmlvcywgTlZfUEZCX0JPT1RfMCkgJiBtYXNrOwogCkBAIC0yMjI5LDEwICsyMjMyLDEwIEBACiAJCWlleGVjLT5leGVjdXRlID0gZmFsc2U7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDM7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X252X3JlZyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMjUxLDE3ICsyMjU0LDE3IEBACiAJdWludDMyX3QgZGF0YSA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgOV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAxMzsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUmVnOiAweCUwOFgsIE1hc2s6IDB4JTA4WCwgRGF0YTogMHglMDhYXG4iLAogCQlvZmZzZXQsIHJlZywgbWFzaywgZGF0YSk7CiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLCAoYmlvc19yZDMyKGJpb3MsIHJlZykgJiBtYXNrKSB8IGRhdGEpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDEzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9tYWNybyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMjg1LDcgKzIyODgsNyBAQAogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBNYWNybzogMHglMDJYLCBNYWNyb1RhYmxlSW5kZXg6IDB4JTAyWCwgIgogCQkgICAgICAiQ291bnQ6IDB4JTAyWFxuIiwKQEAgLTIzMDAsMTAgKzIzMDMsMTAgQEAKIAkJYmlvc193cjMyKGJpb3MsIHJlZywgZGF0YSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2RvbmUoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjMxNSwxMCArMjMxOCwxMCBAQAogCSAqLwogCiAJLyogbWlsZCByZXR2YWwgYWJ1c2UgdG8gc3RvcCBwYXJzaW5nIHRoaXMgdGFibGUgKi8KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3Jlc3VtZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMzMwLDE1ICsyMzMzLDE1IEBACiAJICovCiAKIAlpZiAoaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTsKIAogCWlleGVjLT5leGVjdXRlID0gdHJ1ZTsKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IC0tLS0gRXhlY3V0aW5nIGZvbGxvd2luZyBjb21tYW5kcyAtLS0tXG4iLCBvZmZzZXQpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3RpbWUoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjM1Myw3ICsyMzU2LDcgQEAKIAl1bnNpZ25lZCB0aW1lID0gUk9NMTYoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDM7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFNsZWVwaW5nIGZvciAweCUwNFggbWljcm9zZWNvbmRzXG4iLAogCQlvZmZzZXQsIHRpbWUpOwpAQCAtMjM2MywxMCArMjM2NiwxMCBAQAogCWVsc2UKIAkJbXNsZWVwKCh0aW1lICsgOTAwKSAvIDEwMDApOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDM7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvbmRpdGlvbihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMzgzLDcgKzIzODYsNyBAQAogCXVpbnQ4X3QgY29uZCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDI7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IENvbmRpdGlvbjogMHglMDJYXG4iLCBvZmZzZXQsIGNvbmQpOwogCkBAIC0yMzk0LDEwICsyMzk3LDEwIEBACiAJCWlleGVjLT5leGVjdXRlID0gZmFsc2U7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lvX2NvbmRpdGlvbihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNDE0LDcgKzI0MTcsNyBAQAogCXVpbnQ4X3QgY29uZCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDI7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IElPIGNvbmRpdGlvbjogMHglMDJYXG4iLCBvZmZzZXQsIGNvbmQpOwogCkBAIC0yNDI1LDEwICsyNDI4LDEwIEBACiAJCWlleGVjLT5leGVjdXRlID0gZmFsc2U7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2luZGV4X2lvKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI0NTEsNyArMjQ1NCw3IEBACiAJdWludDhfdCB2YWx1ZTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUG9ydDogMHglMDRYLCBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlgsICIKIAkJICAgICAgIkRhdGE6IDB4JTAyWFxuIiwKQEAgLTI0NjAsMTAgKzI0NjMsMTAgQEAKIAl2YWx1ZSA9IChiaW9zX2lkeHBydF9yZChiaW9zLCBjcnRjcG9ydCwgY3J0Y2luZGV4KSAmIG1hc2spIHwgZGF0YTsKIAliaW9zX2lkeHBydF93cihiaW9zLCBjcnRjcG9ydCwgY3J0Y2luZGV4LCB2YWx1ZSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gNjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcGxsKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI0ODEsMTYgKzI0ODQsMTYgQEAKIAl1aW50MTZfdCBmcmVxID0gUk9NMTYoYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XSk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDc7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFJlZzogMHglMDhYLCBGcmVxOiAlZDBrSHpcbiIsIG9mZnNldCwgcmVnLCBmcmVxKTsKIAogCXNldFBMTChiaW9zLCByZWcsIGZyZXEgKiAxMCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gNzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fcmVnKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI1MDcsMTcgKzI1MTAsMTcgQEAKIAl1aW50MzJfdCB2YWx1ZSA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA5OwogCiAJaWYgKHJlZyA9PSAweDAwMDIwMCkKIAkJdmFsdWUgfD0gMTsKIAogCWJpb3Nfd3IzMihiaW9zLCByZWcsIHZhbHVlKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA5OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yYW1fcmVzdHJpY3RfcGxsKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0yNTQzLDE0ICsyNTQ2LDE1IEBACiAJdWludDhfdCB0eXBlID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAl1aW50MzJfdCBmcmVxID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAyICsgKGluZGV4ICogNCldKTsKIAl1aW50OF90ICpwbGxfbGltaXRzID0gJmJpb3MtPmRhdGFbYmlvcy0+cGxsX2xpbWl0X3RibF9wdHJdLCAqZW50cnk7CisJaW50IGxlbiA9IDIgKyBiaW9zLT5yYW1fcmVzdHJpY3RfZ3JvdXBfY291bnQgKiA0OwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlpZiAoIWJpb3MtPnBsbF9saW1pdF90YmxfcHRyIHx8IChwbGxfbGltaXRzWzBdICYgMHhmMCkgIT0gMHgzMCkgewogCQlOVl9FUlJPUihkZXYsICJQTEwgbGltaXRzIHRhYmxlIG5vdCB2ZXJzaW9uIDMueFxuIik7Ci0JCXJldHVybiB0cnVlOyAvKiBkZWxpYmVyYXRlLCBhbGxvdyBkZWZhdWx0IGNsb2NrcyB0byByZW1haW4gKi8KKwkJcmV0dXJuIGxlbjsgLyogZGVsaWJlcmF0ZSwgYWxsb3cgZGVmYXVsdCBjbG9ja3MgdG8gcmVtYWluICovCiAJfQogCiAJZW50cnkgPSBwbGxfbGltaXRzICsgcGxsX2xpbWl0c1sxXTsKQEAgLTI1NjMsMTUgKzI1NjcsMTUgQEAKIAkJCQlvZmZzZXQsIHR5cGUsIHJlZywgZnJlcSk7CiAKIAkJCXNldFBMTChiaW9zLCByZWcsIGZyZXEpOwotCQkJcmV0dXJuIHRydWU7CisJCQlyZXR1cm4gbGVuOwogCQl9CiAJfQogCiAJTlZfRVJST1IoZGV2LCAiUExMIHR5cGUgMHglMDJ4IG5vdCBmb3VuZCBpbiBQTEwgbGltaXRzIHRhYmxlIiwgdHlwZSk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfOGMoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjU4MSwxMCArMjU4NSwxMCBAQAogCSAqCiAJICovCiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfOGQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjU5NCwxMCArMjU5OCwxMCBAQAogCSAqCiAJICovCiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfZ3BpbyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNjE1LDE0ICsyNjE5LDE3IEBACiAJY29uc3QgdWludDhfdCAqZ3Bpb19lbnRyeTsKIAlpbnQgaTsKIAorCWlmICghaWV4ZWMtPmV4ZWN1dGUpCisJCXJldHVybiAxOworCiAJaWYgKGJpb3MtPmJkY2IudmVyc2lvbiAhPSAweDQwKSB7CiAJCU5WX0VSUk9SKGJpb3MtPmRldiwgIkRDQiB0YWJsZSBub3QgdmVyc2lvbiA0LjBcbiIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWlmICghYmlvcy0+YmRjYi5ncGlvX3RhYmxlX3B0cikgewogCQlOVl9XQVJOKGJpb3MtPmRldiwgIkludmFsaWQgcG9pbnRlciB0byBJTklUXzhFIHRhYmxlXG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlncGlvX2VudHJ5ID0gZ3Bpb190YWJsZSArIGdwaW9fdGFibGVbMV07CkBAIC0yNjYwLDEzICsyNjY3LDEwIEBACiAJCWJpb3Nfd3IzMihiaW9zLCByLCB2KTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotLyogaGFjayB0byBhdm9pZCBtb3ZpbmcgdGhlIGl0YmxfZW50cnkgYXJyYXkgYmVmb3JlIHRoaXMgZnVuY3Rpb24gKi8KLWludCBpbml0X3JhbV9yZXN0cmljdF96bV9yZWdfZ3JvdXBfYmxvY2tsZW47Ci0KLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3JhbV9yZXN0cmljdF96bV9yZWdfZ3JvdXAoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkJICAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjY5MiwyMSArMjY5NiwyMSBAQAogCXVpbnQ4X3QgcmVnaW5jcmVtZW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA2XTsKIAl1aW50MzJfdCBzdHJhcF9yYW1jZmcsIGRhdGE7Ci0JdWludDE2X3QgYmxvY2tsZW47CisJLyogcHJldmlvdXNseSBzZXQgYnkgJ00nIEJJVCB0YWJsZSAqLworCXVpbnQxNl90IGJsb2NrbGVuID0gYmlvcy0+cmFtX3Jlc3RyaWN0X2dyb3VwX2NvdW50ICogNDsKKwlpbnQgbGVuID0gNyArIGNvdW50ICogYmxvY2tsZW47CiAJdWludDhfdCBpbmRleDsKIAlpbnQgaTsKIAotCS8qIHByZXZpb3VzbHkgc2V0IGJ5ICdNJyBCSVQgdGFibGUgKi8KLQlibG9ja2xlbiA9IGluaXRfcmFtX3Jlc3RyaWN0X3ptX3JlZ19ncm91cF9ibG9ja2xlbjsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJaWYgKCFibG9ja2xlbikgewogCQlOVl9FUlJPUihiaW9zLT5kZXYsCiAJCQkgIjB4JTA0WDogWmVybyBibG9jayBsZW5ndGggLSBoYXMgdGhlIE0gdGFibGUgIgogCQkJICJiZWVuIHBhcnNlZD9cbiIsIG9mZnNldCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJc3RyYXBfcmFtY2ZnID0gKGJpb3NfcmQzMihiaW9zLCBOVl9QRVhUREVWX0JPT1RfMCkgPj4gMikgJiAweGY7CkBAIC0yNzI0LDEwICsyNzI4LDEwIEBACiAJCXJlZyArPSByZWdpbmNyZW1lbnQ7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29weV96bV9yZWcoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjc0NCwxNCArMjc0OCwxNCBAQAogCXVpbnQzMl90IGRzdHJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA5OwogCiAJYmlvc193cjMyKGJpb3MsIGRzdHJlZywgYmlvc19yZDMyKGJpb3MsIHNyY3JlZykpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDk7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX3JlZ19ncm91cF9hZGRyX2xhdGNoZWQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkJICAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjc2OSwyMCArMjc3MywyMSBAQAogCiAJdWludDMyX3QgcmVnID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJaW50IGxlbiA9IDYgKyBjb3VudCAqIDQ7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXVpbnQzMl90IGRhdGEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDYgKyA0ICogaV0pOwogCQliaW9zX3dyMzIoYmlvcywgcmVnLCBkYXRhKTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yZXNlcnZlZChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNzkzLDEwICsyNzk4LDEwIEBACiAJICogU2VlbWluZ2x5IGRvZXMgbm90aGluZwogCSAqLwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0Xzk2KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI4MjksMTMgKzI4MzQsMTMgQEAKIAl2YWwgPDw9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTZdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAxNzsKIAogCWJpb3Nfd3IzMihiaW9zLCByZWcsIChiaW9zX3JkMzIoYmlvcywgcmVnKSAmIG1hc2spIHwgdmFsKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTc7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0Xzk3KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI4NTksMTMgKzI4NjQsMTMgQEAKIAl2YWwgPSAodmFsICYgbWFzaykgfCAoKHZhbCArIGFkZCkgJiB+bWFzayk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDEzOwogCiAJYmlvc193cjMyKGJpb3MsIHJlZywgdmFsKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTM7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2F1eGNoKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI4ODMsMzIgKzI4ODgsMzMgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmlvcy0+ZGV2OwogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICphdXhjaDsKIAl1aW50MzJfdCBhZGRyID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7Ci0JdWludDhfdCBsZW4gPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOworCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOworCWludCBsZW4gPSA2ICsgY291bnQgKiAyOwogCWludCByZXQsIGk7CiAKIAlpZiAoIWJpb3MtPmRpc3BsYXkub3V0cHV0KSB7CiAJCU5WX0VSUk9SKGRldiwgIklOSVRfQVVYQ0g6IG5vIGFjdGl2ZSBvdXRwdXRcbiIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWF1eGNoID0gaW5pdF9pMmNfZGV2aWNlX2ZpbmQoZGV2LCBiaW9zLT5kaXNwbGF5Lm91dHB1dC0+aTJjX2luZGV4KTsKIAlpZiAoIWF1eGNoKSB7CiAJCU5WX0VSUk9SKGRldiwgIklOSVRfQVVYQ0g6IGNvdWxkbid0IGdldCBhdXhjaCAlZFxuIiwKIAkJCSBiaW9zLT5kaXNwbGF5Lm91dHB1dC0+aTJjX2luZGV4KTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCW9mZnNldCArPSA2OwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgb2Zmc2V0ICs9IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgb2Zmc2V0ICs9IDIpIHsKIAkJdWludDhfdCBkYXRhOwogCiAJCXJldCA9IG5vdXZlYXVfZHBfYXV4Y2goYXV4Y2gsIDksIGFkZHIsICZkYXRhLCAxKTsKIAkJaWYgKHJldCkgewogCQkJTlZfRVJST1IoZGV2LCAiSU5JVF9BVVhDSDogcmQgYXV4Y2ggZmFpbCAlZFxuIiwgcmV0KTsKLQkJCXJldHVybiBmYWxzZTsKKwkJCXJldHVybiAwOwogCQl9CiAKIAkJZGF0YSAmPSBiaW9zLT5kYXRhW29mZnNldCArIDBdOwpAQCAtMjkxNywxNCArMjkyMywxNCBAQAogCQlyZXQgPSBub3V2ZWF1X2RwX2F1eGNoKGF1eGNoLCA4LCBhZGRyLCAmZGF0YSwgMSk7CiAJCWlmIChyZXQpIHsKIAkJCU5WX0VSUk9SKGRldiwgIklOSVRfQVVYQ0g6IHdyIGF1eGNoIGZhaWwgJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX2F1eGNoKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI5NDEsMTA2ICsyOTQ3LDk5IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGJpb3MtPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqYXV4Y2g7CiAJdWludDMyX3QgYWRkciA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwotCXVpbnQ4X3QgbGVuID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKKwl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKKwlpbnQgbGVuID0gNiArIGNvdW50OwogCWludCByZXQsIGk7CiAKIAlpZiAoIWJpb3MtPmRpc3BsYXkub3V0cHV0KSB7CiAJCU5WX0VSUk9SKGRldiwgIklOSVRfWk1fQVVYQ0g6IG5vIGFjdGl2ZSBvdXRwdXRcbiIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWF1eGNoID0gaW5pdF9pMmNfZGV2aWNlX2ZpbmQoZGV2LCBiaW9zLT5kaXNwbGF5Lm91dHB1dC0+aTJjX2luZGV4KTsKIAlpZiAoIWF1eGNoKSB7CiAJCU5WX0VSUk9SKGRldiwgIklOSVRfWk1fQVVYQ0g6IGNvdWxkbid0IGdldCBhdXhjaCAlZFxuIiwKIAkJCSBiaW9zLT5kaXNwbGF5Lm91dHB1dC0+aTJjX2luZGV4KTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCW9mZnNldCArPSA2OwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgb2Zmc2V0KyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgb2Zmc2V0KyspIHsKIAkJcmV0ID0gbm91dmVhdV9kcF9hdXhjaChhdXhjaCwgOCwgYWRkciwgJmJpb3MtPmRhdGFbb2Zmc2V0XSwgMSk7CiAJCWlmIChyZXQpIHsKIAkJCU5WX0VSUk9SKGRldiwgIklOSVRfWk1fQVVYQ0g6IHdyIGF1eGNoIGZhaWwgJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW5pdF90YmxfZW50cnkgaXRibF9lbnRyeVtdID0gewogCS8qIGNvbW1hbmQgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgLCBpZCAgLCBsZW5ndGggICwgb2Zmc2V0ICAsIG11bHQgICAgLCBjb21tYW5kIGhhbmRsZXIgICAgICAgICAgICAgICAgICovCiAJLyogSU5JVF9QUk9HICgweDMxLCAxNSwgMTAsIDQpIHJlbW92ZWQgZHVlIHRvIG5vIGV4YW1wbGUgb2YgdXNlICovCi0JeyAiSU5JVF9JT19SRVNUUklDVF9QUk9HIiAgICAgICAgICAgICAsIDB4MzIsIDExICAgICAgLCA2ICAgICAgICwgNCAgICAgICAsIGluaXRfaW9fcmVzdHJpY3RfcHJvZyAgICAgICAgICAgfSwKLQl7ICJJTklUX1JFUEVBVCIgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMywgMiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9yZXBlYXQgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfSU9fUkVTVFJJQ1RfUExMIiAgICAgICAgICAgICAgLCAweDM0LCAxMiAgICAgICwgNyAgICAgICAsIDIgICAgICAgLCBpbml0X2lvX3Jlc3RyaWN0X3BsbCAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9FTkRfUkVQRUFUIiAgICAgICAgICAgICAgICAgICAsIDB4MzYsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfZW5kX3JlcGVhdCAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPUFkiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzNywgMTEgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb3B5ICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfTk9UIiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDM4LCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X25vdCAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9JT19GTEFHX0NPTkRJVElPTiIgICAgICAgICAgICAsIDB4MzksIDIgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfaW9fZmxhZ19jb25kaXRpb24gICAgICAgICAgfSwKLQl7ICJJTklUX0lOREVYX0FERFJFU1NfTEFUQ0hFRCIgICAgICAgICwgMHg0OSwgMTggICAgICAsIDE3ICAgICAgLCAyICAgICAgICwgaW5pdF9pZHhfYWRkcl9sYXRjaGVkICAgICAgICAgICB9LAotCXsgIklOSVRfSU9fUkVTVFJJQ1RfUExMMiIgICAgICAgICAgICAgLCAweDRBLCAxMSAgICAgICwgNiAgICAgICAsIDQgICAgICAgLCBpbml0X2lvX3Jlc3RyaWN0X3BsbDIgICAgICAgICAgIH0sCi0JeyAiSU5JVF9QTEwyIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NEIsIDkgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcGxsMiAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0kyQ19CWVRFIiAgICAgICAgICAgICAgICAgICAgICwgMHg0QywgNCAgICAgICAsIDMgICAgICAgLCAzICAgICAgICwgaW5pdF9pMmNfYnl0ZSAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fSTJDX0JZVEUiICAgICAgICAgICAgICAgICAgLCAweDRELCA0ICAgICAgICwgMyAgICAgICAsIDIgICAgICAgLCBpbml0X3ptX2kyY19ieXRlICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9JMkMiICAgICAgICAgICAgICAgICAgICAgICAsIDB4NEUsIDQgICAgICAgLCAzICAgICAgICwgMSAgICAgICAsIGluaXRfem1faTJjICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1RNRFMiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg0RiwgNSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF90bWRzICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fVE1EU19HUk9VUCIgICAgICAgICAgICAgICAgLCAweDUwLCAzICAgICAgICwgMiAgICAgICAsIDIgICAgICAgLCBpbml0X3ptX3RtZHNfZ3JvdXAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DUl9JTkRFWF9BRERSRVNTX0xBVENIRUQiICAgICAsIDB4NTEsIDUgICAgICAgLCA0ICAgICAgICwgMSAgICAgICAsIGluaXRfY3JfaWR4X2Fkcl9sYXRjaCAgICAgICAgICAgfSwKLQl7ICJJTklUX0NSIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg1MiwgNCAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jciAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fQ1IiICAgICAgICAgICAgICAgICAgICAgICAgLCAweDUzLCAzICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3ptX2NyICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9DUl9HUk9VUCIgICAgICAgICAgICAgICAgICAsIDB4NTQsIDIgICAgICAgLCAxICAgICAgICwgMiAgICAgICAsIGluaXRfem1fY3JfZ3JvdXAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPTkRJVElPTl9USU1FIiAgICAgICAgICAgICAgICwgMHg1NiwgMyAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb25kaXRpb25fdGltZSAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fUkVHX1NFUVVFTkNFIiAgICAgICAgICAgICAgLCAweDU4LCA2ICAgICAgICwgNSAgICAgICAsIDQgICAgICAgLCBpbml0X3ptX3JlZ19zZXF1ZW5jZSAgICAgICAgICAgIH0sCisJeyAiSU5JVF9JT19SRVNUUklDVF9QUk9HIiAgICAgICAgICAgICAsIDB4MzIsIGluaXRfaW9fcmVzdHJpY3RfcHJvZyAgICAgICAgICAgfSwKKwl7ICJJTklUX1JFUEVBVCIgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMywgaW5pdF9yZXBlYXQgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSU9fUkVTVFJJQ1RfUExMIiAgICAgICAgICAgICAgLCAweDM0LCBpbml0X2lvX3Jlc3RyaWN0X3BsbCAgICAgICAgICAgIH0sCisJeyAiSU5JVF9FTkRfUkVQRUFUIiAgICAgICAgICAgICAgICAgICAsIDB4MzYsIGluaXRfZW5kX3JlcGVhdCAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPUFkiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzNywgaW5pdF9jb3B5ICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfTk9UIiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDM4LCBpbml0X25vdCAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9JT19GTEFHX0NPTkRJVElPTiIgICAgICAgICAgICAsIDB4MzksIGluaXRfaW9fZmxhZ19jb25kaXRpb24gICAgICAgICAgfSwKKwl7ICJJTklUX0lOREVYX0FERFJFU1NfTEFUQ0hFRCIgICAgICAgICwgMHg0OSwgaW5pdF9pZHhfYWRkcl9sYXRjaGVkICAgICAgICAgICB9LAorCXsgIklOSVRfSU9fUkVTVFJJQ1RfUExMMiIgICAgICAgICAgICAgLCAweDRBLCBpbml0X2lvX3Jlc3RyaWN0X3BsbDIgICAgICAgICAgIH0sCisJeyAiSU5JVF9QTEwyIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NEIsIGluaXRfcGxsMiAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0kyQ19CWVRFIiAgICAgICAgICAgICAgICAgICAgICwgMHg0QywgaW5pdF9pMmNfYnl0ZSAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fSTJDX0JZVEUiICAgICAgICAgICAgICAgICAgLCAweDRELCBpbml0X3ptX2kyY19ieXRlICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9JMkMiICAgICAgICAgICAgICAgICAgICAgICAsIDB4NEUsIGluaXRfem1faTJjICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1RNRFMiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg0RiwgaW5pdF90bWRzICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fVE1EU19HUk9VUCIgICAgICAgICAgICAgICAgLCAweDUwLCBpbml0X3ptX3RtZHNfZ3JvdXAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DUl9JTkRFWF9BRERSRVNTX0xBVENIRUQiICAgICAsIDB4NTEsIGluaXRfY3JfaWR4X2Fkcl9sYXRjaCAgICAgICAgICAgfSwKKwl7ICJJTklUX0NSIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg1MiwgaW5pdF9jciAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fQ1IiICAgICAgICAgICAgICAgICAgICAgICAgLCAweDUzLCBpbml0X3ptX2NyICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9DUl9HUk9VUCIgICAgICAgICAgICAgICAgICAsIDB4NTQsIGluaXRfem1fY3JfZ3JvdXAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPTkRJVElPTl9USU1FIiAgICAgICAgICAgICAgICwgMHg1NiwgaW5pdF9jb25kaXRpb25fdGltZSAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fUkVHX1NFUVVFTkNFIiAgICAgICAgICAgICAgLCAweDU4LCBpbml0X3ptX3JlZ19zZXF1ZW5jZSAgICAgICAgICAgIH0sCiAJLyogSU5JVF9JTkRJUkVDVF9SRUcgKDB4NUEsIDcsIDAsIDApIHJlbW92ZWQgZHVlIHRvIG5vIGV4YW1wbGUgb2YgdXNlICovCi0JeyAiSU5JVF9TVUJfRElSRUNUIiAgICAgICAgICAgICAgICAgICAsIDB4NUIsIDMgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfc3ViX2RpcmVjdCAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPUFlfTlZfUkVHIiAgICAgICAgICAgICAgICAgICwgMHg1RiwgMjIgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb3B5X252X3JlZyAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fSU5ERVhfSU8iICAgICAgICAgICAgICAgICAgLCAweDYyLCA1ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3ptX2luZGV4X2lvICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT01QVVRFX01FTSIgICAgICAgICAgICAgICAgICAsIDB4NjMsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29tcHV0ZV9tZW0gICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1JFU0VUIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2NSwgMTMgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9yZXNldCAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09ORklHVVJFX01FTSIgICAgICAgICAgICAgICAgLCAweDY2LCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvbmZpZ3VyZV9tZW0gICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT05GSUdVUkVfQ0xLIiAgICAgICAgICAgICAgICAsIDB4NjcsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29uZmlndXJlX2NsayAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPTkZJR1VSRV9QUkVJTklUIiAgICAgICAgICAgICwgMHg2OCwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb25maWd1cmVfcHJlaW5pdCAgICAgICAgICB9LAotCXsgIklOSVRfSU8iICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDY5LCA1ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2lvICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9TVUIiICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NkIsIDIgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfc3ViICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1JBTV9DT05ESVRJT04iICAgICAgICAgICAgICAgICwgMHg2RCwgMyAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9yYW1fY29uZGl0aW9uICAgICAgICAgICAgICB9LAotCXsgIklOSVRfTlZfUkVHIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDZFLCAxMyAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X252X3JlZyAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9NQUNSTyIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NkYsIDIgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfbWFjcm8gICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0RPTkUiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg3MSwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9kb25lICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfUkVTVU1FIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDcyLCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3Jlc3VtZSAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9TVUJfRElSRUNUIiAgICAgICAgICAgICAgICAgICAsIDB4NUIsIGluaXRfc3ViX2RpcmVjdCAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPUFlfTlZfUkVHIiAgICAgICAgICAgICAgICAgICwgMHg1RiwgaW5pdF9jb3B5X252X3JlZyAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fSU5ERVhfSU8iICAgICAgICAgICAgICAgICAgLCAweDYyLCBpbml0X3ptX2luZGV4X2lvICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT01QVVRFX01FTSIgICAgICAgICAgICAgICAgICAsIDB4NjMsIGluaXRfY29tcHV0ZV9tZW0gICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1JFU0VUIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2NSwgaW5pdF9yZXNldCAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09ORklHVVJFX01FTSIgICAgICAgICAgICAgICAgLCAweDY2LCBpbml0X2NvbmZpZ3VyZV9tZW0gICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT05GSUdVUkVfQ0xLIiAgICAgICAgICAgICAgICAsIDB4NjcsIGluaXRfY29uZmlndXJlX2NsayAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPTkZJR1VSRV9QUkVJTklUIiAgICAgICAgICAgICwgMHg2OCwgaW5pdF9jb25maWd1cmVfcHJlaW5pdCAgICAgICAgICB9LAorCXsgIklOSVRfSU8iICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDY5LCBpbml0X2lvICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9TVUIiICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NkIsIGluaXRfc3ViICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1JBTV9DT05ESVRJT04iICAgICAgICAgICAgICAgICwgMHg2RCwgaW5pdF9yYW1fY29uZGl0aW9uICAgICAgICAgICAgICB9LAorCXsgIklOSVRfTlZfUkVHIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDZFLCBpbml0X252X3JlZyAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9NQUNSTyIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NkYsIGluaXRfbWFjcm8gICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0RPTkUiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg3MSwgaW5pdF9kb25lICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfUkVTVU1FIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDcyLCBpbml0X3Jlc3VtZSAgICAgICAgICAgICAgICAgICAgIH0sCiAJLyogSU5JVF9SQU1fQ09ORElUSU9OMiAoMHg3MywgOSwgMCwgMCkgcmVtb3ZlZCBkdWUgdG8gbm8gZXhhbXBsZSBvZiB1c2UgKi8KLQl7ICJJTklUX1RJTUUiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg3NCwgMyAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF90aW1lICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09ORElUSU9OIiAgICAgICAgICAgICAgICAgICAgLCAweDc1LCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvbmRpdGlvbiAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9JT19DT05ESVRJT04iICAgICAgICAgICAgICAgICAsIDB4NzYsIDIgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfaW9fY29uZGl0aW9uICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0lOREVYX0lPIiAgICAgICAgICAgICAgICAgICAgICwgMHg3OCwgNiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9pbmRleF9pbyAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfUExMIiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDc5LCA3ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3BsbCAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9SRUciICAgICAgICAgICAgICAgICAgICAgICAsIDB4N0EsIDkgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfem1fcmVnICAgICAgICAgICAgICAgICAgICAgfSwKLQkvKiBJTklUX1JBTV9SRVNUUklDVF9QTEwncyBsZW5ndGggaXMgYWRqdXN0ZWQgYnkgdGhlIEJJVCBNIHRhYmxlICovCi0JeyAiSU5JVF9SQU1fUkVTVFJJQ1RfUExMIiAgICAgICAgICAgICAsIDB4ODcsIDIgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmFtX3Jlc3RyaWN0X3BsbCAgICAgICAgICAgfSwKLQl7ICJJTklUXzhDIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg4QywgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF84YyAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfOEQiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDhELCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0XzhkICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9HUElPIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OEUsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfZ3BpbyAgICAgICAgICAgICAgICAgICAgICAgfSwKLQkvKiBJTklUX1JBTV9SRVNUUklDVF9aTV9SRUdfR1JPVVAncyBtdWx0IGlzIGxvYWRlZCBieSBNIHRhYmxlIGluIEJJVCAqLwotCXsgIklOSVRfUkFNX1JFU1RSSUNUX1pNX1JFR19HUk9VUCIgICAgLCAweDhGLCA3ICAgICAgICwgNiAgICAgICAsIDAgICAgICAgLCBpbml0X3JhbV9yZXN0cmljdF96bV9yZWdfZ3JvdXAgIH0sCi0JeyAiSU5JVF9DT1BZX1pNX1JFRyIgICAgICAgICAgICAgICAgICAsIDB4OTAsIDkgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29weV96bV9yZWcgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX1JFR19HUk9VUF9BRERSRVNTX0xBVENIRUQiICwgMHg5MSwgNiAgICAgICAsIDUgICAgICAgLCA0ICAgICAgICwgaW5pdF96bV9yZWdfZ3JvdXBfYWRkcl9sYXRjaGVkICB9LAotCXsgIklOSVRfUkVTRVJWRUQiICAgICAgICAgICAgICAgICAgICAgLCAweDkyLCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3Jlc2VydmVkICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF85NiIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OTYsIDE3ICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfOTYgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUXzk3IiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg5NywgMTMgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF85NyAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQVVYQ0giICAgICAgICAgICAgICAgICAgICAgICAgLCAweDk4LCA2ICAgICAgICwgNSAgICAgICAsIDIgICAgICAgLCBpbml0X2F1eGNoICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9BVVhDSCIgICAgICAgICAgICAgICAgICAgICAsIDB4OTksIDYgICAgICAgLCA1ICAgICAgICwgMSAgICAgICAsIGluaXRfem1fYXV4Y2ggICAgICAgICAgICAgICAgICAgfSwKLQl7IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICwgMCAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJeyAiSU5JVF9USU1FIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzQsIGluaXRfdGltZSAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPTkRJVElPTiIgICAgICAgICAgICAgICAgICAgICwgMHg3NSwgaW5pdF9jb25kaXRpb24gICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSU9fQ09ORElUSU9OIiAgICAgICAgICAgICAgICAgLCAweDc2LCBpbml0X2lvX2NvbmRpdGlvbiAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9JTkRFWF9JTyIgICAgICAgICAgICAgICAgICAgICAsIDB4NzgsIGluaXRfaW5kZXhfaW8gICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1BMTCIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg3OSwgaW5pdF9wbGwgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fUkVHIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDdBLCBpbml0X3ptX3JlZyAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9SQU1fUkVTVFJJQ1RfUExMIiAgICAgICAgICAgICAsIDB4ODcsIGluaXRfcmFtX3Jlc3RyaWN0X3BsbCAgICAgICAgICAgfSwKKwl7ICJJTklUXzhDIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg4QywgaW5pdF84YyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfOEQiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDhELCBpbml0XzhkICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9HUElPIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OEUsIGluaXRfZ3BpbyAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1JBTV9SRVNUUklDVF9aTV9SRUdfR1JPVVAiICAgICwgMHg4RiwgaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwICB9LAorCXsgIklOSVRfQ09QWV9aTV9SRUciICAgICAgICAgICAgICAgICAgLCAweDkwLCBpbml0X2NvcHlfem1fcmVnICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9SRUdfR1JPVVBfQUREUkVTU19MQVRDSEVEIiAsIDB4OTEsIGluaXRfem1fcmVnX2dyb3VwX2FkZHJfbGF0Y2hlZCAgfSwKKwl7ICJJTklUX1JFU0VSVkVEIiAgICAgICAgICAgICAgICAgICAgICwgMHg5MiwgaW5pdF9yZXNlcnZlZCAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfOTYiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDk2LCBpbml0Xzk2ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF85NyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OTcsIGluaXRfOTcgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0FVWENIIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg5OCwgaW5pdF9hdXhjaCAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fQVVYQ0giICAgICAgICAgICAgICAgICAgICAgLCAweDk5LCBpbml0X3ptX2F1eGNoICAgICAgICAgICAgICAgICAgIH0sCisJeyBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXRfaW5pdF90YWJsZV9lbnRyeV9sZW5ndGgoc3RydWN0IG52YmlvcyAqYmlvcywgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IGkpCi17Ci0JLyogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgZ2l2ZW4gaW5pdCB0YWJsZSBlbnRyeS4gKi8KLQlyZXR1cm4gaXRibF9lbnRyeVtpXS5sZW5ndGggKyBiaW9zLT5kYXRhW29mZnNldCArIGl0YmxfZW50cnlbaV0ubGVuZ3RoX29mZnNldF0qaXRibF9lbnRyeVtpXS5sZW5ndGhfbXVsdGlwbGllcjsKLX0KLQogI2RlZmluZSBNQVhfVEFCTEVfT1BTIDEwMDAKIAogc3RhdGljIGludApAQCAtMzA1Niw3ICszMDU1LDcgQEAKIAkgKiBpcyBjaGFuZ2VkIGJhY2sgdG8gRVhFQ1VURS4KIAkgKi8KIAotCWludCBjb3VudCA9IDAsIGk7CisJaW50IGNvdW50ID0gMCwgaSwgcmVzOwogCXVpbnQ4X3QgaWQ7CiAKIAkvKgpAQCAtMzA3NiwyMiArMzA3NSwyMSBAQAogCQkJCW9mZnNldCwgaXRibF9lbnRyeVtpXS5pZCwgaXRibF9lbnRyeVtpXS5uYW1lKTsKIAogCQkJLyogZXhlY3V0ZSBldmVudHVhbCBjb21tYW5kIGhhbmRsZXIgKi8KLQkJCWlmIChpdGJsX2VudHJ5W2ldLmhhbmRsZXIpCi0JCQkJaWYgKCEoKml0YmxfZW50cnlbaV0uaGFuZGxlcikoYmlvcywgb2Zmc2V0LCBpZXhlYykpCi0JCQkJCWJyZWFrOworCQkJcmVzID0gKCppdGJsX2VudHJ5W2ldLmhhbmRsZXIpKGJpb3MsIG9mZnNldCwgaWV4ZWMpOworCQkJaWYgKCFyZXMpCisJCQkJYnJlYWs7CisJCQkvKgorCQkJICogQWRkIHRoZSBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgY29tbWFuZCBpbmNsdWRpbmcgYWxsIGRhdGEKKwkJCSAqIG9mIHRoYXQgY29tbWFuZC4gVGhlIG9mZnNldCB3aWxsIHRoZW4gYmUgcG9pbnRpbmcgb24gdGhlCisJCQkgKiBuZXh0IG9wIGNvZGUuCisJCQkgKi8KKwkJCW9mZnNldCArPSByZXM7CiAJCX0gZWxzZSB7CiAJCQlOVl9FUlJPUihiaW9zLT5kZXYsCiAJCQkJICIweCUwNFg6IEluaXQgdGFibGUgY29tbWFuZCBub3QgZm91bmQ6ICIKIAkJCQkgIjB4JTAyWFxuIiwgb2Zmc2V0LCBpZCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQotCi0JCS8qCi0JCSAqIEFkZCB0aGUgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IGNvbW1hbmQgaW5jbHVkaW5nIGFsbCBkYXRhCi0JCSAqIG9mIHRoYXQgY29tbWFuZC4gVGhlIG9mZnNldCB3aWxsIHRoZW4gYmUgcG9pbnRpbmcgb24gdGhlCi0JCSAqIG5leHQgb3AgY29kZS4KLQkJICovCi0JCW9mZnNldCArPSBnZXRfaW5pdF90YWJsZV9lbnRyeV9sZW5ndGgoYmlvcywgb2Zmc2V0LCBpKTsKIAl9CiAKIAlpZiAob2Zmc2V0ID49IGJpb3MtPmxlbmd0aCkKQEAgLTM4NTQsNyArMzg1Miw3IEBACiAJICogc2NyaXB0IHRhYmxlcyBpcyBhIHBvaW50ZXIgdG8gdGhlIHNjcmlwdCB0byBleGVjdXRlLgogCSAqLwogCi0JTlZfREVCVUcoZGV2LCAiU2VhcmNoaW5nIGZvciBvdXRwdXQgZW50cnkgZm9yICVkICVkICVkXG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJTZWFyY2hpbmcgZm9yIG91dHB1dCBlbnRyeSBmb3IgJWQgJWQgJWRcbiIsCiAJCQlkY2JlbnQtPnR5cGUsIGRjYmVudC0+bG9jYXRpb24sIGRjYmVudC0+b3IpOwogCW90YWJsZSA9IGJpb3Nfb3V0cHV0X2NvbmZpZ19tYXRjaChkZXYsIGRjYmVudCwgdGFibGVbMV0gKwogCQkJCQkgIGJpb3MtPmRpc3BsYXkuc2NyaXB0X3RhYmxlX3B0ciwKQEAgLTM4ODQsNyArMzg4Miw3IEBACiAJaWYgKHB4Y2xrID09IDApIHsKIAkJc2NyaXB0ID0gUk9NMTYob3RhYmxlWzZdKTsKIAkJaWYgKCFzY3JpcHQpIHsKLQkJCU5WX0RFQlVHKGRldiwgIm91dHB1dCBzY3JpcHQgMCBub3QgZm91bmRcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgIm91dHB1dCBzY3JpcHQgMCBub3QgZm91bmRcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtMzg5NCw3ICszODkyLDcgQEAKIAlpZiAocHhjbGsgPT0gLTEpIHsKIAkJc2NyaXB0ID0gUk9NMTYob3RhYmxlWzhdKTsKIAkJaWYgKCFzY3JpcHQpIHsKLQkJCU5WX0RFQlVHKGRldiwgIm91dHB1dCBzY3JpcHQgMSBub3QgZm91bmRcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgIm91dHB1dCBzY3JpcHQgMSBub3QgZm91bmRcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtMzkwNyw3ICszOTA1LDcgQEAKIAkJZWxzZQogCQkJc2NyaXB0ID0gMDsKIAkJaWYgKCFzY3JpcHQpIHsKLQkJCU5WX0RFQlVHKGRldiwgIm91dHB1dCBzY3JpcHQgMiBub3QgZm91bmRcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgIm91dHB1dCBzY3JpcHQgMiBub3QgZm91bmRcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtMzkzMSw3ICszOTI5LDcgQEAKIAkJaWYgKHNjcmlwdCkKIAkJCXNjcmlwdCA9IGNsa2NtcHRhYmxlKGJpb3MsIHNjcmlwdCwgLXB4Y2xrKTsKIAkJaWYgKCFzY3JpcHQpIHsKLQkJCU5WX0RFQlVHKGRldiwgImNsb2NrIHNjcmlwdCAxIG5vdCBmb3VuZFxuIik7CisJCQlOVl9ERUJVR19LTVMoZGV2LCAiY2xvY2sgc2NyaXB0IDEgbm90IGZvdW5kXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTQ2MDYsMTAgKzQ2MDQsNiBAQAogCSAqIHN0dWZmIHRoYXQgd2UgZG9uJ3QgdXNlIC0gdGhlaXIgdXNlIGN1cnJlbnRseSB1bmtub3duCiAJICovCiAKLQl1aW50MTZfdCBycl9zdHJhcF94bGF0OwotCXVpbnQ4X3QgcnJfZ3JvdXBfY291bnQ7Ci0JaW50IGk7Ci0KIAkvKgogCSAqIE9sZGVyIGJpb3MgdmVyc2lvbnMgZG9uJ3QgaGF2ZSBhIHN1ZmZpY2llbnRseSBsb25nIHRhYmxlIGZvcgogCSAqIHdoYXQgd2Ugd2FudApAQCAtNDYxOCwyNCArNDYxMiwxMyBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChiaXRlbnRyeS0+aWRbMV0gPCAyKSB7Ci0JCXJyX2dyb3VwX2NvdW50ID0gYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgMl07Ci0JCXJyX3N0cmFwX3hsYXQgPSBST00xNihiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAzXSk7CisJCWJpb3MtPnJhbV9yZXN0cmljdF9ncm91cF9jb3VudCA9IGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDJdOworCQliaW9zLT5yYW1fcmVzdHJpY3RfdGJsX3B0ciA9IFJPTTE2KGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDNdKTsKIAl9IGVsc2UgewotCQlycl9ncm91cF9jb3VudCA9IGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDBdOwotCQlycl9zdHJhcF94bGF0ID0gUk9NMTYoYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgMV0pOworCQliaW9zLT5yYW1fcmVzdHJpY3RfZ3JvdXBfY291bnQgPSBiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAwXTsKKwkJYmlvcy0+cmFtX3Jlc3RyaWN0X3RibF9wdHIgPSBST00xNihiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAxXSk7CiAJfQogCi0JLyogYWRqdXN0IGxlbmd0aCBvZiBJTklUXzg3ICovCi0JZm9yIChpID0gMDsgaXRibF9lbnRyeVtpXS5uYW1lICYmIChpdGJsX2VudHJ5W2ldLmlkICE9IDB4ODcpOyBpKyspOwotCWl0YmxfZW50cnlbaV0ubGVuZ3RoICs9IHJyX2dyb3VwX2NvdW50ICogNDsKLQotCS8qIHNldCB1cCBtdWx0aXBsaWVyIGZvciBJTklUX1JBTV9SRVNUUklDVF9aTV9SRUdfR1JPVVAgKi8KLQlmb3IgKDsgaXRibF9lbnRyeVtpXS5uYW1lICYmIChpdGJsX2VudHJ5W2ldLmlkICE9IDB4OGYpOyBpKyspOwotCWl0YmxfZW50cnlbaV0ubGVuZ3RoX211bHRpcGxpZXIgPSBycl9ncm91cF9jb3VudCAqIDQ7Ci0KLQlpbml0X3JhbV9yZXN0cmljdF96bV9yZWdfZ3JvdXBfYmxvY2tsZW4gPSBpdGJsX2VudHJ5W2ldLmxlbmd0aF9tdWx0aXBsaWVyOwotCWJpb3MtPnJhbV9yZXN0cmljdF90YmxfcHRyID0gcnJfc3RyYXBfeGxhdDsKLQogCXJldHVybiAwOwogfQogCkBAIC01MjM0LDcgKzUyMTcsNyBAQAogCWludCBpOwogCiAJaWYgKCFiaW9zLT5iZGNiLmNvbm5lY3Rvcl90YWJsZV9wdHIpIHsKLQkJTlZfREVCVUcoZGV2LCAiTm8gRENCIGNvbm5lY3RvciB0YWJsZSBwcmVzZW50XG4iKTsKKwkJTlZfREVCVUdfS01TKGRldiwgIk5vIERDQiBjb25uZWN0b3IgdGFibGUgcHJlc2VudFxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKaW5kZXggMWQ1ZjEwYi4uMDU4ZTk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKQEAgLTIyNyw2ICsyMjcsNyBAQAogCiAJdWludDE2X3QgcGxsX2xpbWl0X3RibF9wdHI7CiAJdWludDE2X3QgcmFtX3Jlc3RyaWN0X3RibF9wdHI7CisJdWludDhfdCByYW1fcmVzdHJpY3RfZ3JvdXBfY291bnQ7CiAKIAl1aW50MTZfdCBzb21lX3NjcmlwdF9wdHI7IC8qIEJJVCBJICsgMTQgKi8KIAl1aW50MTZfdCBpbml0OTZfdGJsX3B0cjsgLyogQklUIEkgKyAxNiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCmluZGV4IGFhMmRmYmMuLjBjYWQ2ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKQEAgLTE1NCw2ICsxNTQsMTEgQEAKIAludmJvLT5wbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQgPSBudmJvLT5wbGFjZW1lbnRzOwogCW52Ym8tPnBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gbjsKIAludmJvLT5wbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gbjsKKworCWlmIChudmJvLT5waW5fcmVmY250KSB7CisJCXdoaWxlIChuLS0pCisJCQludmJvLT5wbGFjZW1lbnRzW25dIHw9IFRUTV9QTF9GTEFHX05PX0VWSUNUOworCX0KIH0KIAogaW50CkBAIC00MDAsMTAgKzQwNSwxNiBAQAogCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gbm91dmVhdV9ibyhibyk7CiAKIAlzd2l0Y2ggKGJvLT5tZW0ubWVtX3R5cGUpIHsKKwljYXNlIFRUTV9QTF9WUkFNOgorCQlub3V2ZWF1X2JvX3BsYWNlbWVudF9zZXQobnZibywgVFRNX1BMX0ZMQUdfVFQgfAorCQkJCQkgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbm91dmVhdV9ib19wbGFjZW1lbnRfc2V0KG52Ym8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7CiAJCWJyZWFrOwogCX0KKworCSpwbCA9IG52Ym8tPnBsYWNlbWVudDsKIH0KIAogCkBAIC00NTUsMTEgKzQ2Niw4IEBACiAJaW50IHJldDsKIAogCWNoYW4gPSBudmJvLT5jaGFubmVsOwotCWlmICghY2hhbiB8fCBudmJvLT50aWxlX2ZsYWdzIHx8IG52Ym8tPm5vX3ZtKSB7CisJaWYgKCFjaGFuIHx8IG52Ym8tPnRpbGVfZmxhZ3MgfHwgbnZiby0+bm9fdm0pCiAJCWNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKLQkJaWYgKCFjaGFuKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJc3JjX29mZnNldCA9IG9sZF9tZW0tPm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAJZHN0X29mZnNldCA9IG5ld19tZW0tPm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CkBAIC02MjUsNyArNjMzLDggQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGRldl9wcml2LT5pbml0X3N0YXRlICE9IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUpCisJaWYgKGRldl9wcml2LT5pbml0X3N0YXRlICE9IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUgfHwKKwkgICAgIWRldl9wcml2LT5jaGFubmVsKQogCQlyZXR1cm4gdHRtX2JvX21vdmVfbWVtY3B5KGJvLCBldmljdCwgbm9fd2FpdCwgbmV3X21lbSk7CiAKIAlpZiAob2xkX21lbS0+bWVtX3R5cGUgPT0gVFRNX1BMX1NZU1RFTSAmJiAhYm8tPnR0bSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKaW5kZXggMDMyY2YwOS4uNWExMGRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCkBAIC04Niw3ICs4Niw3IEBACiAJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpjb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5lY3Rvcihkcm1fY29ubmVjdG9yKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5iYXNlLmRldjsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlpZiAoIWNvbm5lY3RvcikKIAkJcmV0dXJuOwpAQCAtNDIwLDcgKzQyMCw3IEBACiAJLyogVXNlIHByZWZlcnJlZCBtb2RlIGlmIHRoZXJlIGlzIG9uZS4uICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5iYXNlLnByb2JlZF9tb2RlcywgaGVhZCkgewogCQlpZiAobW9kZS0+dHlwZSAmIERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEKSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJuYXRpdmUgbW9kZSBmcm9tIHByZWZlcnJlZFxuIik7CisJCQlOVl9ERUJVR19LTVMoZGV2LCAibmF0aXZlIG1vZGUgZnJvbSBwcmVmZXJyZWRcbiIpOwogCQkJcmV0dXJuIGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOwogCQl9CiAJfQpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJCWxhcmdlc3QgPSBtb2RlOwogCX0KIAotCU5WX0RFQlVHKGRldiwgIm5hdGl2ZSBtb2RlIGZyb20gbGFyZ2VzdDogJWR4JWRAJWRcbiIsCisJTlZfREVCVUdfS01TKGRldiwgIm5hdGl2ZSBtb2RlIGZyb20gbGFyZ2VzdDogJWR4JWRAJWRcbiIsCiAJCSAgICAgIGhpZ2hfdywgaGlnaF9oLCBoaWdoX3YpOwogCXJldHVybiBsYXJnZXN0ID8gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbGFyZ2VzdCkgOiBOVUxMOwogfQpAQCAtNzI1LDcgKzcyNSw3IEBACiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJbnZfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2YoKm52X2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwogCWlmICghbnZfY29ubmVjdG9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jCmluZGV4IGRlNjFmNDYuLjllMjkyNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAotCU5WX0RFQlVHKGRldiwgIlx0XHRhZGp1c3QgMHglMDJ4IDB4JTAyeFxuIiwgcmVxdWVzdFswXSwgcmVxdWVzdFsxXSk7CisJTlZfREVCVUdfS01TKGRldiwgIlx0XHRhZGp1c3QgMHglMDJ4IDB4JTAyeFxuIiwgcmVxdWVzdFswXSwgcmVxdWVzdFsxXSk7CiAKIAkvKiBLZWVwIGFsbCBsYW5lcyBhdCB0aGUgc2FtZSBsZXZlbC4uICovCiAJZm9yIChpID0gMDsgaSA8IG52X2VuY29kZXItPmRwLmxpbmtfbnI7IGkrKykgewpAQCAtMjI4LDcgKzIyOCw3IEBACiAJaW50IG9yID0gbnZfZW5jb2Rlci0+b3IsIGxpbmsgPSAhKG52X2VuY29kZXItPmRjYi0+c29yY29uZi5saW5rICYgMSk7CiAJaW50IGRwZV9oZWFkZXJsZW4sIHJldCwgaTsKIAotCU5WX0RFQlVHKGRldiwgIlx0XHRjb25maWcgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJcdFx0Y29uZmlnIDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKIAkJIGNvbmZpZ1swXSwgY29uZmlnWzFdLCBjb25maWdbMl0sIGNvbmZpZ1szXSk7CiAKIAlkcGUgPSBub3V2ZWF1X2Jpb3NfZHBfdGFibGUoZGV2LCBudl9lbmNvZGVyLT5kY2IsICZkcGVfaGVhZGVybGVuKTsKQEAgLTI3NiwxMiArMjc2LDEyIEBACiAJYm9vbCBjcl9kb25lLCBjcl9tYXhfdnMsIGVxX2RvbmU7CiAJaW50IHJldCA9IDAsIGksIHRyaWVzLCB2b2x0YWdlOwogCi0JTlZfREVCVUcoZGV2LCAibGluayB0cmFpbmluZyEhXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAibGluayB0cmFpbmluZyEhXG4iKTsKIHRyYWluOgogCWNyX2RvbmUgPSBlcV9kb25lID0gZmFsc2U7CiAKIAkvKiBzZXQgbGluayBjb25maWd1cmF0aW9uICovCi0JTlZfREVCVUcoZGV2LCAiXHRiZWdpbiB0cmFpbjogYncgJWQsIGxhbmVzICVkXG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJcdGJlZ2luIHRyYWluOiBidyAlZCwgbGFuZXMgJWRcbiIsCiAJCSBudl9lbmNvZGVyLT5kcC5saW5rX2J3LCBudl9lbmNvZGVyLT5kcC5saW5rX25yKTsKIAogCXJldCA9IG5vdXZlYXVfZHBfbGlua19id19zZXQoZW5jb2RlciwgbnZfZW5jb2Rlci0+ZHAubGlua19idyk7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogY2xvY2sgcmVjb3ZlcnkgKi8KLQlOVl9ERUJVRyhkZXYsICJcdGJlZ2luIGNyXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXHRiZWdpbiBjclxuIik7CiAJcmV0ID0gbm91dmVhdV9kcF9saW5rX3RyYWluX3NldChlbmNvZGVyLCBEUF9UUkFJTklOR19QQVRURVJOXzEpOwogCWlmIChyZXQpCiAJCWdvdG8gc3RvcDsKQEAgLTMxNCw3ICszMTQsNyBAQAogCQlyZXQgPSBhdXhjaF9yZChlbmNvZGVyLCBEUF9MQU5FMF8xX1NUQVRVUywgc3RhdHVzLCAyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlOVl9ERUJVRyhkZXYsICJcdFx0c3RhdHVzOiAweCUwMnggMHglMDJ4XG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiXHRcdHN0YXR1czogMHglMDJ4IDB4JTAyeFxuIiwKIAkJCSBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJY3JfZG9uZSA9IHRydWU7CkBAIC0zNDYsNyArMzQ2LDcgQEAKIAkJZ290byBzdG9wOwogCiAJLyogY2hhbm5lbCBlcXVhbGlzYXRpb24gKi8KLQlOVl9ERUJVRyhkZXYsICJcdGJlZ2luIGVxXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXHRiZWdpbiBlcVxuIik7CiAJcmV0ID0gbm91dmVhdV9kcF9saW5rX3RyYWluX3NldChlbmNvZGVyLCBEUF9UUkFJTklOR19QQVRURVJOXzIpOwogCWlmIChyZXQpCiAJCWdvdG8gc3RvcDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXQgPSBhdXhjaF9yZChlbmNvZGVyLCBEUF9MQU5FMF8xX1NUQVRVUywgc3RhdHVzLCAzKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlOVl9ERUJVRyhkZXYsICJcdFx0c3RhdHVzOiAweCUwMnggMHglMDJ4XG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiXHRcdHN0YXR1czogMHglMDJ4IDB4JTAyeFxuIiwKIAkJCSBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJZXFfZG9uZSA9IHRydWU7CkBAIC0zOTUsOSArMzk1LDkgQEAKIAogCS8qIHJldHJ5IGF0IGEgbG93ZXIgc2V0dGluZywgaWYgcG9zc2libGUgKi8KIAlpZiAoIXJldCAmJiAhKGVxX2RvbmUgJiYgY3JfZG9uZSkpIHsKLQkJTlZfREVCVUcoZGV2LCAiXHR3ZSBmYWlsZWRcbiIpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiXHR3ZSBmYWlsZWRcbiIpOwogCQlpZiAobnZfZW5jb2Rlci0+ZHAubGlua19idyAhPSBEUF9MSU5LX0JXXzFfNjIpIHsKLQkJCU5WX0RFQlVHKGRldiwgInJldHJ5IGxpbmsgdHJhaW5pbmcgYXQgbG93IHJhdGVcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgInJldHJ5IGxpbmsgdHJhaW5pbmcgYXQgbG93IHJhdGVcbiIpOwogCQkJbnZfZW5jb2Rlci0+ZHAubGlua19idyA9IERQX0xJTktfQldfMV82MjsKIAkJCWdvdG8gdHJhaW47CiAJCX0KQEAgLTQxOCw3ICs0MTgsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAotCU5WX0RFQlVHKGRldiwgImVuY29kZXI6IGxpbmtfYncgJWQsIGxpbmtfbnIgJWRcbiIKKwlOVl9ERUJVR19LTVMoZGV2LCAiZW5jb2RlcjogbGlua19idyAlZCwgbGlua19uciAlZFxuIgogCQkgICAgICAiZGlzcGxheTogbGlua19idyAlZCwgbGlua19uciAlZCB2ZXJzaW9uIDB4JTAyeFxuIiwKIAkJIG52X2VuY29kZXItPmRjYi0+ZHBjb25mLmxpbmtfYncsCiAJCSBudl9lbmNvZGVyLT5kY2ItPmRwY29uZi5saW5rX25yLApAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJdWludDMyX3QgdG1wLCBjdHJsLCBzdGF0ID0gMCwgZGF0YTMyWzRdID0ge307CiAJaW50IHJldCA9IDAsIGksIGluZGV4ID0gYXV4Y2gtPnJkOwogCi0JTlZfREVCVUcoZGV2LCAiY2ggJWQgY21kICVkIGFkZHIgMHgleCBsZW4gJWRcbiIsIGluZGV4LCBjbWQsIGFkZHIsIGRhdGFfbnIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJjaCAlZCBjbWQgJWQgYWRkciAweCV4IGxlbiAlZFxuIiwgaW5kZXgsIGNtZCwgYWRkciwgZGF0YV9ucik7CiAKIAl0bXAgPSBudl9yZDMyKGRldiwgTlY1MF9BVVhDSF9DVFJMKGF1eGNoLT5yZCkpOwogCW52X3dyMzIoZGV2LCBOVjUwX0FVWENIX0NUUkwoYXV4Y2gtPnJkKSwgdG1wIHwgMHgwMDEwMDAwMCk7CkBAIC00NzIsNyArNDcyLDcgQEAKIAlpZiAoIShjbWQgJiAxKSkgewogCQltZW1jcHkoZGF0YTMyLCBkYXRhLCBkYXRhX25yKTsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJTlZfREVCVUcoZGV2LCAid3IgJWQ6IDB4JTA4eFxuIiwgaSwgZGF0YTMyW2ldKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJ3ciAlZDogMHglMDh4XG4iLCBpLCBkYXRhMzJbaV0pOwogCQkJbnZfd3IzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9PVVQoaW5kZXgsIGkpLCBkYXRhMzJbaV0pOwogCQl9CiAJfQpAQCAtNTA0LDcgKzUwNCw3IEBACiAJaWYgKGNtZCAmIDEpIHsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkJZGF0YTMyW2ldID0gbnZfcmQzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9JTihpbmRleCwgaSkpOwotCQkJTlZfREVCVUcoZGV2LCAicmQgJWQ6IDB4JTA4eFxuIiwgaSwgZGF0YTMyW2ldKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJyZCAlZDogMHglMDh4XG4iLCBpLCBkYXRhMzJbaV0pOwogCQl9CiAJCW1lbWNweShkYXRhLCBkYXRhMzIsIGRhdGFfbnIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCmluZGV4IDM1MjQ5YzMuLjA2ZWI5OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwpAQCAtMzUsNiArMzUsMTAgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAorTU9EVUxFX1BBUk1fREVTQyhjdHhmdywgIlVzZSBleHRlcm5hbCBmaXJtd2FyZSBibG9iIGZvciBncmN0eCBpbml0IChOVjQwKSIpOworaW50IG5vdXZlYXVfY3R4ZncgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKGN0eGZ3LCBub3V2ZWF1X2N0eGZ3LCBpbnQsIDA0MDApOworCiBNT0RVTEVfUEFSTV9ERVNDKG5vYWdwLCAiRGlzYWJsZSBBR1AiKTsKIGludCBub3V2ZWF1X25vYWdwOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vYWdwLCBub3V2ZWF1X25vYWdwLCBpbnQsIDA0MDApOwpAQCAtMjczLDcgKzI3Nyw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVsczsgaSsrKSB7CiAJCQljaGFuID0gZGV2X3ByaXYtPmZpZm9zW2ldOwotCQkJaWYgKCFjaGFuKQorCQkJaWYgKCFjaGFuIHx8ICFjaGFuLT5wdXNoYnVmX2JvKQogCQkJCWNvbnRpbnVlOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgTk9VVkVBVV9ETUFfU0tJUFM7IGorKykKQEAgLTM0MSw3ICszNDUsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gbm91dmVhdV90dG1fbW1hcCwKIAkJLnBvbGwgPSBkcm1fcG9sbCwKIAkJLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCA4OGI0YzdiLi41ZjhjYmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfcmVnLmgiCiAjaW5jbHVkZSAibm91dmVhdV9iaW9zLmgiCitzdHJ1Y3Qgbm91dmVhdV9ncmN0eDsKIAogI2RlZmluZSBNQVhfTlVNX0RDQl9FTlRSSUVTIDE2CiAKQEAgLTMxNyw2ICszMTgsNyBAQAogCWJvb2wgYWNjZWxfYmxvY2tlZDsKIAl2b2lkICpjdHhwcm9nOwogCXZvaWQgKmN0eHZhbHM7CisJaW50IGdyY3R4X3NpemU7CiAKIAlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJdm9pZCAoKnRha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTY0Nyw2ICs2NDksNyBAQAogZXh0ZXJuIGNoYXIgKm5vdXZlYXVfdHZfbm9ybTsKIGV4dGVybiBpbnQgbm91dmVhdV9yZWdfZGVidWc7CiBleHRlcm4gY2hhciAqbm91dmVhdV92YmlvczsKK2V4dGVybiBpbnQgbm91dmVhdV9jdHhmdzsKIAogLyogbm91dmVhdV9zdGF0ZS5jICovCiBleHRlcm4gdm9pZCBub3V2ZWF1X3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqKTsKQEAgLTk1OSw5ICs5NjIsNyBAQAogZXh0ZXJuIHZvaWQgbnY0MF9ncmFwaF9kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52NDBfZ3JhcGhfbG9hZF9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjQwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIGludCAgbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF92YWxzX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOworZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICopOwogCiAvKiBudjUwX2dyYXBoLmMgKi8KIGV4dGVybiBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52NTBfZ3JhcGhfZ3JjbGFzc1tdOwpAQCAtOTc1LDYgKzk3NiwxMiBAQAogZXh0ZXJuIGludCAgbnY1MF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52NTBfZ3JhcGhfY29udGV4dF9zd2l0Y2goc3RydWN0IGRybV9kZXZpY2UgKik7CiAKKy8qIG5vdXZlYXVfZ3JjdHguYyAqLworZXh0ZXJuIGludCAgbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqLAorCQkJCSAgICBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2dyY3R4X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKik7CisKIC8qIG52MDRfaW5zdG1lbS5jICovCiBleHRlcm4gaW50ICBudjA0X2luc3RtZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MDRfaW5zdG1lbV90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTEyMDcsMTQgKzEyMTQsMjQgQEAKIAkJCQkJcGNpX25hbWUoZC0+cGRldiksICMjYXJnKQogI2lmbmRlZiBOVl9ERUJVR19OT1RSQUNFCiAjZGVmaW5lIE5WX0RFQlVHKGQsIGZtdCwgYXJnLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChkcm1fZGVidWcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlOVl9QUklOVEsoS0VSTl9ERUJVRywgZCwgIiVzOiVkIC0gIiBmbXQsIF9fZnVuY19fLCAgICAgICAgICAgICBcCisJCQkgIF9fTElORV9fLCAjI2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgTlZfREVCVUdfS01TKGQsIGZtdCwgYXJnLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGRybV9kZWJ1ZyAmIERSTV9VVF9LTVMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCU5WX1BSSU5USyhLRVJOX0RFQlVHLCBkLCAiJXM6JWQgLSAiIGZtdCwgX19mdW5jX18sICAgICAgICAgICAgIFwKIAkJCSAgX19MSU5FX18sICMjYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgTlZfREVCVUcoZCwgZm10LCBhcmcuLi4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKGRybV9kZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGRybV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCU5WX1BSSU5USyhLRVJOX0RFQlVHLCBkLCBmbXQsICMjYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisjZGVmaW5lIE5WX0RFQlVHX0tNUyhkLCBmbXQsIGFyZy4uLikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfS01TKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQlOVl9QUklOVEsoS0VSTl9ERUJVRywgZCwgZm10LCAjI2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKaW5kZXggMzZlOGM1ZS4uODRhZjI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwpAQCAtNTgsNyArNTgsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKIAlpbnQgcmV0LCBpOwogCi0JaWYgKCFjaGFuLT5hY2NlbF9kb25lIHx8CisJaWYgKCFjaGFuIHx8ICFjaGFuLT5hY2NlbF9kb25lIHx8CiAJICAgIGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HIHx8CiAJICAgIGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpCiAJCXJldHVybiAwOwpAQCAtMzE4LDE0ICszMTgsMTYgQEAKIAlwYXItPm5vdXZlYXVfZmIgPSBub3V2ZWF1X2ZiOwogCXBhci0+ZGV2ID0gZGV2OwogCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7Ci0JY2FzZSBOVl81MDoKLQkJbnY1MF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7Ci0JCWJyZWFrOwotCX07CisJaWYgKGRldl9wcml2LT5jaGFubmVsKSB7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgeworCQljYXNlIE5WXzUwOgorCQkJbnY1MF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7CisJCQlicmVhazsKKwkJfTsKKwl9CiAKIAlub3V2ZWF1X2ZiY29uX3pmaWxsKGRldik7CiAKQEAgLTM0Nyw3ICszNDksNyBAQAogaW50CiBub3V2ZWF1X2ZiY29uX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCXJldHVybiBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsIDMyLCBub3V2ZWF1X2ZiY29uX2NyZWF0ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5ZjRjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ3JjdHguYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorCitzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nIHsKKwl1aW50MzJfdCBzaWduYXR1cmU7CisJdWludDhfdCAgdmVyc2lvbjsKKwl1aW50MTZfdCBsZW5ndGg7CisJdWludDMyX3QgZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBub3V2ZWF1X2N0eHZhbHMgeworCXVpbnQzMl90IHNpZ25hdHVyZTsKKwl1aW50OF90ICB2ZXJzaW9uOworCXVpbnQzMl90IGxlbmd0aDsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBvZmZzZXQ7CisJCXVpbnQzMl90IHZhbHVlOworCX0gZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2ludAorbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCWNvbnN0IGludCBjaGlwc2V0ID0gZGV2X3ByaXYtPmNoaXBzZXQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nICpjcDsKKwljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHh2YWxzICpjdjsKKwljaGFyIG5hbWVbMzJdOworCWludCByZXQsIGk7CisKKwlpZiAocGdyYXBoLT5hY2NlbF9ibG9ja2VkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHByb2ciLCBjaGlwc2V0KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHByb2cgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcGdyYXBoLT5jdHhwcm9nID0ga21hbGxvYyhmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCQlOVl9FUlJPUihkZXYsICJPT00gY29weWluZyBjdHhwcm9nXG4iKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtY3B5KHBncmFwaC0+Y3R4cHJvZywgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCQljcCA9IHBncmFwaC0+Y3R4cHJvZzsKKwkJaWYgKGxlMzJfdG9fY3B1KGNwLT5zaWduYXR1cmUpICE9IDB4NTA0MzU2NGUgfHwKKwkJICAgIGNwLT52ZXJzaW9uICE9IDAgfHwKKwkJICAgIGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA3KSAvIDQpKSB7CisJCQlOVl9FUlJPUihkZXYsICJjdHhwcm9nIGludmFsaWRcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCX0KKworCWlmICghcGdyYXBoLT5jdHh2YWxzKSB7CisJCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHZhbHMiLCBjaGlwc2V0KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHZhbHMgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlwZ3JhcGgtPmN0eHZhbHMgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbWNweShwZ3JhcGgtPmN0eHZhbHMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisKKwkJY3YgPSAodm9pZCAqKXBncmFwaC0+Y3R4dmFsczsKKwkJaWYgKGxlMzJfdG9fY3B1KGN2LT5zaWduYXR1cmUpICE9IDB4NTY0MzU2NGUgfHwKKwkJICAgIGN2LT52ZXJzaW9uICE9IDAgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA5KSAvIDgpKSB7CisJCQlOVl9FUlJPUihkZXYsICJjdHh2YWxzIGludmFsaWRcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCX0KKworCWNwID0gcGdyYXBoLT5jdHhwcm9nOworCisJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9JTkRFWCwgMCk7CisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfREFUQSwKKwkJCWxlMzJfdG9fY3B1KGNwLT5kYXRhW2ldKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorbm91dmVhdV9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKworCWlmIChwZ3JhcGgtPmN0eHByb2cpIHsKKwkJa2ZyZWUocGdyYXBoLT5jdHhwcm9nKTsKKwkJcGdyYXBoLT5jdHhwcm9nID0gTlVMTDsKKwl9CisKKwlpZiAocGdyYXBoLT5jdHh2YWxzKSB7CisJCWtmcmVlKHBncmFwaC0+Y3R4cHJvZyk7CisJCXBncmFwaC0+Y3R4dmFscyA9IE5VTEw7CisJfQorfQorCit2b2lkCitub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2N0eHZhbHMgKmN2ID0gcGdyYXBoLT5jdHh2YWxzOworCWludCBpOworCisJaWYgKCFjdikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpOyBpKyspCisJCW52X3dvMzIoZGV2LCBjdHgsIGxlMzJfdG9fY3B1KGN2LT5kYXRhW2ldLm9mZnNldCksCisJCQlsZTMyX3RvX2NwdShjdi0+ZGF0YVtpXS52YWx1ZSkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzljNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmgKQEAgLTAsMCArMSwxMzMgQEAKKyNpZm5kZWYgX19OT1VWRUFVX0dSQ1RYX0hfXworI2RlZmluZSBfX05PVVZFQVVfR1JDVFhfSF9fCisKK3N0cnVjdCBub3V2ZWF1X2dyY3R4IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJZW51bSB7CisJCU5PVVZFQVVfR1JDVFhfUFJPRywKKwkJTk9VVkVBVV9HUkNUWF9WQUxTCisJfSBtb2RlOworCXZvaWQgKmRhdGE7CisKKwl1aW50MzJfdCBjdHhwcm9nX21heDsKKwl1aW50MzJfdCBjdHhwcm9nX2xlbjsKKwl1aW50MzJfdCBjdHhwcm9nX3JlZzsKKwlpbnQgICAgICBjdHhwcm9nX2xhYmVsWzMyXTsKKwl1aW50MzJfdCBjdHh2YWxzX3BvczsKKwl1aW50MzJfdCBjdHh2YWxzX2Jhc2U7Cit9OworCisjaWZkZWYgQ1BfQ1RYCitzdGF0aWMgaW5saW5lIHZvaWQKK2NwX291dChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4LCB1aW50MzJfdCBpbnN0KQoreworCXVpbnQzMl90ICpjdHhwcm9nID0gY3R4LT5kYXRhOworCisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1BST0cpCisJCXJldHVybjsKKworCUJVR19PTihjdHgtPmN0eHByb2dfbGVuID09IGN0eC0+Y3R4cHJvZ19tYXgpOworCWN0eHByb2dbY3R4LT5jdHhwcm9nX2xlbisrXSA9IGluc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3BfbHNyKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIHVpbnQzMl90IHZhbCkKK3sKKwljcF9vdXQoY3R4LCBDUF9MT0FEX1NSIHwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcF9jdHgoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCBsZW5ndGgpCit7CisJY3R4LT5jdHhwcm9nX3JlZyA9IChyZWcgLSAweDAwNDAwMDAwKSA+PiAyOworCisJY3R4LT5jdHh2YWxzX2Jhc2UgPSBjdHgtPmN0eHZhbHNfcG9zOworCWN0eC0+Y3R4dmFsc19wb3MgPSBjdHgtPmN0eHZhbHNfYmFzZSArIGxlbmd0aDsKKworCWlmIChsZW5ndGggPiAoQ1BfQ1RYX0NPVU5UID4+IENQX0NUWF9DT1VOVF9TSElGVCkpIHsKKwkJY3BfbHNyKGN0eCwgbGVuZ3RoKTsKKwkJbGVuZ3RoID0gMDsKKwl9CisKKwljcF9vdXQoY3R4LCBDUF9DVFggfCAobGVuZ3RoIDw8IENQX0NUWF9DT1VOVF9TSElGVCkgfCBjdHgtPmN0eHByb2dfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcF9uYW1lKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBuYW1lKQoreworCXVpbnQzMl90ICpjdHhwcm9nID0gY3R4LT5kYXRhOworCWludCBpOworCisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1BST0cpCisJCXJldHVybjsKKworCWN0eC0+Y3R4cHJvZ19sYWJlbFtuYW1lXSA9IGN0eC0+Y3R4cHJvZ19sZW47CisJZm9yIChpID0gMDsgaSA8IGN0eC0+Y3R4cHJvZ19sZW47IGkrKykgeworCQlpZiAoKGN0eHByb2dbaV0gJiAweGZmZjAwMDAwKSAhPSAweGZmNDAwMDAwKQorCQkJY29udGludWU7CisJCWlmICgoY3R4cHJvZ1tpXSAmIENQX0JSQV9JUCkgIT0gKChuYW1lKSA8PCBDUF9CUkFfSVBfU0hJRlQpKQorCQkJY29udGludWU7CisJCWN0eHByb2dbaV0gPSAoY3R4cHJvZ1tpXSAmIDB4MDBmZjAwZmYpIHwKKwkJCSAgICAgKGN0eC0+Y3R4cHJvZ19sZW4gPDwgQ1BfQlJBX0lQX1NISUZUKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2NwX2JyYShzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4LCB1MzIgbW9kLCBpbnQgZmxhZywgaW50IHN0YXRlLCBpbnQgbmFtZSkKK3sKKwlpbnQgaXAgPSAwOworCisJaWYgKG1vZCAhPSAyKSB7CisJCWlwID0gY3R4LT5jdHhwcm9nX2xhYmVsW25hbWVdIDw8IENQX0JSQV9JUF9TSElGVDsKKwkJaWYgKGlwID09IDApCisJCQlpcCA9IDB4ZmYwMDAwMDAgfCAobmFtZSA8PCBDUF9CUkFfSVBfU0hJRlQpOworCX0KKworCWNwX291dChjdHgsIENQX0JSQSB8IChtb2QgPDwgMTgpIHwgaXAgfCBmbGFnIHwKKwkJICAgIChzdGF0ZSA/IDAgOiBDUF9CUkFfSUZfQ0xFQVIpKTsKK30KKyNkZWZpbmUgY3BfYnJhKGMsZixzLG4pIF9jcF9icmEoKGMpLCAwLCBDUF9GTEFHXyMjZiwgQ1BfRkxBR18jI2YjI18jI3MsIG4pCisjaWZkZWYgQ1BfQlJBX01PRAorI2RlZmluZSBjcF9jYWwoYyxmLHMsbikgX2NwX2JyYSgoYyksIDEsIENQX0ZMQUdfIyNmLCBDUF9GTEFHXyMjZiMjXyMjcywgbikKKyNkZWZpbmUgY3BfcmV0KGMsZixzKSBfY3BfYnJhKChjKSwgMiwgQ1BfRkxBR18jI2YsIENQX0ZMQUdfIyNmIyNfIyNzLCAwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2NwX3dhaXQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgaW50IGZsYWcsIGludCBzdGF0ZSkKK3sKKwljcF9vdXQoY3R4LCBDUF9XQUlUIHwgZmxhZyB8IChzdGF0ZSA/IENQX1dBSVRfU0VUIDogMCkpOworfQorI2RlZmluZSBjcF93YWl0KGMsZixzKSBfY3Bfd2FpdCgoYyksIENQX0ZMQUdfIyNmLCBDUF9GTEFHXyMjZiMjXyMjcykKKworc3RhdGljIGlubGluZSB2b2lkCitfY3Bfc2V0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBmbGFnLCBpbnQgc3RhdGUpCit7CisJY3Bfb3V0KGN0eCwgQ1BfU0VUIHwgZmxhZyB8IChzdGF0ZSA/IENQX1NFVF8xIDogMCkpOworfQorI2RlZmluZSBjcF9zZXQoYyxmLHMpIF9jcF9zZXQoKGMpLCBDUF9GTEFHXyMjZiwgQ1BfRkxBR18jI2YjI18jI3MpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3BfcG9zKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBvZmZzZXQpCit7CisJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldDsKKwljdHgtPmN0eHZhbHNfYmFzZSA9IGN0eC0+Y3R4dmFsc19wb3M7CisKKwljcF9sc3IoY3R4LCBjdHgtPmN0eHZhbHNfcG9zKTsKKwljcF9vdXQoY3R4LCBDUF9TRVRfQ09OVEVYVF9QT0lOVEVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitncl9kZWYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpCit7CisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1ZBTFMpCisJCXJldHVybjsKKworCXJlZyA9IChyZWcgLSAweDAwNDAwMDAwKSAvIDQ7CisJcmVnID0gKHJlZyAtIGN0eC0+Y3R4cHJvZ19yZWcpICsgY3R4LT5jdHh2YWxzX2Jhc2U7CisKKwludl93bzMyKGN0eC0+ZGV2LCBjdHgtPmRhdGEsIHJlZywgdmFsKTsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaW9jMzIuYwppbmRleCBhMmMzMGY0Li40NzViYTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pb2MzMi5jCkBAIC02MSwxMiArNjEsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUobWdhX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IG5vdXZlYXVfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogI2VuZGlmCi0JbG9ja19rZXJuZWwoKTsJICAvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKShmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IDJlZDQxZDMuLmU3NmVjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTI5OSw5NCArMjk5LDEzIEBACiAJCXJldHVybiBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOwogfQogCi1pbnQKLW5vdXZlYXVfY2FyZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50Citub3V2ZWF1X2NhcmRfaW5pdF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZTsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmdwdW9iajsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAicHJldiBzdGF0ZSA9ICVkXG4iLCBkZXZfcHJpdi0+aW5pdF9zdGF0ZSk7Ci0KLQlpZiAoZGV2X3ByaXYtPmluaXRfc3RhdGUgPT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9ORSkKLQkJcmV0dXJuIDA7Ci0KLQl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKTsKLQotCS8qIEluaXRpYWxpc2UgaW50ZXJuYWwgZHJpdmVyIEFQSSBob29rcyAqLwotCXJldCA9IG5vdXZlYXVfaW5pdF9lbmdpbmVfcHRycyhkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7Ci0JZGV2X3ByaXYtPmluaXRfc3RhdGUgPSBOT1VWRUFVX0NBUkRfSU5JVF9GQUlMRUQ7Ci0KLQkvKiBQYXJzZSBCSU9TIHRhYmxlcyAvIFJ1biBpbml0IHRhYmxlcyBpZiBjYXJkIG5vdCBQT1NUZWQgKi8KLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlyZXQgPSBub3V2ZWF1X2Jpb3NfaW5pdChkZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9lYXJseV9pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIEluaXRpYWxpc2UgaW5zdGFuY2UgbWVtb3J5LCBtdXN0IGhhcHBlbiBiZWZvcmUgbWVtX2luaXQgc28gd2UKLQkgKiBrbm93IGV4YWN0bHkgaG93IG11Y2ggVlJBTSB3ZSdyZSBhYmxlIHRvIHVzZSBmb3IgIm5vcm1hbCIKLQkgKiBwdXJwb3Nlcy4KLQkgKi8KLQlyZXQgPSBlbmdpbmUtPmluc3RtZW0uaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBTZXR1cCB0aGUgbWVtb3J5IG1hbmFnZXIgKi8KLQlyZXQgPSBub3V2ZWF1X21lbV9pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2luaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogUE1DICovCi0JcmV0ID0gZW5naW5lLT5tYy5pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBUSU1FUiAqLwotCXJldCA9IGVuZ2luZS0+dGltZXIuaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBQRkIgKi8KLQlyZXQgPSBlbmdpbmUtPmZiLmluaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogUEdSQVBIICovCi0JcmV0ID0gZW5naW5lLT5ncmFwaC5pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBGSUZPICovCi0JcmV0ID0gZW5naW5lLT5maWZvLmluaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogdGhpcyBjYWxsIGlycV9wcmVpbnN0YWxsLCByZWdpc3RlciBpcnEgaGFuZGxlciBhbmQKLQkgKiBjYWxsIGlycV9wb3N0aW5zdGFsbAotCSAqLwotCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogd2hhdCBhYm91dCBQVklERU8vUENSVEMvUFJBTURBQyBldGM/ICovCi0KIAlyZXQgPSBub3V2ZWF1X2NoYW5uZWxfYWxsb2MoZGV2LCAmZGV2X3ByaXYtPmNoYW5uZWwsCiAJCQkJICAgIChzdHJ1Y3QgZHJtX2ZpbGUgKiktMiwKIAkJCQkgICAgTnZEbWFGQiwgTnZEbWFUVCk7CkBAIC0zOTksMzkgKzMxOCwxMzMgQEAKIAkJCQkgICAgIE5WX0RNQV9BQ0NFU1NfUlcsIE5WX0RNQV9UQVJHRVRfVklETUVNLAogCQkJCSAgICAgJmdwdW9iaik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXRfZXJyOwogCiAJcmV0ID0gbm91dmVhdV9ncHVvYmpfcmVmX2FkZChkZXYsIGRldl9wcml2LT5jaGFubmVsLCBOdkRtYVZSQU0sCiAJCQkJICAgICBncHVvYmosIE5VTEwpOwotCWlmIChyZXQpIHsKLQkJbm91dmVhdV9ncHVvYmpfZGVsKGRldiwgJmdwdW9iaik7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmIChyZXQpCisJCWdvdG8gb3V0X2VycjsKIAogCWdwdW9iaiA9IE5VTEw7CiAJcmV0ID0gbm91dmVhdV9ncHVvYmpfZ2FydF9kbWFfbmV3KGRldl9wcml2LT5jaGFubmVsLCAwLAogCQkJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9zaXplLAogCQkJCQkgIE5WX0RNQV9BQ0NFU1NfUlcsICZncHVvYmosIE5VTEwpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X2VycjsKIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX3JlZl9hZGQoZGV2LCBkZXZfcHJpdi0+Y2hhbm5lbCwgTnZEbWFHQVJULAogCQkJCSAgICAgZ3B1b2JqLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCW5vdXZlYXVfZ3B1b2JqX2RlbChkZXYsICZncHVvYmopOwotCQlyZXR1cm4gcmV0OworCWlmIChyZXQpCisJCWdvdG8gb3V0X2VycjsKKworCXJldHVybiAwOworb3V0X2VycjoKKwlub3V2ZWF1X2dwdW9ial9kZWwoZGV2LCAmZ3B1b2JqKTsKKwlub3V2ZWF1X2NoYW5uZWxfZnJlZShkZXZfcHJpdi0+Y2hhbm5lbCk7CisJZGV2X3ByaXYtPmNoYW5uZWwgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK2ludAorbm91dmVhdV9jYXJkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2VuZ2luZSAqZW5naW5lOworCWludCByZXQ7CisKKwlOVl9ERUJVRyhkZXYsICJwcmV2IHN0YXRlID0gJWRcbiIsIGRldl9wcml2LT5pbml0X3N0YXRlKTsKKworCWlmIChkZXZfcHJpdi0+aW5pdF9zdGF0ZSA9PSBOT1VWRUFVX0NBUkRfSU5JVF9ET05FKQorCQlyZXR1cm4gMDsKKworCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBkZXYsIE5VTEwsIG5vdXZlYXVfdmdhX3NldF9kZWNvZGUpOworCisJLyogSW5pdGlhbGlzZSBpbnRlcm5hbCBkcml2ZXIgQVBJIGhvb2tzICovCisJcmV0ID0gbm91dmVhdV9pbml0X2VuZ2luZV9wdHJzKGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJZW5naW5lID0gJmRldl9wcml2LT5lbmdpbmU7CisJZGV2X3ByaXYtPmluaXRfc3RhdGUgPSBOT1VWRUFVX0NBUkRfSU5JVF9GQUlMRUQ7CisKKwkvKiBQYXJzZSBCSU9TIHRhYmxlcyAvIFJ1biBpbml0IHRhYmxlcyBpZiBjYXJkIG5vdCBQT1NUZWQgKi8KKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlyZXQgPSBub3V2ZWF1X2Jpb3NfaW5pdChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfZWFybHlfaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Jpb3M7CisKKwkvKiBJbml0aWFsaXNlIGluc3RhbmNlIG1lbW9yeSwgbXVzdCBoYXBwZW4gYmVmb3JlIG1lbV9pbml0IHNvIHdlCisJICoga25vdyBleGFjdGx5IGhvdyBtdWNoIFZSQU0gd2UncmUgYWJsZSB0byB1c2UgZm9yICJub3JtYWwiCisJICogcHVycG9zZXMuCisJICovCisJcmV0ID0gZW5naW5lLT5pbnN0bWVtLmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9ncHVvYmpfZWFybHk7CisKKwkvKiBTZXR1cCB0aGUgbWVtb3J5IG1hbmFnZXIgKi8KKwlyZXQgPSBub3V2ZWF1X21lbV9pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaW5zdG1lbTsKKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2luaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9tZW07CisKKwkvKiBQTUMgKi8KKwlyZXQgPSBlbmdpbmUtPm1jLmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9ncHVvYmo7CisKKwkvKiBQVElNRVIgKi8KKwlyZXQgPSBlbmdpbmUtPnRpbWVyLmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9tYzsKKworCS8qIFBGQiAqLworCXJldCA9IGVuZ2luZS0+ZmIuaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3RpbWVyOworCisJLyogUEdSQVBIICovCisJcmV0ID0gZW5naW5lLT5ncmFwaC5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZmI7CisKKwkvKiBQRklGTyAqLworCXJldCA9IGVuZ2luZS0+Zmlmby5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ3JhcGg7CisKKwkvKiB0aGlzIGNhbGwgaXJxX3ByZWluc3RhbGwsIHJlZ2lzdGVyIGlycSBoYW5kbGVyIGFuZAorCSAqIGNhbGwgaXJxX3Bvc3RpbnN0YWxsCisJICovCisJcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZmlmbzsKKworCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2lycTsKKworCS8qIHdoYXQgYWJvdXQgUFZJREVPL1BDUlRDL1BSQU1EQUMgZXRjPyAqLworCisJaWYgKCFlbmdpbmUtPmdyYXBoLmFjY2VsX2Jsb2NrZWQpIHsKKwkJcmV0ID0gbm91dmVhdV9jYXJkX2luaXRfY2hhbm5lbChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfaXJxOwogCX0KIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKQogCQkJcmV0ID0gbnY1MF9kaXNwbGF5X2NyZWF0ZShkZXYpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlyZXQgPSBudjA0X2Rpc3BsYXlfY3JlYXRlKGRldik7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2lycTsKIAl9CiAKIAlyZXQgPSBub3V2ZWF1X2JhY2tsaWdodF9pbml0KGRldik7CkBAIC00NDQsNiArNDU3LDMyIEBACiAJCWRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoZGV2KTsKIAogCXJldHVybiAwOworCitvdXRfaXJxOgorCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CitvdXRfZmlmbzoKKwllbmdpbmUtPmZpZm8udGFrZWRvd24oZGV2KTsKK291dF9ncmFwaDoKKwllbmdpbmUtPmdyYXBoLnRha2Vkb3duKGRldik7CitvdXRfZmI6CisJZW5naW5lLT5mYi50YWtlZG93bihkZXYpOworb3V0X3RpbWVyOgorCWVuZ2luZS0+dGltZXIudGFrZWRvd24oZGV2KTsKK291dF9tYzoKKwllbmdpbmUtPm1jLnRha2Vkb3duKGRldik7CitvdXRfZ3B1b2JqOgorCW5vdXZlYXVfZ3B1b2JqX3Rha2Vkb3duKGRldik7CitvdXRfbWVtOgorCW5vdXZlYXVfbWVtX2Nsb3NlKGRldik7CitvdXRfaW5zdG1lbToKKwllbmdpbmUtPmluc3RtZW0udGFrZWRvd24oZGV2KTsKK291dF9ncHVvYmpfZWFybHk6CisJbm91dmVhdV9ncHVvYmpfbGF0ZV90YWtlZG93bihkZXYpOworb3V0X2Jpb3M6CisJbm91dmVhdV9iaW9zX3Rha2Vkb3duKGRldik7CitvdXQ6CisJdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG5vdXZlYXVfY2FyZF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwppbmRleCBiOTEzNjM2Li5kMmYxNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwpAQCAtMTQzLDEwICsxNDMsMTAgQEAKIAlzdGF0ZS0+cGxsc2VsIHw9IG52X2NydGMtPmluZGV4ID8gUExMU0VMX1ZQTEwyX01BU0sgOiBQTExTRUxfVlBMTDFfTUFTSzsKIAogCWlmIChwdi0+Tk0yKQotCQlOVl9UUkFDRShkZXYsICJ2cGxsOiBuMSAlZCBuMiAlZCBtMSAlZCBtMiAlZCBsb2cycCAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgInZwbGw6IG4xICVkIG4yICVkIG0xICVkIG0yICVkIGxvZzJwICVkXG4iLAogCQkJIHB2LT5OMSwgcHYtPk4yLCBwdi0+TTEsIHB2LT5NMiwgcHYtPmxvZzJQKTsKIAllbHNlCi0JCU5WX1RSQUNFKGRldiwgInZwbGw6IG4gJWQgbSAlZCBsb2cycCAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgInZwbGw6IG4gJWQgbSAlZCBsb2cycCAlZFxuIiwKIAkJCSBwdi0+TjEsIHB2LT5NMSwgcHYtPmxvZzJQKTsKIAogCW52X2NydGMtPmN1cnNvci5zZXRfb2Zmc2V0KG52X2NydGMsIG52X2NydGMtPmN1cnNvci5vZmZzZXQpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJdW5zaWduZWQgY2hhciBzZXExID0gMCwgY3J0YzE3ID0gMDsKIAl1bnNpZ25lZCBjaGFyIGNydGMxQTsKIAotCU5WX1RSQUNFKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIENSVEMgJWRcbiIsIG1vZGUsCisJTlZfREVCVUdfS01TKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIENSVEMgJWRcbiIsIG1vZGUsCiAJCQkJCQkJbnZfY3J0Yy0+aW5kZXgpOwogCiAJaWYgKG52X2NydGMtPmxhc3RfZHBtcyA9PSBtb2RlKSAvKiBEb24ndCBkbyB1bm5lY2VzYXJ5IG1vZGUgY2hhbmdlcy4gKi8KQEAgLTYwMyw3ICs2MDMsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBub3V2ZWF1X2NydGMoY3J0Yyk7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCU5WX0RFQlVHKGRldiwgIkNUUkMgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJDVFJDIG1vZGUgb24gQ1JUQyAlZDpcbiIsIG52X2NydGMtPmluZGV4KTsKIAlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFkanVzdGVkX21vZGUpOwogCiAJLyogdW5sb2NrIG11c3QgY29tZSBhZnRlciB0dXJuaW5nIG9mZiBGUF9UR19DT05UUk9MIGluIG91dHB1dF9wcmVwYXJlICovCkBAIC03MDMsNyArNzAzLDcgQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpudl9jcnRjID0gbm91dmVhdV9jcnRjKGNydGMpOwogCi0JTlZfREVCVUcoY3J0Yy0+ZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoY3J0Yy0+ZGV2LCAiXG4iKTsKIAogCWlmICghbnZfY3J0YykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKaW5kZXggYTVmYTUxNy4uZDlmMzI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAlOVldyaXRlVmdhU2VxKGRldiwgMCwgTlZfVklPX1NSX0NMT0NLX0lOREVYLCBzYXZlZF9zZXExKTsKIAogCWlmIChibHVlID09IDB4MTgpIHsKLQkJTlZfVFJBQ0UoZGV2LCAiTG9hZCBkZXRlY3RlZCBvbiBoZWFkIEFcbiIpOworCQlOVl9JTkZPKGRldiwgIkxvYWQgZGV0ZWN0ZWQgb24gaGVhZCBBXG4iKTsKIAkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCX0KIApAQCAtMzUwLDE0ICszNTAsMTAgQEAKIAkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0Jc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGhlYWQgPSBub3V2ZWF1X2NydGMoZW5jb2Rlci0+Y3J0YyktPmluZGV4OwogCi0JTlZfVFJBQ0UoZGV2LCAiJXMgY2FsbGVkIGZvciBlbmNvZGVyICVkXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgbnZfZW5jb2Rlci0+ZGNiLT5pbmRleCk7Ci0KIAlpZiAobnZfZ2Y0X2Rpc3BfYXJjaChkZXYpKSB7CiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqcmViaW5kOwogCQl1aW50MzJfdCBkYWNfb2Zmc2V0ID0gbnYwNF9kYWNfb3V0cHV0X29mZnNldChlbmNvZGVyKTsKQEAgLTQ2Niw3ICs0NjIsNyBAQAogewogCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcik7CiAKLQlOVl9ERUJVRyhlbmNvZGVyLT5kZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhlbmNvZGVyLT5kZXYsICJcbiIpOwogCiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKIAlrZnJlZShudl9lbmNvZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCmluZGV4IGU1YjMzMzMuLjQ4M2Y4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm91dHB1dF9tb2RlID0gJm52X2VuY29kZXItPm1vZGU7CiAJdWludDMyX3QgbW9kZV9yYXRpbywgcGFuZWxfcmF0aW87CiAKLQlOVl9ERUJVRyhkZXYsICJPdXRwdXQgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJPdXRwdXQgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOwogCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUob3V0cHV0X21vZGUpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgRlAgcmVnaXN0ZXJzIGluIHRoaXMgQ1JUQy4gKi8KQEAgLTQxMyw3ICs0MTMsOSBAQAogCXN0cnVjdCBkY2JfZW50cnkgKmRjYmUgPSBudl9lbmNvZGVyLT5kY2I7CiAJaW50IGhlYWQgPSBub3V2ZWF1X2NydGMoZW5jb2Rlci0+Y3J0YyktPmluZGV4OwogCi0JTlZfVFJBQ0UoZGV2LCAiJXMgY2FsbGVkIGZvciBlbmNvZGVyICVkXG4iLCBfX2Z1bmNfXywgbnZfZW5jb2Rlci0+ZGNiLT5pbmRleCk7CisJTlZfSU5GTyhkZXYsICJPdXRwdXQgJXMgaXMgcnVubmluZyBvbiBDUlRDICVkIHVzaW5nIG91dHB1dCAlY1xuIiwKKwkJZHJtX2dldF9jb25uZWN0b3JfbmFtZSgmbm91dmVhdV9lbmNvZGVyX2Nvbm5lY3Rvcl9nZXQobnZfZW5jb2RlciktPmJhc2UpLAorCQludl9jcnRjLT5pbmRleCwgJ0AnICsgZmZzKG52X2VuY29kZXItPmRjYi0+b3IpKTsKIAogCWlmIChkY2JlLT50eXBlID09IE9VVFBVVF9UTURTKQogCQlydW5fdG1kc190YWJsZShkZXYsIGRjYmUsIGhlYWQsIG52X2VuY29kZXItPm1vZGUuY2xvY2spOwpAQCAtNTUwLDcgKzU1Miw3IEBACiB7CiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKG52X2VuY29kZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYwppbmRleCBiNDdjNzU3Li5lZjc3MjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYwpAQCAtOTksMTAgKzk5LDExIEBACiAJdWludDE2X3QgY29ubmVjdG9yWzE2XSA9IHsgMCB9OwogCWludCBpLCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJaWYgKG52X3R3b19oZWFkcyhkZXYpKQogCQludjA0X2Rpc3BsYXlfc3RvcmVfaW5pdGlhbF9oZWFkX293bmVyKGRldik7CisJbm91dmVhdV9od19zYXZlX3ZnYV9mb250cyhkZXYsIDEpOwogCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKIAlkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19tb2RlX3Byb3BlcnR5KGRldik7CkBAIC0yMDMsOCArMjA0LDYgQEAKIAkvKiBTYXZlIHByZXZpb3VzIHN0YXRlICovCiAJTlZMb2NrVmdhQ3J0Y3MoZGV2LCBmYWxzZSk7CiAKLQlub3V2ZWF1X2h3X3NhdmVfdmdhX2ZvbnRzKGRldiwgMSk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKIAkJY3J0Yy0+ZnVuY3MtPnNhdmUoY3J0Yyk7CiAKQEAgLTIyMyw3ICsyMjIsNyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJLyogVHVybiBldmVyeSBDUlRDIG9mZi4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewpAQCAtMjQ2LDkgKzI0NSw5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCiAJCWNydGMtPmZ1bmNzLT5yZXN0b3JlKGNydGMpOwogCi0Jbm91dmVhdV9od19zYXZlX3ZnYV9mb250cyhkZXYsIDApOwotCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKKworCW5vdXZlYXVfaHdfc2F2ZV92Z2FfZm9udHMoZGV2LCAwKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jCmluZGV4IDM5NmVlOTIuLmQ1NjFkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2dyYXBoLmMKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiAJbnZfd2kzMihkZXYsIGluc3RhbmNlLCB0bXApOwogCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfU1dJVENIMSwgdG1wKTsKLQludl93cjMyKGRldiwgTlYwNF9QR1JBUEhfQ1RYX0NBQ0hFMSArIHN1YmMsIHRtcCk7CisJbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9DQUNIRTEgKyAoc3ViYzw8MiksIHRtcCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZ3JhcGguYwppbmRleCA2YmY2ODA0Li42ODcwZTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9ncmFwaC5jCkBAIC0zODksNDkgKzM4OSw1MCBAQAogCWludCBudjEwW0FSUkFZX1NJWkUobnYxMF9ncmFwaF9jdHhfcmVncyldOwogCWludCBudjE3W0FSUkFZX1NJWkUobnYxN19ncmFwaF9jdHhfcmVncyldOwogCXN0cnVjdCBwaXBlX3N0YXRlIHBpcGVfc3RhdGU7CisJdWludDMyX3QgbG1hX3dpbmRvd1s0XTsKIH07CiAKKyNkZWZpbmUgUElQRV9TQVZFKGRldiwgc3RhdGUsIGFkZHIpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpbnQgX19pOwkJCQkJCVwKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgYWRkcik7CQlcCisJCWZvciAoX19pID0gMDsgX19pIDwgQVJSQVlfU0laRShzdGF0ZSk7IF9faSsrKQkJXAorCQkJc3RhdGVbX19pXSA9IG52X3JkMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBQSVBFX1JFU1RPUkUoZGV2LCBzdGF0ZSwgYWRkcikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBfX2k7CQkJCQkJXAorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCBhZGRyKTsJCVwKKwkJZm9yIChfX2kgPSAwOyBfX2kgPCBBUlJBWV9TSVpFKHN0YXRlKTsgX19pKyspCQlcCisJCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCBzdGF0ZVtfX2ldKTsgXAorCX0gd2hpbGUgKDApCisKIHN0YXRpYyB2b2lkIG52MTBfZ3JhcGhfc2F2ZV9waXBlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZ3JhcGhfc3RhdGUgKnBncmFwaF9jdHggPSBjaGFuLT5wZ3JhcGhfY3R4OwotCXN0cnVjdCBwaXBlX3N0YXRlICpmaWZvX3BpcGVfc3RhdGUgPSAmcGdyYXBoX2N0eC0+cGlwZV9zdGF0ZTsKLQlpbnQgaTsKLSNkZWZpbmUgUElQRV9TQVZFKGFkZHIpIFwKLQlkbyB7IFwKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgYWRkcik7IFwKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmlmb19waXBlX3N0YXRlLT5waXBlXyMjYWRkcik7IGkrKykgXAotCQkJZmlmb19waXBlX3N0YXRlLT5waXBlXyMjYWRkcltpXSA9IG52X3JkMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEpOyBcCi0JfSB3aGlsZSAoMCkKKwlzdHJ1Y3QgcGlwZV9zdGF0ZSAqcGlwZSA9ICZwZ3JhcGhfY3R4LT5waXBlX3N0YXRlOwogCi0JUElQRV9TQVZFKDB4NDQwMCk7Ci0JUElQRV9TQVZFKDB4MDIwMCk7Ci0JUElQRV9TQVZFKDB4NjQwMCk7Ci0JUElQRV9TQVZFKDB4NjgwMCk7Ci0JUElQRV9TQVZFKDB4NmMwMCk7Ci0JUElQRV9TQVZFKDB4NzAwMCk7Ci0JUElQRV9TQVZFKDB4NzQwMCk7Ci0JUElQRV9TQVZFKDB4NzgwMCk7Ci0JUElQRV9TQVZFKDB4MDA0MCk7Ci0JUElQRV9TQVZFKDB4MDAwMCk7Ci0KLSN1bmRlZiBQSVBFX1NBVkUKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NDQwMCwgMHg0NDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4MDIwMCwgMHgwMjAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NjQwMCwgMHg2NDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NjgwMCwgMHg2ODAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NmMwMCwgMHg2YzAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NzAwMCwgMHg3MDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NzQwMCwgMHg3NDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NzgwMCwgMHg3ODAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4MDA0MCwgMHgwMDQwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4MDAwMCwgMHgwMDAwKTsKIH0KIAogc3RhdGljIHZvaWQgbnYxMF9ncmFwaF9sb2FkX3BpcGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBncmFwaF9zdGF0ZSAqcGdyYXBoX2N0eCA9IGNoYW4tPnBncmFwaF9jdHg7Ci0Jc3RydWN0IHBpcGVfc3RhdGUgKmZpZm9fcGlwZV9zdGF0ZSA9ICZwZ3JhcGhfY3R4LT5waXBlX3N0YXRlOwotCWludCBpOworCXN0cnVjdCBwaXBlX3N0YXRlICpwaXBlID0gJnBncmFwaF9jdHgtPnBpcGVfc3RhdGU7CiAJdWludDMyX3QgeGZtb2RlMCwgeGZtb2RlMTsKLSNkZWZpbmUgUElQRV9SRVNUT1JFKGFkZHIpIFwKLQlkbyB7IFwKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgYWRkcik7IFwKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmlmb19waXBlX3N0YXRlLT5waXBlXyMjYWRkcik7IGkrKykgXAotCQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgZmlmb19waXBlX3N0YXRlLT5waXBlXyMjYWRkcltpXSk7IFwKLQl9IHdoaWxlICgwKQotCisJaW50IGk7CiAKIAlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKIAkvKiBYWFggY2hlY2sgaGFpa3UgY29tbWVudHMgKi8KQEAgLTQ1NywyNCArNDU4LDIyIEBACiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgwMDAwMDAwOCk7CiAKIAotCVBJUEVfUkVTVE9SRSgweDAyMDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHgwMjAwLCAweDAyMDApOwogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwogCiAJLyogcmVzdG9yZSBYRk1PREUgKi8KIAludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMCwgeGZtb2RlMCk7CiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTEsIHhmbW9kZTEpOwotCVBJUEVfUkVTVE9SRSgweDY0MDApOwotCVBJUEVfUkVTVE9SRSgweDY4MDApOwotCVBJUEVfUkVTVE9SRSgweDZjMDApOwotCVBJUEVfUkVTVE9SRSgweDcwMDApOwotCVBJUEVfUkVTVE9SRSgweDc0MDApOwotCVBJUEVfUkVTVE9SRSgweDc4MDApOwotCVBJUEVfUkVTVE9SRSgweDQ0MDApOwotCVBJUEVfUkVTVE9SRSgweDAwMDApOwotCVBJUEVfUkVTVE9SRSgweDAwNDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg2NDAwLCAweDY0MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg2ODAwLCAweDY4MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg2YzAwLCAweDZjMDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg3MDAwLCAweDcwMDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg3NDAwLCAweDc0MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg3ODAwLCAweDc4MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHg0NDAwLCAweDQ0MDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHgwMDAwLCAweDAwMDApOworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHgwMDQwLCAweDAwNDApOwogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwotCi0jdW5kZWYgUElQRV9SRVNUT1JFCiB9CiAKIHN0YXRpYyB2b2lkIG52MTBfZ3JhcGhfY3JlYXRlX3BpcGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKQEAgLTgzMiw2ICs4MzEsOSBAQAogCQkJCSAgICAgICgxPDwzMSkpOwogCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDE3KSB7CiAJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9ERUJVR180LCAweDFmMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwYTEwLCAweDNmZjNmYjYpOworCQludl93cjMyKGRldiwgMHg0MDA4MzgsIDB4MmY4Njg0KTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwODNjLCAweDExNWYzZik7CiAJCW52X3dyMzIoZGV2LCAweDAwNDAwNmIwLCAweDQwMDAwMDIwKTsKIAl9IGVsc2UKIAkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX0RFQlVHXzQsIDB4MDAwMDAwMDApOwpAQCAtODY3LDYgKzg2OSwxMTUgQEAKIHsKIH0KIAorc3RhdGljIGludAorbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3coc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCisJCQkgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBncmFwaF9zdGF0ZSAqY3R4ID0gY2hhbi0+cGdyYXBoX2N0eDsKKwlzdHJ1Y3QgcGlwZV9zdGF0ZSAqcGlwZSA9ICZjdHgtPnBpcGVfc3RhdGU7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKwl1aW50MzJfdCBwaXBlXzB4MDA0MFsxXSwgcGlwZV8weDY0YzBbOF0sIHBpcGVfMHg2YTgwWzNdLCBwaXBlXzB4NmFiMFszXTsKKwl1aW50MzJfdCB4Zm1vZGUwLCB4Zm1vZGUxOworCWludCBpOworCisJY3R4LT5sbWFfd2luZG93WyhtdGhkIC0gMHgxNjM4KSAvIDRdID0gZGF0YTsKKworCWlmIChtdGhkICE9IDB4MTY0NCkKKwkJcmV0dXJuIDA7CisKKwlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKKworCVBJUEVfU0FWRShkZXYsIHBpcGVfMHgwMDQwLCAweDAwNDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHgwMjAwLCAweDAyMDApOworCisJUElQRV9SRVNUT1JFKGRldiwgY3R4LT5sbWFfd2luZG93LCAweDY3OTApOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwl4Zm1vZGUwID0gbnZfcmQzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTApOworCXhmbW9kZTEgPSBudl9yZDMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMSk7CisKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4NDQwMCwgMHg0NDAwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlXzB4NjRjMCwgMHg2NGMwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlXzB4NmFiMCwgMHg2YWIwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlXzB4NmE4MCwgMHg2YTgwKTsKKworCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOworCisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTAsIDB4MTAwMDAwMDApOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUxLCAweDAwMDAwMDAwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCAweDAwMDA2NGMwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDNmODAwMDAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDAwMDAwMDAwKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIDB4MDAwMDZhYjApOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIDB4M2Y4MDAwMDApOworCisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgMHgwMDAwNmE4MCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgwMDAwMDAwMCk7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCAweDAwMDAwMDQwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDAwMDAwMDA4KTsKKworCVBJUEVfUkVTVE9SRShkZXYsIHBpcGUtPnBpcGVfMHgwMjAwLCAweDAyMDApOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlXzB4MDA0MCwgMHgwMDQwKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUwLCB4Zm1vZGUwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMSwgeGZtb2RlMSk7CisKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlXzB4NjRjMCwgMHg2NGMwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlXzB4NmFiMCwgMHg2YWIwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlXzB4NmE4MCwgMHg2YTgwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NDQwMCwgMHg0NDAwKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIDB4MDAwMDAwYzApOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIDB4MDAwMDAwMDApOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbnYxN19ncmFwaF9tdGhkX2xtYV9lbmFibGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgaW50IGdyY2xhc3MsCisJCQkgICBpbnQgbXRoZCwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisKKwlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9ERUJVR180LAorCQludl9yZDMyKGRldiwgTlYxMF9QR1JBUEhfREVCVUdfNCkgfCAweDEgPDwgOCk7CisJbnZfd3IzMihkZXYsIDB4MDA0MDA2YjAsCisJCW52X3JkMzIoZGV2LCAweDAwNDAwNmIwKSB8IDB4OCA8PCAyNCk7CisKKwlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfbWV0aG9kIG52MTdfZ3JhcGhfY2Vsc2l1c19tdGhkc1tdID0geworCXsgMHgxNjM4LCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyB9LAorCXsgMHgxNjNjLCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyB9LAorCXsgMHgxNjQwLCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyB9LAorCXsgMHgxNjQ0LCBudjE3X2dyYXBoX210aGRfbG1hX3dpbmRvdyB9LAorCXsgMHgxNjU4LCBudjE3X2dyYXBoX210aGRfbG1hX2VuYWJsZSB9LAorCXt9Cit9OworCiBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52MTBfZ3JhcGhfZ3JjbGFzc1tdID0gewogCXsgMHgwMDMwLCBmYWxzZSwgTlVMTCB9LCAvKiBudWxsICovCiAJeyAweDAwMzksIGZhbHNlLCBOVUxMIH0sIC8qIG0ybWYgKi8KQEAgLTg4Nyw2ICs5OTgsNiBAQAogCXsgMHgwMDk1LCBmYWxzZSwgTlVMTCB9LCAvKiBtdWx0aXRleF90cmkgKi8KIAl7IDB4MDA1NiwgZmFsc2UsIE5VTEwgfSwgLyogY2VsY2l1cyAobnYxMCkgKi8KIAl7IDB4MDA5NiwgZmFsc2UsIE5VTEwgfSwgLyogY2VsY2l1cyAobnYxMSkgKi8KLQl7IDB4MDA5OSwgZmFsc2UsIE5VTEwgfSwgLyogY2VsY2l1cyAobnYxNykgKi8KKwl7IDB4MDA5OSwgZmFsc2UsIG52MTdfZ3JhcGhfY2Vsc2l1c19tdGhkcyB9LCAvKiBjZWxjaXVzIChudjE3KSAqLwogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCmluZGV4IDQ2Y2ZkOWMuLjgxYzAxMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCQlyZXR1cm47CiAJbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpLT5sYXN0X2RwbXMgPSBtb2RlOwogCi0JTlZfVFJBQ0UoZGV2LCAiU2V0dGluZyBkcG1zIG1vZGUgJWQgb24gVFYgZW5jb2RlciAob3V0cHV0ICVkKVxuIiwKKwlOVl9JTkZPKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIFRWIGVuY29kZXIgKG91dHB1dCAlZClcbiIsCiAJCSBtb2RlLCBub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmRjYi0+aW5kZXgpOwogCiAJcmVncy0+cHR2XzIwMCAmPSB+MTsKQEAgLTYxOSw3ICs2MTksNyBAQAogewogCXN0cnVjdCBudjE3X3R2X2VuY29kZXIgKnR2X2VuYyA9IHRvX3R2X2VuYyhlbmNvZGVyKTsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKHR2X2VuYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKaW5kZXggN2U4NTQ3Yy4uMmIzMzJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwpAQCAtMjQsMzYgKzI0LDEwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCi0KLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQwLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQwLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQxLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQxLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQyLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQyLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQzLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQzLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ0LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ0LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ2LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ2LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ3LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ3LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ5LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ5LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRhLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRhLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRiLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRiLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRjLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRjLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRlLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRlLmN0eHZhbHMiKTsKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCiAKIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKgogbnY0MF9ncmFwaF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC04MywyNyArNTcsMzAgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpjdHg7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CiAJaW50IHJldDsKIAotCS8qIEFsbG9jYXRlIGEgMTc1S2lCIGJsb2NrIG9mIFBSQU1JTiB0byBzdG9yZSB0aGUgY29udGV4dC4gIFRoaXMKLQkgKiBpcyBtYXNzaXZlIG92ZXJraWxsIGZvciBhIGxvdCBvZiBjaGlwc2V0cywgYnV0IGl0IHNob3VsZCBiZSBzYWZlCi0JICogdW50aWwgd2UncmUgYWJsZSB0byBpbXBsZW1lbnQgdGhpcyBwcm9wZXJseSAod2lsbCBoYXBwZW4gYXQgbW9yZQotCSAqIG9yIGxlc3MgdGhlIHNhbWUgdGltZSB3ZSdyZSBhYmxlIHRvIHdyaXRlIG91ciBvd24gY29udGV4dCBwcm9ncmFtcy4KLQkgKi8KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXdfcmVmKGRldiwgY2hhbiwgTlVMTCwgMCwgMTc1KjEwMjQsIDE2LAotCQkJCQkgIE5WT0JKX0ZMQUdfWkVST19BTExPQywKLQkJCQkJICAmY2hhbi0+cmFtaW5fZ3JjdHgpOworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBwZ3JhcGgtPmdyY3R4X3NpemUsCisJCQkJICAgICAxNiwgTlZPQkpfRkxBR19aRVJPX0FMTE9DLAorCQkJCSAgICAgJmNoYW4tPnJhbWluX2dyY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCWN0eCA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CiAKIAkvKiBJbml0aWFsaXNlIGRlZmF1bHQgY29udGV4dCB2YWx1ZXMgKi8KIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQludjQwX2dyY3R4X3ZhbHNfbG9hZChkZXYsIGN0eCk7Ci0JbnZfd28zMihkZXYsIGN0eCwgMCwgY3R4LT5pbV9wcmFtaW4tPnN0YXJ0KTsKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OwogCisJCWN0eC5kZXYgPSBjaGFuLT5kZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9WQUxTOworCQljdHguZGF0YSA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CisJCW52NDBfZ3JjdHhfaW5pdCgmY3R4KTsKKwl9IGVsc2UgeworCQlub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChkZXYsIGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmopOworCX0KKwludl93bzMyKGRldiwgY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iaiwgMCwKKwkJICAgICBjaGFuLT5yYW1pbl9ncmN0eC0+Z3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQsMTM5ICsxODEsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBub3V2ZWF1X2N0eHByb2cgewotCXVpbnQzMl90IHNpZ25hdHVyZTsKLQl1aW50OF90ICB2ZXJzaW9uOwotCXVpbnQxNl90IGxlbmd0aDsKLQl1aW50MzJfdCBkYXRhW107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IG5vdXZlYXVfY3R4dmFscyB7Ci0JdWludDMyX3Qgc2lnbmF0dXJlOwotCXVpbnQ4X3QgIHZlcnNpb247Ci0JdWludDMyX3QgbGVuZ3RoOwotCXN0cnVjdCB7Ci0JCXVpbnQzMl90IG9mZnNldDsKLQkJdWludDMyX3QgdmFsdWU7Ci0JfSBkYXRhW107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotaW50Ci1udjQwX2dyY3R4X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwotCWNvbnN0IGludCBjaGlwc2V0ID0gZGV2X3ByaXYtPmNoaXBzZXQ7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKLQljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nICpjcDsKLQljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHh2YWxzICpjdjsKLQljaGFyIG5hbWVbMzJdOwotCWludCByZXQsIGk7Ci0KLQlwZ3JhcGgtPmFjY2VsX2Jsb2NrZWQgPSB0cnVlOwotCi0JaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKLQkJc3ByaW50ZihuYW1lLCAibm91dmVhdS9udiUwMnguY3R4cHJvZyIsIGNoaXBzZXQpOwotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbmFtZSwgJmRldi0+cGRldi0+ZGV2KTsKLQkJaWYgKHJldCkgewotCQkJTlZfRVJST1IoZGV2LCAiTm8gY3R4cHJvZyBmb3IgTlYlMDJ4XG4iLCBjaGlwc2V0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlwZ3JhcGgtPmN0eHByb2cgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQltZW1jcHkocGdyYXBoLT5jdHhwcm9nLCBmdy0+ZGF0YSwgZnctPnNpemUpOwotCi0JCWNwID0gcGdyYXBoLT5jdHhwcm9nOwotCQlpZiAobGUzMl90b19jcHUoY3AtPnNpZ25hdHVyZSkgIT0gMHg1MDQzNTY0ZSB8fAotCQkgICAgY3AtPnZlcnNpb24gIT0gMCB8fAotCQkgICAgbGUxNl90b19jcHUoY3AtPmxlbmd0aCkgIT0gKChmdy0+c2l6ZSAtIDcpIC8gNCkpIHsKLQkJCU5WX0VSUk9SKGRldiwgImN0eHByb2cgaW52YWxpZFxuIik7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCW52NDBfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JfQotCi0JaWYgKCFwZ3JhcGgtPmN0eHZhbHMpIHsKLQkJc3ByaW50ZihuYW1lLCAibm91dmVhdS9udiUwMnguY3R4dmFscyIsIGNoaXBzZXQpOwotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbmFtZSwgJmRldi0+cGRldi0+ZGV2KTsKLQkJaWYgKHJldCkgewotCQkJTlZfRVJST1IoZGV2LCAiTm8gY3R4dmFscyBmb3IgTlYlMDJ4XG4iLCBjaGlwc2V0KTsKLQkJCW52NDBfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXBncmFwaC0+Y3R4dmFscyA9IGttYWxsb2MoZnctPnNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBncmFwaC0+Y3R4cHJvZykgewotCQkJTlZfRVJST1IoZGV2LCAiT09NIGNvcHlpbmcgY3R4cHJvZ1xuIik7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCW52NDBfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJbWVtY3B5KHBncmFwaC0+Y3R4dmFscywgZnctPmRhdGEsIGZ3LT5zaXplKTsKLQotCQljdiA9ICh2b2lkICopcGdyYXBoLT5jdHh2YWxzOwotCQlpZiAobGUzMl90b19jcHUoY3YtPnNpZ25hdHVyZSkgIT0gMHg1NjQzNTY0ZSB8fAotCQkgICAgY3YtPnZlcnNpb24gIT0gMCB8fAotCQkgICAgbGUzMl90b19jcHUoY3YtPmxlbmd0aCkgIT0gKChmdy0+c2l6ZSAtIDkpIC8gOCkpIHsKLQkJCU5WX0VSUk9SKGRldiwgImN0eHZhbHMgaW52YWxpZFxuIik7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCW52NDBfZ3JjdHhfZmluaShkZXYpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JfQotCi0JY3AgPSBwZ3JhcGgtPmN0eHByb2c7Ci0KLQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoY3AtPmxlbmd0aCk7IGkrKykKLQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9EQVRBLAotCQkJbGUzMl90b19jcHUoY3AtPmRhdGFbaV0pKTsKLQotCXBncmFwaC0+YWNjZWxfYmxvY2tlZCA9IGZhbHNlOwotCXJldHVybiAwOwotfQotCi12b2lkCi1udjQwX2dyY3R4X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwotCi0JaWYgKHBncmFwaC0+Y3R4cHJvZykgewotCQlrZnJlZShwZ3JhcGgtPmN0eHByb2cpOwotCQlwZ3JhcGgtPmN0eHByb2cgPSBOVUxMOwotCX0KLQotCWlmIChwZ3JhcGgtPmN0eHZhbHMpIHsKLQkJa2ZyZWUocGdyYXBoLT5jdHhwcm9nKTsKLQkJcGdyYXBoLT5jdHh2YWxzID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQKLW52NDBfZ3JjdHhfdmFsc19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqY3R4KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7Ci0Jc3RydWN0IG5vdXZlYXVfY3R4dmFscyAqY3YgPSBwZ3JhcGgtPmN0eHZhbHM7Ci0JaW50IGk7Ci0KLQlpZiAoIWN2KQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGUzMl90b19jcHUoY3YtPmxlbmd0aCk7IGkrKykKLQkJbnZfd28zMihkZXYsIGN0eCwgbGUzMl90b19jcHUoY3YtPmRhdGFbaV0ub2Zmc2V0KSwKLQkJCWxlMzJfdG9fY3B1KGN2LT5kYXRhW2ldLnZhbHVlKSk7Ci19Ci0KIC8qCiAgKiBHNzAJCTB4NDcKICAqIEc3MQkJMHg0OQpAQCAtMzU5LDcgKzIwMywyNiBAQAogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsIG52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpIHwKIAkJCSBOVl9QTUNfRU5BQkxFX1BHUkFQSCk7CiAKLQludjQwX2dyY3R4X2luaXQoZGV2KTsKKwlpZiAobm91dmVhdV9jdHhmdykgeworCQlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOworCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSAxNzUgKiAxMDI0OworCX0KKworCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKSB7CisJCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OworCQl1aW50MzJfdCBjcFsyNTZdOworCisJCWN0eC5kZXYgPSBkZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9QUk9HOworCQljdHguZGF0YSA9IGNwOworCQljdHguY3R4cHJvZ19tYXggPSAyNTY7CisJCW52NDBfZ3JjdHhfaW5pdCgmY3R4KTsKKwkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5ncmN0eF9zaXplID0gY3R4LmN0eHZhbHNfcG9zICogNDsKKworCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IGN0eC5jdHhwcm9nX2xlbjsgaSsrKQorCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9EQVRBLCBjcFtpXSk7CisJfQogCiAJLyogTm8gY29udGV4dCBwcmVzZW50IGN1cnJlbnRseSAqLwogCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfQ1VSLCAweDAwMDAwMDAwKTsKQEAgLTUzOSw2ICs0MDIsNyBAQAogCiB2b2lkIG52NDBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKIH0KIAogc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjQwX2dyYXBoX2dyY2xhc3NbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JjdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWIxMWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmN0eC5jCkBAIC0wLDAgKzEsNjc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQmVuIFNrZWdncworICovCisKKy8qIE5WSURJQSBjb250ZXh0IHByb2dyYW1zIGhhbmRsZSBhIG51bWJlciBvZiBvdGhlciBjb25kaXRpb25zIHdoaWNoIGFyZQorICogbm90IGltcGxlbWVudGVkIGluIG91ciB2ZXJzaW9ucy4gIEl0J3Mgbm90IGNsZWFyIHdoeSBOVklESUEgY29udGV4dAorICogcHJvZ3JhbXMgaGF2ZSB0aGlzIGNvZGUsIG5vciB3aGV0aGVyIGl0J3Mgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvcgorICogY29ycmVjdCBvcGVyYXRpb24uICBXZSdsbCBpbXBsZW1lbnQgYWRkaXRpb25hbCBoYW5kbGluZyBpZi93aGVuIHdlCisgKiBkaXNjb3ZlciBpdCdzIG5lY2Vzc2FyeS4KKyAqCisgKiAtIE9uIGNvbnRleHQgc2F2ZSwgTlZJRElBIHNldCAweDQwMDMxNCBiaXQgMCB0byAxIGlmIHRoZSAiM0Qgc3RhdGUiCisgKiAgIGZsYWcgaXMgc2V0LCB0aGlzIGdldHMgc2F2ZWQgaW50byB0aGUgY29udGV4dC4KKyAqIC0gT24gY29udGV4dCBzYXZlLCB0aGUgY29udGV4dCBwcm9ncmFtIGZvciBhbGwgY2FyZHMgbG9hZCBuc291cmNlCisgKiAgIGludG8gYSBmbGFnIHJlZ2lzdGVyIGFuZCBjaGVjayBmb3IgSUxMRUdBTF9NVEhELiAgSWYgaXQncyBzZXQsCisgKiAgIG9wY29kZSAweDYwMDAwZCBpcyBjYWxsZWQgYmVmb3JlIHJlc3VtaW5nIG5vcm1hbCBvcGVyYXRpb24uCisgKiAtIFNvbWUgY29udGV4dCBwcm9ncmFtcyBjaGVjayBtb3JlIGNvbmRpdGlvbnMgdGhhbiB0aGUgYWJvdmUuICBOVjQ0CisgKiAgIGNoZWNrczogKChuc291cmNlICYgMHgwODU3KSB8fCAoMHg0MDA3MTggJiAweDAxMDApIHx8IChpbnRyICYgMHgwMDAxKSkKKyAqICAgYW5kIGNhbGxzIDB4NjAwMDBkIGJlZm9yZSByZXN1bWluZyBub3JtYWwgb3BlcmF0aW9uLgorICogLSBBdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgTlZJRElBJ3MgY29udGV4dCBwcm9ncmFtcywgZmxhZyA5IGlzIGNoZWNrZWQKKyAqICAgYW5kIGlmIHRydWUgMHg4MDAwMDEgaXMgY2FsbGVkIHdpdGggY291bnQ9MCwgcG9zPTAsIHRoZSBmbGFnIGlzIGNsZWFyZWQKKyAqICAgYW5kIHRoZW4gdGhlIGN0eHByb2cgaXMgYWJvcnRlZC4gIEl0IGxvb2tzIGxpa2UgYSBjb21wbGljYXRlZCBOT1AsCisgKiAgIGl0cyBwdXJwb3NlIGlzIHVua25vd24uCisgKiAtIEluIHRoZSBzZWN0aW9uIG9mIGNvZGUgdGhhdCBsb2FkcyB0aGUgcGVyLXZzIHN0YXRlLCBOVklESUEgY2hlY2sKKyAqICAgZmxhZyAxMC4gIElmIGl0J3Mgc2V0LCB0aGV5IG9ubHkgdHJhbnNmZXIgdGhlIHNtYWxsIDB4MzAwIGJ5dGUgYmxvY2sKKyAqICAgb2Ygc3RhdGUgKyB0aGUgc3RhdGUgZm9yIGEgc2luZ2xlIHZzIGFzIG9wcG9zZWQgdG8gdGhlIHN0YXRlIGZvcgorICogICBhbGwgdnMgdW5pdHMuICBJdCBkb2Vzbid0IHNlZW0gbGlrZWx5IHRoYXQgaXQnbGwgb2NjdXIgaW4gbm9ybWFsCisgKiAgIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBzZWVpbmcgYXMgaXQgYXBwZWFycyBOVklESUEgbWF5IGhhdmUgc2NyZXdlZAorICogICB1cCB0aGUgY3R4cHJvZ3MgZm9yIHNvbWUgY2FyZHMgYW5kIGhhdmUgYW4gaW52YWxpZCBpbnN0cnVjdGlvbgorICogICByYXRoZXIgdGhhbiBhIGNwX2xzcihjdHgsIGR3b3Jkc19mb3JfMV92c191bml0KSBpbnN0cnVjdGlvbi4KKyAqIC0gVGhlcmUncyBhIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgY29udGV4dCBvZmZzZXQgMCAod2hlcmUgd2UgcGxhY2UKKyAqICAgdGhlIFBSQU1JTiBvZmZzZXQgb2YgdGhlIGNvbnRleHQpIGlzIGxvYWRlZCBpbnRvIGVpdGhlciAweDQwODAwMCwKKyAqICAgMHg0MDgwMDQgb3IgMHg0MDgwMDguICBOb3Qgc3VyZSB3aGF0J3MgdXAgdGhlcmUgZWl0aGVyLgorICogLSBUaGUgY3R4cHJvZ3MgZm9yIHNvbWUgY2FyZHMgc2F2ZSAweDQwMGEwMCBhZ2FpbiBkdXJpbmcgdGhlIGNsZWFudXAKKyAqICAgcGF0aCBmb3IgYXV0by1sb2FkY3R4LgorICovCisKKyNkZWZpbmUgQ1BfRkxBR19DTEVBUiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1NFVCAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1dBUF9ESVJFQ1RJT04gICAgICAgICgoMCAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1dBUF9ESVJFQ1RJT05fTE9BRCAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TV0FQX0RJUkVDVElPTl9TQVZFICAgMQorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRSAgICAgICAgICAgICAoKDAgKiAzMikgKyA1KQorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfVVNFUl9TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQUQgICAgICAgICAgICAgKCgwICogMzIpICsgNikKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX1VTRVJfTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTICAgICAgICAgICAgICAgICgoMyAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTX0lETEUgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TVEFUVVNfQlVTWSAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRSAgICAgICAgICAgICAoKDMgKiAzMikgKyA0KQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfQVVUT19TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQUQgICAgICAgICAgICAgKCgzICogMzIpICsgNSkKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX0FVVE9fTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfVU5LNTQgICAgICAgICAgICAgICAgICgoMyAqIDMyKSArIDYpCisjZGVmaW5lIENQX0ZMQUdfVU5LNTRfQ0xFQVIgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19VTks1NF9TRVQgICAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FMV0FZUyAgICAgICAgICAgICAgICAoKDMgKiAzMikgKyA4KQorI2RlZmluZSBDUF9GTEFHX0FMV0FZU19GQUxTRSAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfQUxXQVlTX1RSVUUgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VTks1NyAgICAgICAgICAgICAgICAgKCgzICogMzIpICsgOSkKKyNkZWZpbmUgQ1BfRkxBR19VTks1N19DTEVBUiAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1VOSzU3X1NFVCAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQ1BfQ1RYICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UICAgICAgICAgICAgIDB4MDAwZmMwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BfQ1RYX1JFRyAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgQ1BfTE9BRF9TUiAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BfTE9BRF9TUl9WQUxVRSAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgQ1BfQlJBICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BfQlJBX0lQICAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQ1BfQlJBX0lQX1NISUZUICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BfQlJBX0lGX0NMRUFSICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfQlJBX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfV0FJVCAgICAgICAgICAgICAgICAgIDB4MDA1MDAwMDAKKyNkZWZpbmUgQ1BfV0FJVF9TRVQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfV0FJVF9GTEFHICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfU0VUICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKKyNkZWZpbmUgQ1BfU0VUXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfU0VUX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfTkVYVF9UT19TV0FQICAgICAgICAgIDB4MDA2MDAwMDcKKyNkZWZpbmUgQ1BfTkVYVF9UT19DVVJSRU5UICAgICAgIDB4MDA2MDAwMDkKKyNkZWZpbmUgQ1BfU0VUX0NPTlRFWFRfUE9JTlRFUiAgIDB4MDA2MDAwMGEKKyNkZWZpbmUgQ1BfRU5EICAgICAgICAgICAgICAgICAgIDB4MDA2MDAwMGUKKyNkZWZpbmUgQ1BfTE9BRF9NQUdJQ19VTkswMSAgICAgIDB4MDA4MDAwMDEgLyogdW5rbm93biAqLworI2RlZmluZSBDUF9MT0FEX01BR0lDX05WNDRUQ0wgICAgMHgwMDgwMDAyOSAvKiBwZXItdnMgc3RhdGUgKDB4NDQ5NykgKi8KKyNkZWZpbmUgQ1BfTE9BRF9NQUdJQ19OVjQwVENMICAgIDB4MDA4MDAwNDEgLyogcGVyLXZzIHN0YXRlICgweDQwOTcpICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCisKKy8qIFRPRE86CisgKiAgLSBnZXQgdnMgY291bnQgZnJvbSAweDE1NDAKKyAqICAtIGRvY3VtZW50IHVuaW1wbGVtZW50ZWQgYml0cyBjb21wYXJlZCB0byBudmlkaWEKKyAqICAgIC0gbnNvdXJjZSBoYW5kbGluZworICogICAgLSBSMCAmIDB4MDIwMCBoYW5kbGluZworICogICAgLSBzaW5nbGUtdnMgaGFuZGxpbmcKKyAqICAgIC0gNDAwMzE0IGJpdCAwCisgKi8KKworc3RhdGljIGludAorbnY0MF9ncmFwaF80MDk3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICgoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweDYwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAhISgweDBiYWYgJiAoMSA8PCBkZXZfcHJpdi0+Y2hpcHNldCkpOworfQorCitzdGF0aWMgaW50CitudjQwX2dyYXBoX3ZzX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJcmV0dXJuIDg7CisJY2FzZSAweDQwOgorCQlyZXR1cm4gNjsKKwljYXNlIDB4NDE6CisJY2FzZSAweDQyOgorCQlyZXR1cm4gNTsKKwljYXNlIDB4NDM6CisJY2FzZSAweDQ0OgorCWNhc2UgMHg0NjoKKwljYXNlIDB4NGE6CisJCXJldHVybiAzOworCWNhc2UgMHg0YzoKKwljYXNlIDB4NGU6CisJY2FzZSAweDY3OgorCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworCitlbnVtIGNwX2xhYmVsIHsKKwljcF9jaGVja19sb2FkID0gMSwKKwljcF9zZXR1cF9hdXRvX2xvYWQsCisJY3Bfc2V0dXBfbG9hZCwKKwljcF9zZXR1cF9zYXZlLAorCWNwX3N3YXBfc3RhdGUsCisJY3Bfc3dhcF9zdGF0ZTNkXzNfaXNfc2F2ZSwKKwljcF9wcmVwYXJlX2V4aXQsCisJY3BfZXhpdCwKK307CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9nZW5lcmFsKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJY3BfY3R4KGN0eCwgMHg0MDAwYTQsIDEpOworCWdyX2RlZihjdHgsIDB4NDAwMGE0LCAweDAwMDAwMDA4KTsKKwljcF9jdHgoY3R4LCAweDQwMDE0NCwgNTgpOworCWdyX2RlZihjdHgsIDB4NDAwMTQ0LCAweDAwMDAwMDAxKTsKKwljcF9jdHgoY3R4LCAweDQwMDMxNCwgMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDAzMTQsIDB4MDAwMDAwMDApOworCWNwX2N0eChjdHgsIDB4NDAwNDAwLCAxMCk7CisJY3BfY3R4KGN0eCwgMHg0MDA0ODAsIDEwKTsKKwljcF9jdHgoY3R4LCAweDQwMDUwMCwgMTkpOworCWdyX2RlZihjdHgsIDB4NDAwNTE0LCAweDAwMDQwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMDUyNCwgMHg1NTU1NTU1NSk7CisJZ3JfZGVmKGN0eCwgMHg0MDA1MjgsIDB4NTU1NTU1NTUpOworCWdyX2RlZihjdHgsIDB4NDAwNTJjLCAweDU1NTU1NTU1KTsKKwlncl9kZWYoY3R4LCAweDQwMDUzMCwgMHg1NTU1NTU1NSk7CisJY3BfY3R4KGN0eCwgMHg0MDA1NjAsIDYpOworCWdyX2RlZihjdHgsIDB4NDAwNTY4LCAweDAwMDBmZmZmKTsKKwlncl9kZWYoY3R4LCAweDQwMDU2YywgMHgwMDAwZmZmZik7CisJY3BfY3R4KGN0eCwgMHg0MDA1N2MsIDUpOworCWNwX2N0eChjdHgsIDB4NDAwNzEwLCAzKTsKKwlncl9kZWYoY3R4LCAweDQwMDcxMCwgMHgyMDAxMDAwMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDA3MTQsIDB4MGY3M2VmMDApOworCWNwX2N0eChjdHgsIDB4NDAwNzI0LCAxKTsKKwlncl9kZWYoY3R4LCAweDQwMDcyNCwgMHgwMjAwODgyMSk7CisJY3BfY3R4KGN0eCwgMHg0MDA3NzAsIDMpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwKSB7CisJCWNwX2N0eChjdHgsIDB4NDAwODE0LCA0KTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4MjgsIDUpOworCQljcF9jdHgoY3R4LCAweDQwMDg0MCwgNSk7CisJCWdyX2RlZihjdHgsIDB4NDAwODUwLCAweDAwMDAwMDQwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4NTgsIDQpOworCQlncl9kZWYoY3R4LCAweDQwMDg1OCwgMHgwMDAwMDA0MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODVjLCAweDAwMDAwMDQwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NjQsIDB4ODAwMDAwMDApOworCQljcF9jdHgoY3R4LCAweDQwMDg2YywgOSk7CisJCWdyX2RlZihjdHgsIDB4NDAwODZjLCAweDgwMDAwMDAwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NzAsIDB4ODAwMDAwMDApOworCQlncl9kZWYoY3R4LCAweDQwMDg3NCwgMHg4MDAwMDAwMCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODc4LCAweDgwMDAwMDAwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4ODgsIDB4MDAwMDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDg4YywgMHg4MDAwMDAwMCk7CisJCWNwX2N0eChjdHgsIDB4NDAwOWMwLCA4KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA5Y2MsIDB4ODAwMDAwMDApOworCQlncl9kZWYoY3R4LCAweDQwMDlkYywgMHg4MDAwMDAwMCk7CisJfSBlbHNlIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4NDAsIDIwKTsKKwkJaWYgKCFudjQwX2dyYXBoXzQwOTcoY3R4LT5kZXYpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCWdyX2RlZihjdHgsIDB4NDAwODYwICsgKGkgKiA0KSwgMHgwMDAwMDAwMSk7CisJCX0KKwkJZ3JfZGVmKGN0eCwgMHg0MDA4ODAsIDB4MDAwMDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDg4NCwgMHgwMDAwMDA0MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODg4LCAweDAwMDAwMDQwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4OTQsIDExKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4OTQsIDB4MDAwMDAwNDApOworCQlpZiAobnY0MF9ncmFwaF80MDk3KGN0eC0+ZGV2KSkgeworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQlncl9kZWYoY3R4LCAweDQwMDhhMCArIChpICogNCksIDB4ODAwMDAwMDApOworCQl9CisJCWNwX2N0eChjdHgsIDB4NDAwOGUwLCAyKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4ZjgsIDIpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0YyB8fAorCQkgICAgKGRldl9wcml2LT5jaGlwc2V0ICYgMHhmMCkgPT0gMHg2MCkKKwkJCWNwX2N0eChjdHgsIDB4NDAwOWY4LCAxKTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDBhMDAsIDczKTsKKwlncl9kZWYoY3R4LCAweDQwMGIwYywgMHgwYjBiMGIwYyk7CisJY3BfY3R4KGN0eCwgMHg0MDEwMDAsIDQpOworCWNwX2N0eChjdHgsIDB4NDA1MDA0LCAxKTsKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweDQ3OgorCWNhc2UgMHg0OToKKwljYXNlIDB4NGI6CisJCWNwX2N0eChjdHgsIDB4NDAzNDQ4LCAxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDM0NDgsIDB4MDAwMDEwMTApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljcF9jdHgoY3R4LCAweDQwMzQ0MCwgMSk7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDQwOgorCQkJZ3JfZGVmKGN0eCwgMHg0MDM0NDAsIDB4MDAwMDAwMTApOworCQkJYnJlYWs7CisJCWNhc2UgMHg0NDoKKwkJY2FzZSAweDQ2OgorCQljYXNlIDB4NGE6CisJCQlncl9kZWYoY3R4LCAweDQwMzQ0MCwgMHgwMDAwMzAxMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDQxOgorCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDRjOgorCQljYXNlIDB4NGU6CisJCWNhc2UgMHg2NzoKKwkJZGVmYXVsdDoKKwkJCWdyX2RlZihjdHgsIDB4NDAzNDQwLCAweDAwMDAxMDEwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK252NDBfZ3JhcGhfY29uc3RydWN0X3N0YXRlM2Qoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTg4MCwgNTEpOworCQlncl9kZWYoY3R4LCAweDQwMTk0MCwgMHgwMDAwMDEwMCk7CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDYgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0NyB8fAorCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQ5IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4NGIpIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDE4ODAsIDMyKTsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlncl9kZWYoY3R4LCAweDQwMTg4MCArIChpICogNCksIDB4MDAwMDAxMTEpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0NikKKwkJCWNwX2N0eChjdHgsIDB4NDAxOTAwLCAxNik7CisJCWNwX2N0eChjdHgsIDB4NDAxOTQwLCAzKTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDE5NGMsIDE4KTsKKwlncl9kZWYoY3R4LCAweDQwMTk1NCwgMHgwMDAwMDExMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDE5NTgsIDB4MDAwODAwNjApOworCWdyX2RlZihjdHgsIDB4NDAxOTc0LCAweDAwMDAwMDgwKTsKKwlncl9kZWYoY3R4LCAweDQwMTk3OCwgMHhmZmZmMDAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDE5N2MsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIDB4NDAxOTkwLCAweDQ2NDAwMDAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTlhMCwgMik7CisJCWNwX2N0eChjdHgsIDB4NDAxOWFjLCA1KTsKKwl9IGVsc2UgeworCQljcF9jdHgoY3R4LCAweDQwMTlhMCwgMSk7CisJCWNwX2N0eChjdHgsIDB4NDAxOWI0LCAzKTsKKwl9CisJZ3JfZGVmKGN0eCwgMHg0MDE5YmMsIDB4ZmZmZjAwMDApOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDY6CisJY2FzZSAweDQ3OgorCWNhc2UgMHg0OToKKwljYXNlIDB4NGI6CisJCWNwX2N0eChjdHgsIDB4NDAxOWMwLCAxOCk7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDE5YzAgKyAoaSAqIDQpLCAweDg4ODg4ODg4KTsKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDAxYTA4LCA4KTsKKwlncl9kZWYoY3R4LCAweDQwMWExMCwgMHgwZmZmMDAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhMTQsIDB4MGZmZjAwMDApOworCWdyX2RlZihjdHgsIDB4NDAxYTFjLCAweDAwMDExMTAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWEyYywgNCk7CisJY3BfY3R4KGN0eCwgMHg0MDFhNDQsIDI2KTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJZ3JfZGVmKGN0eCwgMHg0MDFhNDQgKyAoaSAqIDQpLCAweDA3ZmYwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMWE4YywgMHg0YjdmZmZmZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDFhYjgsIDMpOworCX0gZWxzZSB7CisJCWNwX2N0eChjdHgsIDB4NDAxYWI4LCAxKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDFhYzAsIDEpOworCX0KKwljcF9jdHgoY3R4LCAweDQwMWFkMCwgOCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhZDAsIDB4MzAyMDEwMDApOworCWdyX2RlZihjdHgsIDB4NDAxYWQ0LCAweDcwNjA1MDQwKTsKKwlncl9kZWYoY3R4LCAweDQwMWFkOCwgMHhiOGE4OTg4OCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhZGMsIDB4ZjhlOGQ4YzgpOworCWNwX2N0eChjdHgsIDB4NDAxYjEwLCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gMiA6IDEpOworCWdyX2RlZihjdHgsIDB4NDAxYjEwLCAweDQwMTAwMDAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWIxOCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDYgOiA1KTsKKwlncl9kZWYoY3R4LCAweDQwMWIyOCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/CisJCQkgICAgICAweDAwMDAwMDA0IDogMHgwMDAwMDAwMCk7CisJY3BfY3R4KGN0eCwgMHg0MDFiMzAsIDI1KTsKKwlncl9kZWYoY3R4LCAweDQwMWIzNCwgMHgwMDAwZmZmZik7CisJZ3JfZGVmKGN0eCwgMHg0MDFiNjgsIDB4NDM1MTg1ZDYpOworCWdyX2RlZihjdHgsIDB4NDAxYjZjLCAweDIxNTViNjk5KTsKKwlncl9kZWYoY3R4LCAweDQwMWI3MCwgMHhmZWRjYmE5OCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFiNzQsIDB4MDAwMDAwOTgpOworCWdyX2RlZihjdHgsIDB4NDAxYjg0LCAweGZmZmZmZmZmKTsKKwlncl9kZWYoY3R4LCAweDQwMWI4OCwgMHgwMGZmNzAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFiOGMsIDB4MDAwMGZmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ0ICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NGEgJiYKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0ZSkKKwkJY3BfY3R4KGN0eCwgMHg0MDFiOTQsIDEpOworCWNwX2N0eChjdHgsIDB4NDAxYjk4LCA4KTsKKwlncl9kZWYoY3R4LCAweDQwMWI5YywgMHgwMGZmMDAwMCk7CisJY3BfY3R4KGN0eCwgMHg0MDFiYzAsIDkpOworCWdyX2RlZihjdHgsIDB4NDAxYmUwLCAweDAwZmZmZjAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWMwMCwgMTkyKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeyAvKiBmcmFnbWVudCB0ZXh0dXJlIHVuaXRzICovCisJCWdyX2RlZihjdHgsIDB4NDAxYzQwICsgKGkgKiA0KSwgMHgwMDAxODQ4OCk7CisJCWdyX2RlZihjdHgsIDB4NDAxYzgwICsgKGkgKiA0KSwgMHgwMDAyODIwMik7CisJCWdyX2RlZihjdHgsIDB4NDAxZDAwICsgKGkgKiA0KSwgMHgwMDAwYWFlNCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZDQwICsgKGkgKiA0KSwgMHgwMTAxMjAwMCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZDgwICsgKGkgKiA0KSwgMHgwMDA4MDAwOCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZTAwICsgKGkgKiA0KSwgMHgwMDEwMDAwOCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsgLyogdmVydGV4IHRleHR1cmUgdW5pdHMgKi8KKwkJZ3JfZGVmKGN0eCwgMHg0MDFlOTAgKyAoaSAqIDQpLCAweDAwMDFiYzgwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlYTAgKyAoaSAqIDQpLCAweDAwMDAwMjAyKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlYzAgKyAoaSAqIDQpLCAweDAwMDAwMDA4KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlZTAgKyAoaSAqIDQpLCAweDAwMDgwMDA4KTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDBmNWMsIDMpOworCWdyX2RlZihjdHgsIDB4NDAwZjVjLCAweDAwMDAwMDAyKTsKKwljcF9jdHgoY3R4LCAweDQwMGY4NCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9zdGF0ZTNkXzIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwljcF9jdHgoY3R4LCAweDQwMjAwMCwgMSk7CisJY3BfY3R4KGN0eCwgMHg0MDI0MDQsIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDAgPyAxIDogMik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0MDoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDAwMDEpOworCQlicmVhazsKKwljYXNlIDB4NGM6CisJY2FzZSAweDRlOgorCWNhc2UgMHg2NzoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDAwMjApOworCQlicmVhazsKKwljYXNlIDB4NDY6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDA0MjEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlncl9kZWYoY3R4LCAweDQwMjQwNCwgMHgwMDAwMDAyMSk7CisJfQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwKQorCQlncl9kZWYoY3R4LCAweDQwMjQwOCwgMHgwMzBjMzBjMyk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NDoKKwljYXNlIDB4NDY6CisJY2FzZSAweDRhOgorCWNhc2UgMHg0YzoKKwljYXNlIDB4NGU6CisJY2FzZSAweDY3OgorCQljcF9jdHgoY3R4LCAweDQwMjQ0MCwgMSk7CisJCWdyX2RlZihjdHgsIDB4NDAyNDQwLCAweDAwMDExMDAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDAyNDgwLCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gOCA6IDkpOworCWdyX2RlZihjdHgsIDB4NDAyNDg4LCAweDNlMDIwMjAwKTsKKwlncl9kZWYoY3R4LCAweDQwMjQ4YywgMHgwMGZmZmZmZik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0MDoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0OTAsIDB4NjAxMDNmMDApOworCQlicmVhazsKKwljYXNlIDB4NDc6CisJCWdyX2RlZihjdHgsIDB4NDAyNDkwLCAweDQwMTAzZjAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDQxOgorCWNhc2UgMHg0MjoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQlncl9kZWYoY3R4LCAweDQwMjQ5MCwgMHgyMDEwM2YwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdyX2RlZihjdHgsIDB4NDAyNDkwLCAweDBjMTAzZjAwKTsKKwkJYnJlYWs7CisJfQorCWdyX2RlZihjdHgsIDB4NDAyNDljLCBkZXZfcHJpdi0+Y2hpcHNldCA8PSAweDQzID8KKwkJCSAgICAgIDB4MDAwMjAwMDAgOiAweDAwMDQwMDAwKTsKKwljcF9jdHgoY3R4LCAweDQwMjUwMCwgMzEpOworCWdyX2RlZihjdHgsIDB4NDAyNTMwLCAweDAwMDA4MTAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkKKwkJY3BfY3R4KGN0eCwgMHg0MDI1N2MsIDYpOworCWNwX2N0eChjdHgsIDB4NDAyNTk0LCAxNik7CisJY3BfY3R4KGN0eCwgMHg0MDI4MDAsIDE3KTsKKwlncl9kZWYoY3R4LCAweDQwMjgwMCwgMHgwMDAwMDAwMSk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NzoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQljcF9jdHgoY3R4LCAweDQwMjg2NCwgMSk7CisJCWdyX2RlZihjdHgsIDB4NDAyODY0LCAweDAwMDAxMDAxKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NzAsIDMpOworCQlncl9kZWYoY3R4LCAweDQwMjg3OCwgMHgwMDAwMDAwMyk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ3KSB7IC8qIGJlbG9uZyBhdCBlbmQhISAqLworCQkJY3BfY3R4KGN0eCwgMHg0MDI5MDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5NDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5ODAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5YzAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhMDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhNDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhODAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhYzAsIDEpOworCQl9CisJCWJyZWFrOworCWNhc2UgMHg0MDoKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NDQsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMjg0NCwgMHgwMDAwMDAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDAyODUwLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NDQsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMjg0NCwgMHgwMDAwMTAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDAyODUwLCAyKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDI4NTQsIDB4MDAwMDAwMDMpOworCQlicmVhazsKKwl9CisKKwljcF9jdHgoY3R4LCAweDQwMmMwMCwgNCk7CisJZ3JfZGVmKGN0eCwgMHg0MDJjMDAsIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDAgPworCQkJICAgICAgMHg4MDgwMDAwMSA6IDB4MDA4ODgwMDEpOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDQwKTsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCQlncl9kZWYoY3R4LCAweDQwMmM0MCArIChpICogNCksIDB4ZmZmZmZmZmYpOworCQljcF9jdHgoY3R4LCAweDQwMzBiOCwgMTMpOworCQlncl9kZWYoY3R4LCAweDQwMzBkYywgMHgwMDAwMDAwNSk7CisJCWdyX2RlZihjdHgsIDB4NDAzMGU4LCAweDAwMDBmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3BfY3R4KGN0eCwgMHg0MDJjMTAsIDQpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkKKwkJCWNwX2N0eChjdHgsIDB4NDAyYzIwLCAzNik7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4NDIpCisJCQljcF9jdHgoY3R4LCAweDQwMmMyMCwgMjQpOworCQllbHNlCisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8PSAweDRhKQorCQkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDE2KTsKKwkJZWxzZQorCQkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDgpOworCQljcF9jdHgoY3R4LCAweDQwMmNiMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDEyIDogMTMpOworCQlncl9kZWYoY3R4LCAweDQwMmNkNCwgMHgwMDAwMDAwNSk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDJjZTAsIDB4MDAwMGZmZmYpOworCQlicmVhazsKKwl9CisKKwljcF9jdHgoY3R4LCAweDQwMzQwMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDQgOiAzKTsKKwljcF9jdHgoY3R4LCAweDQwMzQxMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDQgOiAzKTsKKwljcF9jdHgoY3R4LCAweDQwMzQyMCwgbnY0MF9ncmFwaF92c19jb3VudChjdHgtPmRldikpOworCWZvciAoaSA9IDA7IGkgPCBudjQwX2dyYXBoX3ZzX2NvdW50KGN0eC0+ZGV2KTsgaSsrKQorCQlncl9kZWYoY3R4LCAweDQwMzQyMCArIChpICogNCksIDB4MDAwMDU1NTUpOworCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDM2MDAsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMzYwMCwgMHgwMDAwMDAwMSk7CisJfQorCWNwX2N0eChjdHgsIDB4NDAzODAwLCAxKTsKKworCWNwX2N0eChjdHgsIDB4NDAzYzE4LCAxKTsKKwlncl9kZWYoY3R4LCAweDQwM2MxOCwgMHgwMDAwMDAwMSk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NjoKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJY3BfY3R4KGN0eCwgMHg0MDUwMTgsIDEpOworCQlncl9kZWYoY3R4LCAweDQwNTAxOCwgMHgwOGUwMDAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDA1YzI0LCAxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDVjMjQsIDB4MDAwZTMwMDApOworCQlicmVhazsKKwl9CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NGUpCisJCWNwX2N0eChjdHgsIDB4NDA1ODAwLCAxMSk7CisJY3BfY3R4KGN0eCwgMHg0MDcwMDAsIDEpOworfQorCitzdGF0aWMgdm9pZAorbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8zKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJaW50IGxlbiA9IG52NDBfZ3JhcGhfNDA5NyhjdHgtPmRldikgPyAweDA2ODQgOiAweDAwODQ7CisKKwljcF9vdXQgKGN0eCwgMHgzMDAwMDApOworCWNwX2xzciAoY3R4LCBsZW4gLSA0KTsKKwljcF9icmEgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUsIGNwX3N3YXBfc3RhdGUzZF8zX2lzX3NhdmUpOworCWNwX2xzciAoY3R4LCBsZW4pOworCWNwX25hbWUoY3R4LCBjcF9zd2FwX3N0YXRlM2RfM19pc19zYXZlKTsKKwljcF9vdXQgKGN0eCwgMHg4MDAwMDEpOworCisJY3R4LT5jdHh2YWxzX3BvcyArPSBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9zaGFkZXIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm9iaiA9IGN0eC0+ZGF0YTsKKwlpbnQgdnMsIHZzX25yLCB2c19sZW4sIHZzX25yX2IwLCB2c19ucl9iMSwgYjBfb2Zmc2V0LCBiMV9vZmZzZXQ7CisJaW50IG9mZnNldCwgaTsKKworCXZzX25yICAgID0gbnY0MF9ncmFwaF92c19jb3VudChjdHgtPmRldik7CisJdnNfbnJfYjAgPSAzNjM7CisJdnNfbnJfYjEgPSBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gMTI4IDogNjQ7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDApIHsKKwkJYjBfb2Zmc2V0ID0gMHgyMjAwLzQ7IC8qIDMzYTAgKi8KKwkJYjFfb2Zmc2V0ID0gMHg1NWEwLzQ7IC8qIDE1MDAgKi8KKwkJdnNfbGVuID0gMHg2YWEwLzQ7CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDEgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MikgeworCQliMF9vZmZzZXQgPSAweDIyMDAvNDsgLyogMjIwMCAqLworCQliMV9vZmZzZXQgPSAweDQ0MDAvNDsgLyogMGIwMCAqLworCQl2c19sZW4gPSAweDRmMDAvNDsKKwl9IGVsc2UgeworCQliMF9vZmZzZXQgPSAweDFkNDAvNDsgLyogMjIwMCAqLworCQliMV9vZmZzZXQgPSAweDNmNDAvNDsgLyogMGIwMCA6IDBhNDAgKi8KKwkJdnNfbGVuID0gbnY0MF9ncmFwaF80MDk3KGRldikgPyAweDRhNDAvNCA6IDB4NDk4MC80OworCX0KKworCWNwX2xzcihjdHgsIHZzX2xlbiAqIHZzX25yICsgMHgzMDAvNCk7CisJY3Bfb3V0KGN0eCwgbnY0MF9ncmFwaF80MDk3KGRldikgPyAweDgwMDA0MSA6IDB4ODAwMDI5KTsKKworCW9mZnNldCA9IGN0eC0+Y3R4dmFsc19wb3M7CisJY3R4LT5jdHh2YWxzX3BvcyArPSAoMHgwMzAwLzQgKyAodnNfbnIgKiB2c19sZW4pKTsKKworCWlmIChjdHgtPm1vZGUgIT0gTk9VVkVBVV9HUkNUWF9WQUxTKQorCQlyZXR1cm47CisKKwlvZmZzZXQgKz0gMHgwMjgwLzQ7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyssIG9mZnNldCArPSAyKQorCQludl93bzMyKGRldiwgb2JqLCBvZmZzZXQsIDB4M2Y4MDAwMDApOworCisJZm9yICh2cyA9IDA7IHZzIDwgdnNfbnI7IHZzKyssIG9mZnNldCArPSB2c19sZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IHZzX25yX2IwICogNjsgaSArPSA2KQorCQkJbnZfd28zMihkZXYsIG9iaiwgb2Zmc2V0ICsgYjBfb2Zmc2V0ICsgaSwgMHgwMDAwMDAwMSk7CisJCWZvciAoaSA9IDA7IGkgPCB2c19ucl9iMSAqIDQ7IGkgKz0gNCkKKwkJCW52X3dvMzIoZGV2LCBvYmosIG9mZnNldCArIGIxX29mZnNldCArIGksIDB4M2Y4MDAwMDApOworCX0KK30KKwordm9pZAorbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJLyogZGVjaWRlIHdoZXRoZXIgd2UncmUgbG9hZGluZy91bmxvYWRpbmcgdGhlIGNvbnRleHQgKi8KKwljcF9icmEgKGN0eCwgQVVUT19TQVZFLCBQRU5ESU5HLCBjcF9zZXR1cF9zYXZlKTsKKwljcF9icmEgKGN0eCwgVVNFUl9TQVZFLCBQRU5ESU5HLCBjcF9zZXR1cF9zYXZlKTsKKworCWNwX25hbWUoY3R4LCBjcF9jaGVja19sb2FkKTsKKwljcF9icmEgKGN0eCwgQVVUT19MT0FELCBQRU5ESU5HLCBjcF9zZXR1cF9hdXRvX2xvYWQpOworCWNwX2JyYSAoY3R4LCBVU0VSX0xPQUQsIFBFTkRJTkcsIGNwX3NldHVwX2xvYWQpOworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX2V4aXQpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgbG9hZCAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9hdXRvX2xvYWQpOworCWNwX3dhaXQoY3R4LCBTVEFUVVMsIElETEUpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX1NXQVApOworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9sb2FkKTsKKwljcF93YWl0KGN0eCwgU1RBVFVTLCBJRExFKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIExPQUQpOworCWNwX291dCAoY3R4LCAweDAwOTEwODgwKTsgLyogPz8gKi8KKwljcF9vdXQgKGN0eCwgMHgwMDkwMWZmZSk7IC8qID8/ICovCisJY3Bfb3V0IChjdHgsIDB4MDE5NDAwMDApOyAvKiA/PyAqLworCWNwX2xzciAoY3R4LCAweDIwKTsKKwljcF9vdXQgKGN0eCwgMHgwMDYwMDAwYik7IC8qID8/ICovCisJY3Bfd2FpdChjdHgsIFVOSzU3LCBDTEVBUik7CisJY3Bfb3V0IChjdHgsIDB4MDA2MDAwMGMpOyAvKiA/PyAqLworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX3N3YXBfc3RhdGUpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgc2F2ZSAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9zYXZlKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUpOworCisJLyogZ2VuZXJhbCBQR1JBUEggc3RhdGUgKi8KKwljcF9uYW1lKGN0eCwgY3Bfc3dhcF9zdGF0ZSk7CisJY3BfcG9zIChjdHgsIDB4MDAwMjAvNCk7CisJbnY0MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZXJhbChjdHgpOworCWNwX3dhaXQoY3R4LCBTVEFUVVMsIElETEUpOworCisJLyogM0Qgc3RhdGUsIGJsb2NrIDEgKi8KKwljcF9icmEgKGN0eCwgVU5LNTQsIENMRUFSLCBjcF9wcmVwYXJlX2V4aXQpOworCW52NDBfZ3JhcGhfY29uc3RydWN0X3N0YXRlM2QoY3R4KTsKKwljcF93YWl0KGN0eCwgU1RBVFVTLCBJRExFKTsKKworCS8qIDNEIHN0YXRlLCBibG9jayAyICovCisJbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8yKGN0eCk7CisKKwkvKiBTb21lIG90aGVyIGJsb2NrIG9mICJyYW5kb20iIHN0YXRlICovCisJbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8zKGN0eCk7CisKKwkvKiBQZXItdmVydGV4IHNoYWRlciBzdGF0ZSAqLworCWNwX3BvcyAoY3R4LCBjdHgtPmN0eHZhbHNfcG9zKTsKKwludjQwX2dyYXBoX2NvbnN0cnVjdF9zaGFkZXIoY3R4KTsKKworCS8qIHByZS1leGl0IHN0YXRlIHVwZGF0ZXMgKi8KKwljcF9uYW1lKGN0eCwgY3BfcHJlcGFyZV9leGl0KTsKKwljcF9icmEgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUsIGNwX2NoZWNrX2xvYWQpOworCWNwX2JyYSAoY3R4LCBVU0VSX1NBVkUsIFBFTkRJTkcsIGNwX2V4aXQpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX0NVUlJFTlQpOworCisJY3BfbmFtZShjdHgsIGNwX2V4aXQpOworCWNwX3NldCAoY3R4LCBVU0VSX1NBVkUsIE5PVF9QRU5ESU5HKTsKKwljcF9zZXQgKGN0eCwgVVNFUl9MT0FELCBOT1RfUEVORElORyk7CisJY3Bfb3V0IChjdHgsIENQX0VORCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKaW5kZXggZjhlMjhhMS4uMTE4ZDMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAl2b2lkIF9faW9tZW0gKmx1dCA9IG52Ym9fa21hcF9vYmpfaW92aXJ0dWFsKG52X2NydGMtPmx1dC5udmJvKTsKIAlpbnQgaTsKIAotCU5WX0RFQlVHKGNydGMtPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGNydGMtPmRldiwgIlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJd3JpdGV3KG52X2NydGMtPmx1dC5yW2ldID4+IDIsIGx1dCArIDgqaSArIDApOwpAQCAtNjgsOCArNjgsOCBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2byA9IGRldl9wcml2LT5ldm87CiAJaW50IGluZGV4ID0gbnZfY3J0Yy0+aW5kZXgsIHJldDsKIAotCU5WX0RFQlVHKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7Ci0JTlZfREVCVUcoZGV2LCAiJXNcbiIsIGJsYW5rZWQgPyAiYmxhbmtlZCIgOiAidW5ibGFua2VkIik7CisJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CisJTlZfREVCVUdfS01TKGRldiwgIiVzXG4iLCBibGFua2VkID8gImJsYW5rZWQiIDogInVuYmxhbmtlZCIpOwogCiAJaWYgKGJsYW5rZWQpIHsKIAkJbnZfY3J0Yy0+Y3Vyc29yLmhpZGUobnZfY3J0YywgZmFsc2UpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvID0gZGV2X3ByaXYtPmV2bzsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCAyICsgKHVwZGF0ZSA/IDIgOiAwKSk7CiAJaWYgKHJldCkgewpAQCAtMTkzLDcgKzE5Myw3IEBACiAJdWludDMyX3Qgb3V0WCwgb3V0WSwgaG9yaXosIHZlcnQ7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlzd2l0Y2ggKHNjYWxpbmdfbW9kZSkgewogCWNhc2UgRFJNX01PREVfU0NBTEVfTk9ORToKQEAgLTMwMSw3ICszMDEsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlpZiAoIWNydGMpCiAJCXJldHVybjsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCi0JTlZfREVCVUcoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCS8qIERpc2Nvbm5lY3QgYWxsIHVudXNlZCBlbmNvZGVycy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCW52NTBfY3J0Y19ibGFuayhudl9jcnRjLCBmYWxzZSk7CiAKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2ZyYW1lYnVmZmVyICpmYiA9IG5vdXZlYXVfZnJhbWVidWZmZXIoZHJtX2ZiKTsKIAlpbnQgcmV0LCBmb3JtYXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOwogCiAJc3dpdGNoIChkcm1fZmItPmRlcHRoKSB7CiAJY2FzZSAgODoKQEAgLTYxMiw3ICs2MTIsNyBAQAogCiAJKm52X2NydGMtPm1vZGUgPSAqYWRqdXN0ZWRfbW9kZTsKIAotCU5WX0RFQlVHKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CisJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CiAKIAloc3luY19kdXIgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydDsKIAl2c3luY19kdXIgPSBhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydDsKQEAgLTcwNiw3ICs3MDYsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBOVUxMOwogCWludCByZXQsIGk7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJbnZfY3J0YyA9IGt6YWxsb2Moc2l6ZW9mKCpudl9jcnRjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudl9jcnRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3Vyc29yLmMKaW5kZXggZTJlNzlhOC4uNzUzZTcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2N1cnNvci5jCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2NydGMtPmJhc2UuZGV2OwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJaWYgKHVwZGF0ZSAmJiBudl9jcnRjLT5jdXJzb3IudmlzaWJsZSkKIAkJcmV0dXJuOwpAQCAtNzYsNyArNzYsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBudl9jcnRjLT5iYXNlLmRldjsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWlmICh1cGRhdGUgJiYgIW52X2NydGMtPmN1cnNvci52aXNpYmxlKQogCQlyZXR1cm47CkBAIC0xMTYsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkCiBudjUwX2N1cnNvcl9zZXRfb2Zmc2V0KHN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMsIHVpbnQzMl90IG9mZnNldCkKIHsKLQlOVl9ERUJVRyhudl9jcnRjLT5iYXNlLmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKG52X2NydGMtPmJhc2UuZGV2LCAiXG4iKTsKIAlpZiAob2Zmc2V0ID09IG52X2NydGMtPmN1cnNvci5vZmZzZXQpCiAJCXJldHVybjsKIApAQCAtMTQzLDcgKzE0Myw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2NydGMtPmJhc2UuZGV2OwogCWludCBpZHggPSBudl9jcnRjLT5pbmRleDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DVVJTT1JfQ1VSU09SX0NUUkwyKGlkeCksIDApOwogCWlmICghbnZfd2FpdChOVjUwX1BESVNQTEFZX0NVUlNPUl9DVVJTT1JfQ1RSTDIoaWR4KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2RhYy5jCmluZGV4IGZiNTgzOGUuLmYwOGYwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kYWMuYwpAQCAtNDQsNyArNDQsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2byA9IGRldl9wcml2LT5ldm87CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIkRpc2Nvbm5lY3RpbmcgREFDICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIkRpc2Nvbm5lY3RpbmcgREFDICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAlyZXQgPSBSSU5HX1NQQUNFKGV2bywgMik7CiAJaWYgKHJldCkgewpAQCAtODEsMTEgKzgxLDExIEBACiAJLyogVXNlIGJpb3MgcHJvdmlkZWQgdmFsdWUgaWYgcG9zc2libGUuICovCiAJaWYgKGRldl9wcml2LT52Ymlvcy0+ZGFjdGVzdHZhbCkgewogCQlsb2FkX3BhdHRlcm4gPSBkZXZfcHJpdi0+dmJpb3MtPmRhY3Rlc3R2YWw7Ci0JCU5WX0RFQlVHKGRldiwgIlVzaW5nIGJpb3MgcHJvdmlkZWQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiVXNpbmcgYmlvcyBwcm92aWRlZCBsb2FkX3BhdHRlcm4gb2YgJWRcbiIsCiAJCQkgIGxvYWRfcGF0dGVybik7CiAJfSBlbHNlIHsKIAkJbG9hZF9wYXR0ZXJuID0gMzQwOwotCQlOVl9ERUJVRyhkZXYsICJVc2luZyBkZWZhdWx0IGxvYWRfcGF0dGVybiBvZiAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgIlVzaW5nIGRlZmF1bHQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAogCQkJIGxvYWRfcGF0dGVybik7CiAJfQogCkBAIC0xMDMsOSArMTAzLDkgQEAKIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAKIAlpZiAoc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQotCQlOVl9ERUJVRyhkZXYsICJMb2FkIHdhcyBkZXRlY3RlZCBvbiBvdXRwdXQgd2l0aCBvciAlZFxuIiwgb3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTG9hZCB3YXMgZGV0ZWN0ZWQgb24gb3V0cHV0IHdpdGggb3IgJWRcbiIsIG9yKTsKIAllbHNlCi0JCU5WX0RFQlVHKGRldiwgIkxvYWQgd2FzIG5vdCBkZXRlY3RlZCBvbiBvdXRwdXQgd2l0aCBvciAlZFxuIiwgb3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTG9hZCB3YXMgbm90IGRldGVjdGVkIG9uIG91dHB1dCB3aXRoIG9yICVkXG4iLCBvcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTE4LDcgKzExOCw3IEBACiAJdWludDMyX3QgdmFsOwogCWludCBvciA9IG52X2VuY29kZXItPm9yOwogCi0JTlZfREVCVUcoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCBtb2RlICVkXG4iLCBvciwgbW9kZSk7CiAKIAkvKiB3YWl0IGZvciBpdCB0byBiZSBkb25lICovCiAJaWYgKCFudl93YWl0KE5WNTBfUERJU1BMQVlfREFDX0RQTVNfQ1RSTChvciksCkBAIC0xNzMsNyArMTczLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCi0JTlZfREVCVUcoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKKwlOVl9ERUJVR19LTVMoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCWNvbm5lY3RvciA9IG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpOwogCWlmICghY29ubmVjdG9yKSB7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAl1aW50MzJfdCBtb2RlX2N0bCA9IDAsIG1vZGVfY3RsMiA9IDA7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAludjUwX2RhY19kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlpZiAoIWVuY29kZXIpCiAJCXJldHVybjsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKG52X2VuY29kZXIpOwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBEQUMgb3V0cHV0XG4iKTsKIAogCW52X2VuY29kZXIgPSBremFsbG9jKHNpemVvZigqbnZfZW5jb2RlciksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwppbmRleCAxMmM1ZWU2Li5hOTI2M2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJdWludDY0X3Qgc3RhcnQ7CiAJaW50IHJldCwgaTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl93cjMyKGRldiwgMHgwMDYxMDE4NCwgbnZfcmQzMihkZXYsIDB4MDA2MTQwMDQpKTsKIAkvKgpAQCAtMjMyLDcgKzIzMiw3IEBACiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfVU5LXzM4MCwgMCk7CiAJLyogUkFNIGlzIGNsYW1wZWQgdG8gMjU2IE1pQi4gKi8KIAlyYW1fYW1vdW50ID0gbm91dmVhdV9tZW1fZmJfYW1vdW50KGRldik7Ci0JTlZfREVCVUcoZGV2LCAicmFtX2Ftb3VudCAlZFxuIiwgcmFtX2Ftb3VudCk7CisJTlZfREVCVUdfS01TKGRldiwgInJhbV9hbW91bnQgJWRcbiIsIHJhbV9hbW91bnQpOwogCWlmIChyYW1fYW1vdW50ID4gMjU2KjEwMjQqMTAyNCkKIAkJcmFtX2Ftb3VudCA9IDI1NioxMDI0KjEwMjQ7CiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfUkFNX0FNT1VOVCwgcmFtX2Ftb3VudCAtIDEpOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJc3RydWN0IGRybV9jcnRjICpkcm1fY3J0YzsKIAlpbnQgcmV0LCBpOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJtX2NydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpjcnRjID0gbm91dmVhdV9jcnRjKGRybV9jcnRjKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCXVpbnQzMl90IGNvbm5lY3RvclsxNl0gPSB7fTsKIAlpbnQgcmV0LCBpOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCS8qIGluaXQgYmFzaWMga2VybmVsIG1vZGVzZXR0aW5nICovCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKQEAgLTU3Myw3ICs1NzMsNyBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKIApAQCAtNjE3LDcgKzYxNyw3IEBACiAJICogQ1JUQyBzZXBhcmF0ZWx5LCBhbmQgc3VibWlzc2lvbiB3aWxsIGJlIGJsb2NrZWQgYnkgdGhlIEdQVQogCSAqIHVudGlsIHdlIGhhbmRsZSBlYWNoIGluIHR1cm4uCiAJICovCi0JTlZfREVCVUcoZGV2LCAiMHg2MTAwMzA6IDB4JTA4eFxuIiwgdW5rMzApOworCU5WX0RFQlVHX0tNUyhkZXYsICIweDYxMDAzMDogMHglMDh4XG4iLCB1bmszMCk7CiAJaGVhZCA9IGZmcygodW5rMzAgPj4gOSkgJiAzKSAtIDE7CiAJaWYgKGhlYWQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQlvciA9IGk7CiAJfQogCi0JTlZfREVCVUcoZGV2LCAidHlwZSAlZCwgb3IgJWRcbiIsIHR5cGUsIG9yKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAidHlwZSAlZCwgb3IgJWRcbiIsIHR5cGUsIG9yKTsKIAlpZiAodHlwZSA9PSBPVVRQVVRfQU5ZKSB7CiAJCU5WX0VSUk9SKGRldiwgInVua25vd24gZW5jb2RlciEhXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtODExLDcgKzgxMSw3IEBACiAJcGNsayA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NSVENfUChoZWFkLCBDTE9DSykpICYgMHgzZmZmZmY7CiAJc2NyaXB0ID0gbnY1MF9kaXNwbGF5X3NjcmlwdF9zZWxlY3QoZGV2LCBkY2JlbnQsIHBjbGspOwogCi0JTlZfREVCVUcoZGV2LCAiaGVhZCAlZCBweGNsazogJWRLSHpcbiIsIGhlYWQsIHBjbGspOworCU5WX0RFQlVHX0tNUyhkZXYsICJoZWFkICVkIHB4Y2xrOiAlZEtIelxuIiwgaGVhZCwgcGNsayk7CiAKIAlpZiAoZGNiZW50LT50eXBlICE9IE9VVFBVVF9EUCkKIAkJbm91dmVhdV9iaW9zX3J1bl9kaXNwbGF5X3RhYmxlKGRldiwgZGNiZW50LCAwLCAtMik7CkBAIC04NzAsNyArODcwLDcgQEAKIAkJdWludDMyX3QgaW50cjAgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzApOwogCQl1aW50MzJfdCBpbnRyMSA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMSk7CiAKLQkJTlZfREVCVUcoZGV2LCAiUERJU1BMQVlfSU5UUl9CSCAweCUwOHggMHglMDh4XG4iLCBpbnRyMCwgaW50cjEpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiUERJU1BMQVlfSU5UUl9CSCAweCUwOHggMHglMDh4XG4iLCBpbnRyMCwgaW50cjEpOwogCiAJCWlmIChpbnRyMSAmIE5WNTBfUERJU1BMQVlfSU5UUl8xX0NMS19VTksxMCkKIAkJCW52NTBfZGlzcGxheV91bmsxMF9oYW5kbGVyKGRldik7CkBAIC05NzQsNyArOTc0LDcgQEAKIAkJdWludDMyX3QgaW50cjEgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzEpOwogCQl1aW50MzJfdCBjbG9jazsKIAotCQlOVl9ERUJVRyhkZXYsICJQRElTUExBWV9JTlRSIDB4JTA4eCAweCUwOHhcbiIsIGludHIwLCBpbnRyMSk7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJQRElTUExBWV9JTlRSIDB4JTA4eCAweCUwOHhcbiIsIGludHIwLCBpbnRyMSk7CiAKIAkJaWYgKCFpbnRyMCAmJiAhKGludHIxICYgfmRlbGF5ZWQpKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCmluZGV4IDc3YWUxYWEuLmI3MjgyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwogCiAJY2hpZCA9IHBmaWZvLT5jaGFubmVsX2lkKGRldik7Ci0JaWYgKGNoaWQgPCAwIHx8IGNoaWQgPj0gZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzKQorCWlmIChjaGlkIDwgMSB8fCBjaGlkID49IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscyAtIDEpCiAJCXJldHVybiAwOwogCiAJY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaGlkXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCAxNzdkODIyLi5jYTc5ZjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0xMDcsOSArMTA3LDEzIEBACiBzdGF0aWMgaW50CiBudjUwX2dyYXBoX2luaXRfY3R4Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwogCU5WX0RFQlVHKGRldiwgIlxuIik7CiAKLQludjQwX2dyY3R4X2luaXQoZGV2KTsKKwlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOworCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKQorCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSB0cnVlOwogCiAJbnZfd3IzMihkZXYsIDB4NDAwMzIwLCA0KTsKIAludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX0NVUiwgMCk7CkBAIC0xNDAsNyArMTQ0LDcgQEAKIG52NTBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwotCW52NDBfZ3JjdHhfZmluaShkZXYpOworCW5vdXZlYXVfZ3JjdHhfZmluaShkZXYpOwogfQogCiB2b2lkCkBAIC0yMDcsNyArMjExLDcgQEAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7Ci0JbnY0MF9ncmN0eF92YWxzX2xvYWQoZGV2LCBjdHgpOworCW5vdXZlYXVfZ3JjdHhfdmFsc19sb2FkKGRldiwgY3R4KTsKIAludl93bzMyKGRldiwgY3R4LCAweDAwMDAwLzQsIGNoYW4tPnJhbWluLT5pbnN0YW5jZSA+PiAxMik7CiAJaWYgKChkZXZfcHJpdi0+Y2hpcHNldCAmIDB4ZjApID09IDB4YTApCiAJCW52X3dvMzIoZGV2LCBjdHgsIDB4MDAwMDQvNCwgMHgwMDAwMDAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9zb3IuYwppbmRleCA4YzI4MDQ2Li5lMzk1YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfc29yLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8gPSBkZXZfcHJpdi0+ZXZvOwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJEaXNjb25uZWN0aW5nIFNPUiAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOworCU5WX0RFQlVHX0tNUyhkZXYsICJEaXNjb25uZWN0aW5nIFNPUiAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCiAJcmV0ID0gUklOR19TUEFDRShldm8sIDIpOwogCWlmIChyZXQpIHsKQEAgLTcwLDcgKzcwLDcgQEAKIAl9CiAKIAlpZiAoZHBlLT5zY3JpcHQwKSB7Ci0JCU5WX0RFQlVHKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMFxuIiwgbnZfZW5jb2Rlci0+b3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiU09SLSVkOiBydW5uaW5nIERQIHNjcmlwdCAwXG4iLCBudl9lbmNvZGVyLT5vcik7CiAJCW5vdXZlYXVfYmlvc19ydW5faW5pdF90YWJsZShkZXYsIGxlMTZfdG9fY3B1KGRwZS0+c2NyaXB0MCksCiAJCQkJCSAgICBudl9lbmNvZGVyLT5kY2IpOwogCX0KQEAgLTc5LDcgKzc5LDcgQEAKIAkJTlZfRVJST1IoZGV2LCAiU09SLSVkOiBsaW5rIHRyYWluaW5nIGZhaWxlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCiAJaWYgKGRwZS0+c2NyaXB0MSkgewotCQlOVl9ERUJVRyhkZXYsICJTT1ItJWQ6IHJ1bm5pbmcgRFAgc2NyaXB0IDFcbiIsIG52X2VuY29kZXItPm9yKTsKKwkJTlZfREVCVUdfS01TKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMVxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBsZTE2X3RvX2NwdShkcGUtPnNjcmlwdDEpLAogCQkJCQkgICAgbnZfZW5jb2Rlci0+ZGNiKTsKIAl9CkBAIC05Myw3ICs5Myw3IEBACiAJdWludDMyX3QgdmFsOwogCWludCBvciA9IG52X2VuY29kZXItPm9yOwogCi0JTlZfREVCVUcoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCBtb2RlICVkXG4iLCBvciwgbW9kZSk7CiAKIAkvKiB3YWl0IGZvciBpdCB0byBiZSBkb25lICovCiAJaWYgKCFudl93YWl0KE5WNTBfUERJU1BMQVlfU09SX0RQTVNfQ1RSTChvciksCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCi0JTlZfREVCVUcoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKKwlOVl9ERUJVR19LTVMoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCWNvbm5lY3RvciA9IG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpOwogCWlmICghY29ubmVjdG9yKSB7CkBAIC0xODIsNyArMTgyLDcgQEAKIAl1aW50MzJfdCBtb2RlX2N0bCA9IDA7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAludjUwX3Nvcl9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwogCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlpZiAoIWVuY29kZXIpCiAJCXJldHVybjsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlib29sIGR1bTsKIAlpbnQgdHlwZTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CiAJY2FzZSBPVVRQVVRfVE1EUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCmluZGV4IDYwMWY0YzAuLmI4MDZmZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYwpAQCAtNjQsNyArNjQsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gZHJtX21tYXAsCiAJCS5wb2xsID0gZHJtX3BvbGwsCiAJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pb2MzMi5jCmluZGV4IGQzY2I2NzYuLjUxYzk5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lvYzMyLmMKQEAgLTk1LDggKzk1LDcgQEAKIAkJCSAgJmluaXQtPmFncF90ZXh0dXJlc19vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9kZXB0aDMyIHsKQEAgLTEyOSw4ICsxMjgsNyBAQAogCQkJICAmZGVwdGgtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9ERVBUSCwgKHVuc2lnbmVkIGxvbmcpZGVwdGgpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1IxMjhfREVQVEgsICh1bnNpZ25lZCBsb25nKWRlcHRoKTsKIAogfQogCkBAIC0xNTMsOCArMTUxLDcgQEAKIAkJCSAgJnN0aXBwbGUtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9TVElQUExFLCAodW5zaWduZWQgbG9uZylzdGlwcGxlKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X1NUSVBQTEUsICh1bnNpZ25lZCBsb25nKXN0aXBwbGUpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9nZXRwYXJhbTMyIHsKQEAgLTE3OCw4ICsxNzUsNyBAQAogCQkJICAmZ2V0cGFyYW0tPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1IxMjhfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylnZXRwYXJhbSk7CiB9CiAKIGRybV9pb2N0bF9jb21wYXRfdCAqcjEyOF9jb21wYXRfaW9jdGxzW10gPSB7CkBAIC0yMTAsMTIgKzIwNiwxMCBAQAogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UgKyBEUk1fQVJSQVlfU0laRShyMTI4X2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IHIxMjhfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogCi0JbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCiAJaWYgKGZuICE9IE5VTEwpCiAJCXJldCA9ICgqZm4pIChmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCmluZGV4IDY1NzhkMTkuLjM4ODE0MGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwpAQCAtNTgsNiArNTgsNyBAQAogfSBhdG9tX2V4ZWNfY29udGV4dDsKIAogaW50IGF0b21fZGVidWcgPSAwOworc3RhdGljIHZvaWQgYXRvbV9leGVjdXRlX3RhYmxlX2xvY2tlZChzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpOwogdm9pZCBhdG9tX2V4ZWN1dGVfdGFibGUoc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgaW5kZXgsIHVpbnQzMl90ICogcGFyYW1zKTsKIAogc3RhdGljIHVpbnQzMl90IGF0b21fYXJnX21hc2tbOF0gPQpAQCAtNTczLDcgKzU3NCw3IEBACiAJZWxzZQogCQlTREVCVUcoIiAgIHRhYmxlOiAlZFxuIiwgaWR4KTsKIAlpZiAoVTE2KGN0eC0+Y3R4LT5jbWRfdGFibGUgKyA0ICsgMiAqIGlkeCkpCi0JCWF0b21fZXhlY3V0ZV90YWJsZShjdHgtPmN0eCwgaWR4LCBjdHgtPnBzICsgY3R4LT5wc19zaGlmdCk7CisJCWF0b21fZXhlY3V0ZV90YWJsZV9sb2NrZWQoY3R4LT5jdHgsIGlkeCwgY3R4LT5wcyArIGN0eC0+cHNfc2hpZnQpOwogfQogCiBzdGF0aWMgdm9pZCBhdG9tX29wX2NsZWFyKGF0b21fZXhlY19jb250ZXh0ICpjdHgsIGludCAqcHRyLCBpbnQgYXJnKQpAQCAtMTA0MCw3ICsxMDQxLDcgQEAKIAlhdG9tX29wX3NociwgQVRPTV9BUkdfTUN9LCB7CiBhdG9tX29wX2RlYnVnLCAwfSx9OwogCi12b2lkIGF0b21fZXhlY3V0ZV90YWJsZShzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpCitzdGF0aWMgdm9pZCBhdG9tX2V4ZWN1dGVfdGFibGVfbG9ja2VkKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGluZGV4LCB1aW50MzJfdCAqIHBhcmFtcykKIHsKIAlpbnQgYmFzZSA9IENVMTYoY3R4LT5jbWRfdGFibGUgKyA0ICsgMiAqIGluZGV4KTsKIAlpbnQgbGVuLCB3cywgcHMsIHB0cjsKQEAgLTEwOTIsNiArMTA5MywxMyBAQAogCQlrZnJlZShlY3R4LndzKTsKIH0KIAordm9pZCBhdG9tX2V4ZWN1dGVfdGFibGUoc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgaW5kZXgsIHVpbnQzMl90ICogcGFyYW1zKQoreworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCWF0b21fZXhlY3V0ZV90YWJsZV9sb2NrZWQoY3R4LCBpbmRleCwgcGFyYW1zKTsKKwltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworfQorCiBzdGF0aWMgaW50IGF0b21faWlvX2xlbltdID0geyAxLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCAzIH07CiAKIHN0YXRpYyB2b2lkIGF0b21faW5kZXhfaWlvKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGJhc2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5oCmluZGV4IDY2NzE4NDguLjQ3ZmQ5NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5oCkBAIC0xMjAsNiArMTIwLDcgQEAKIAogc3RydWN0IGF0b21fY29udGV4dCB7CiAJc3RydWN0IGNhcmRfaW5mbyAqY2FyZDsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJdm9pZCAqYmlvczsKIAl1aW50MzJfdCBjbWRfdGFibGUsIGRhdGFfdGFibGU7CiAJdWludDE2X3QgKmlpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAppbmRleCA1ZjQ4NTE1Li45MWFkMGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCkBAIC00NjkwLDYgKzQ2OTAsMjA1IEBACiAJQVRPTV9QT1dFUk1PREVfSU5GT19WMyBhc1Bvd2VyUGxheUluZm9bQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0tdOwogfSBBVE9NX1BPV0VSUExBWV9JTkZPX1YzOwogCisvKiBOZXcgUFBsaWIgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1RIRVJNQUxDT05UUk9MTEVSCisKK3sKKyAgICBVQ0hBUiB1Y1R5cGU7ICAgICAgICAgICAvLyBvbmUgb2YgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl8qCisgICAgVUNIQVIgdWNJMmNMaW5lOyAgICAgICAgLy8gYXMgaW50ZXJwcmV0ZWQgYnkgREFMIEkyQworICAgIFVDSEFSIHVjSTJjQWRkcmVzczsKKyAgICBVQ0hBUiB1Y0ZhblBhcmFtZXRlcnM7ICAvLyBGYW4gQ29udHJvbCBQYXJhbWV0ZXJzLgorICAgIFVDSEFSIHVjRmFuTWluUlBNOyAgICAgIC8vIEZhbiBNaW5pbXVtIFJQTSAoaHVuZHJlZHMpIC0tIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkuCisgICAgVUNIQVIgdWNGYW5NYXhSUE07ICAgICAgLy8gRmFuIE1heGltdW0gUlBNIChodW5kcmVkcykgLS0gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seS4KKyAgICBVQ0hBUiB1Y1Jlc2VydmVkOyAgICAgICAvLyAtLS0tCisgICAgVUNIQVIgdWNGbGFnczsgICAgICAgICAgLy8gdG8gYmUgZGVmaW5lZAorfSBBVE9NX1BQTElCX1RIRVJNQUxDT05UUk9MTEVSOworCisjZGVmaW5lIEFUT01fUFBfRkFOUEFSQU1FVEVSU19UQUNIT01FVEVSX1BVTFNFU19QRVJfUkVWT0xVVElPTl9NQVNLIDB4MGYKKyNkZWZpbmUgQVRPTV9QUF9GQU5QQVJBTUVURVJTX05PRkFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCAgICAvLyBObyBmYW4gaXMgY29ubmVjdGVkIHRvIHRoaXMgY29udHJvbGxlci4KKworI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX05PTkUgICAgICAwCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTE02MyAgICAgIDEgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfQURNMTAzMiAgIDIgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfQURNMTAzMCAgIDMgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTVVBNjY0OSAgIDQgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTE02NCAgICAgIDUKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9GNzUzNzUgICAgNiAgLy8gTm90IHVzZWQgYnkgUFBMaWIKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9SVjZ4eCAgICAgNworI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX1JWNzcwICAgICA4CisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfQURUNzQ3MyAgIDkKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUFBMSUJfU1RBVEUKK3sKKyAgICBVQ0hBUiB1Y05vbkNsb2NrU3RhdGVJbmRleDsKKyAgICBVQ0hBUiB1Y0Nsb2NrU3RhdGVJbmRpY2VzWzFdOyAvLyB2YXJpYWJsZS1zaXplZAorfSBBVE9NX1BQTElCX1NUQVRFOworCisvLy8vIEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU6OnVsUGxhdGZvcm1DYXBzCisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0JBQ0tCSUFTIDEKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfUE9XRVJQTEFZIDIKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfU0JJT1NQT1dFUlNPVVJDRSA0CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0FTUE1fTDBzIDgKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfQVNQTV9MMSAxNgorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9IQVJEV0FSRURDIDMyCisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0dFTUlOSVBSSU1BUlkgNjQKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfU1RFUFZEREMgMTI4CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX1ZPTFRBR0VDT05UUk9MIDI1NgorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9TSURFUE9SVENPTlRST0wgNTEyCisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX1RVUk5PRkZQTExfQVNQTUwxIDEwMjQKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfSFRMSU5LQ09OVFJPTCAyMDQ4CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFCit7CisgICAgICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKKworICAgICAgVUNIQVIgdWNEYXRhUmV2aXNpb247CisKKyAgICAgIFVDSEFSIHVjTnVtU3RhdGVzOworICAgICAgVUNIQVIgdWNTdGF0ZUVudHJ5U2l6ZTsKKyAgICAgIFVDSEFSIHVjQ2xvY2tJbmZvU2l6ZTsKKyAgICAgIFVDSEFSIHVjTm9uQ2xvY2tTaXplOworCisgICAgICAvLyBvZmZzZXQgZnJvbSBzdGFydCBvZiB0aGlzIHRhYmxlIHRvIGFycmF5IG9mIHVjTnVtU3RhdGVzIEFUT01fUFBMSUJfU1RBVEUgc3RydWN0dXJlcworICAgICAgVVNIT1JUIHVzU3RhdGVBcnJheU9mZnNldDsKKworICAgICAgLy8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhpcyB0YWJsZSB0byBhcnJheSBvZiBBU0lDLXNwZWNpZmljIHN0cnVjdHVyZXMsCisgICAgICAvLyBjdXJyZW50bHkgQVRPTV9QUExJQl9DTE9DS19JTkZPLgorICAgICAgVVNIT1JUIHVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQ7CisKKyAgICAgIC8vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHRoaXMgdGFibGUgdG8gYXJyYXkgb2YgQVRPTV9QUExJQl9OT05DTE9DS19JTkZPCisgICAgICBVU0hPUlQgdXNOb25DbG9ja0luZm9BcnJheU9mZnNldDsKKworICAgICAgVVNIT1JUIHVzQmFja2JpYXNUaW1lOyAgICAvLyBpbiBtaWNyb3NlY29uZHMKKyAgICAgIFVTSE9SVCB1c1ZvbHRhZ2VUaW1lOyAgICAgLy8gaW4gbWljcm9zZWNvbmRzCisgICAgICBVU0hPUlQgdXNUYWJsZVNpemU7ICAgICAgIC8vdGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIG9yIHRoZSBleHRlbmRlZCBzdHJ1Y3R1cmUKKworICAgICAgVUxPTkcgdWxQbGF0Zm9ybUNhcHM7ICAgICAgICAgICAgLy8gU2VlIEFUT01fUFBMSUJfQ0FQU18qCisKKyAgICAgIEFUT01fUFBMSUJfVEhFUk1BTENPTlRST0xMRVIgICAgc1RoZXJtYWxDb250cm9sbGVyOworCisgICAgICBVU0hPUlQgdXNCb290Q2xvY2tJbmZvT2Zmc2V0OworICAgICAgVVNIT1JUIHVzQm9vdE5vbkNsb2NrSW5mb09mZnNldDsKKworfSBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFOworCisvLy8vIEFUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTzo6dXNDbGFzc2lmaWNhdGlvbgorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX01BU0sgICAgICAgICAgMHgwMDA3CisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfU0hJRlQgICAgICAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfTk9ORSAgICAgICAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfQkFUVEVSWSAgICAgICAxCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfQkFMQU5DRUQgICAgICAzCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfUEVSRk9STUFOQ0UgICA1CisvLyAyLCA0LCA2LCA3IGFyZSByZXNlcnZlZAorCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fQk9PVCAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9USEVSTUFMICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0xJTUlURURQT1dFUlNPVVJDRSAgICAgMHgwMDIwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fUkVTVCAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9GT1JDRUQgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OXzNEUEVSRk9STUFOQ0UgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fT1ZFUkRSSVZFVEVNUExBVEUgICAgICAweDAyMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VVkRTVEFURSAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OXzNETE9XICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fQUNQSSAgICAgICAgICAgICAgICAgICAweDEwMDAKKy8vIHJlbWFpbmluZyAzIGJpdHMgYXJlIHJlc2VydmVkCisKKy8vLy8gQVRPTV9QUExJQl9OT05DTE9DS19JTkZPOjp1bENhcHNBbmRTZXR0aW5ncworI2RlZmluZSBBVE9NX1BQTElCX1NJTkdMRV9ESVNQTEFZX09OTFkgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVRPTV9QUExJQl9TVVBQT1JUU19WSURFT19QTEFZQkFDSyAgICAgICAgIDB4MDAwMDAwMDIKKworLy8gMCBpcyAyLjVHYi9zLCAxIGlzIDVHYi9zCisjZGVmaW5lIEFUT01fUFBMSUJfUENJRV9MSU5LX1NQRUVEX01BU0sgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFUT01fUFBMSUJfUENJRV9MSU5LX1NQRUVEX1NISUZUICAgICAgICAgICAyCisKKy8vIGxhbmVzIC0gMTogMSwgMiwgNCwgOCwgMTIsIDE2IHBlcm1pdHRlZCBieSBQQ0lFIHNwZWMKKyNkZWZpbmUgQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwRjgKKyNkZWZpbmUgQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfU0hJRlQgICAgICAgICAgIDMKKworLy8gbG9va3VwIGludG8gcmVkdWNlZCByZWZyZXNoLXJhdGUgdGFibGUKKyNkZWZpbmUgQVRPTV9QUExJQl9MSU1JVEVEX1JFRlJFU0hSQVRFX1ZBTFVFX01BU0sgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9MSU1JVEVEX1JFRlJFU0hSQVRFX1ZBTFVFX1NISUZUIDgKKworI2RlZmluZSBBVE9NX1BQTElCX0xJTUlURURfUkVGUkVTSFJBVEVfVU5MSU1JVEVEICAgIDAKKyNkZWZpbmUgQVRPTV9QUExJQl9MSU1JVEVEX1JFRlJFU0hSQVRFXzUwSFogICAgICAgICAxCisvLyAyLTE1IFRCRCBhcyBuZWVkZWQuCisKKyNkZWZpbmUgQVRPTV9QUExJQl9TT0ZUV0FSRV9ESVNBQkxFX0xPQURCQUxBTkNJTkcgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9TT0ZUV0FSRV9FTkFCTEVfU0xFRVBfRk9SX1RJTUVTVEFNUFMgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9FTkFCTEVfVkFSSUJSSUdIVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKworI2RlZmluZSBBVE9NX1BQTElCX0RJU0FMTE9XX09OX0RDICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisKKy8vIENvbnRhaW5lZCBpbiBhbiBhcnJheSBzdGFydGluZyBhdCB0aGUgb2Zmc2V0CisvLyBpbiBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFOjp1c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0LgorLy8gcmVmZXJlbmNlZCBmcm9tIEFUT01fUFBMSUJfU1RBVEVfSU5GTzo6dWNOb25DbG9ja1N0YXRlSW5kZXgKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX05PTkNMT0NLX0lORk8KK3sKKyAgICAgIFVTSE9SVCB1c0NsYXNzaWZpY2F0aW9uOworICAgICAgVUNIQVIgIHVjTWluVGVtcGVyYXR1cmU7CisgICAgICBVQ0hBUiAgdWNNYXhUZW1wZXJhdHVyZTsKKyAgICAgIFVMT05HICB1bENhcHNBbmRTZXR0aW5nczsKKyAgICAgIFVDSEFSICB1Y1JlcXVpcmVkUG93ZXI7CisgICAgICBVQ0hBUiAgdWNVbnVzZWQxWzNdOworfSBBVE9NX1BQTElCX05PTkNMT0NLX0lORk87CisKKy8vIENvbnRhaW5lZCBpbiBhbiBhcnJheSBzdGFydGluZyBhdCB0aGUgb2Zmc2V0CisvLyBpbiBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFOjp1c0Nsb2NrSW5mb0FycmF5T2Zmc2V0LgorLy8gcmVmZXJlbmNlZCBmcm9tIEFUT01fUFBMSUJfU1RBVEU6OnVjQ2xvY2tTdGF0ZUluZGljZXMKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1I2MDBfQ0xPQ0tfSU5GTworeworICAgICAgVVNIT1JUIHVzRW5naW5lQ2xvY2tMb3c7CisgICAgICBVQ0hBUiB1Y0VuZ2luZUNsb2NrSGlnaDsKKworICAgICAgVVNIT1JUIHVzTWVtb3J5Q2xvY2tMb3c7CisgICAgICBVQ0hBUiB1Y01lbW9yeUNsb2NrSGlnaDsKKworICAgICAgVVNIT1JUIHVzVkREQzsKKyAgICAgIFVTSE9SVCB1c1VudXNlZDE7CisgICAgICBVU0hPUlQgdXNVbnVzZWQyOworCisgICAgICBVTE9ORyB1bEZsYWdzOyAvLyBBVE9NX1BQTElCX1I2MDBfRkxBR1NfKgorCit9IEFUT01fUFBMSUJfUjYwMF9DTE9DS19JTkZPOworCisvLyB1bEZsYWdzIGluIEFUT01fUFBMSUJfUjYwMF9DTE9DS19JTkZPCisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19QQ0lFR0VOMiAgICAgICAgICAxCisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19VVkRTQUZFICAgICAgICAgICAyCisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19CQUNLQklBU0VOQUJMRSAgICA0CisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19NRU1PUllfT0RUX09GRiAgICA4CisjZGVmaW5lIEFUT01fUFBMSUJfUjYwMF9GTEFHU19NRU1PUllfRExMX09GRiAgICAxNgorCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9SUzc4MF9DTE9DS19JTkZPCisKK3sKKyAgICAgIFVTSE9SVCB1c0xvd0VuZ2luZUNsb2NrTG93OyAgICAgICAgIC8vIExvdyBFbmdpbmUgY2xvY2sgaW4gTUh6ICh0aGUgc2FtZSB3YXkgYXMgb24gdGhlIFI2MDApLgorICAgICAgVUNIQVIgIHVjTG93RW5naW5lQ2xvY2tIaWdoOworICAgICAgVVNIT1JUIHVzSGlnaEVuZ2luZUNsb2NrTG93OyAgICAgICAgLy8gSGlnaCBFbmdpbmUgY2xvY2sgaW4gTUh6LgorICAgICAgVUNIQVIgIHVjSGlnaEVuZ2luZUNsb2NrSGlnaDsKKyAgICAgIFVTSE9SVCB1c01lbW9yeUNsb2NrTG93OyAgICAgICAgICAgIC8vIEZvciBub3cgb25lIG9mIHRoZSBBVE9NX1BQTElCX1JTNzgwX1NQTUNMS19YWFhYIGNvbnN0YW50cy4KKyAgICAgIFVDSEFSICB1Y01lbW9yeUNsb2NrSGlnaDsgICAgICAgICAgIC8vIEN1cnJlbnR5bCB1bnVzZWQuCisgICAgICBVQ0hBUiAgdWNQYWRkaW5nOyAgICAgICAgICAgICAgICAgICAvLyBGb3IgcHJvcGVyIGFsaWdubWVudCBhbmQgc2l6ZS4KKyAgICAgIFVTSE9SVCB1c1ZEREM7ICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgNzgwLCB1c2U6IE5vbmUsIExvdywgSGlnaCwgVmFyaWFibGUKKyAgICAgIFVDSEFSICB1Y01heEhUTGlua1dpZHRoOyAgICAgICAgICAgIC8vIEZyb20gU0JJT1MgLSB7MiwgNCwgOCwgMTZ9CisgICAgICBVQ0hBUiAgdWNNaW5IVExpbmtXaWR0aDsgICAgICAgICAgICAvLyBGcm9tIFNCSU9TIC0gezIsIDQsIDgsIDE2fS4gRWZmZWN0aXZlIG9ubHkgaWYgQ0RMVyBlbmFibGVkLiBNaW5pbXVtIGRvd24gc3RyZWFtIHdpZHRoIGNvdWxkIGJlIGJpZ2dlciBhcyBkaXNwbGF5IEJXIHJlcXVyaWVtZW50LgorICAgICAgVVNIT1JUIHVzSFRMaW5rRnJlcTsgICAgICAgICAgICAgICAgLy8gU2VlIGRlZmluaXRpb24gQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX3h4eCBvciBpbiBNSHooPj0yMDApLgorICAgICAgVUxPTkcgIHVsRmxhZ3M7Cit9IEFUT01fUFBMSUJfUlM3ODBfQ0xPQ0tfSU5GTzsKKworI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfTk9ORSAgICAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9MT1cgICAgICAgIDEKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9WT0xUQUdFX0hJR0ggICAgICAgMgorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfVkFSSUFCTEUgICAzCisKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9TUE1DTEtfTk9ORSAgICAgICAgMCAgIC8vIFdlIGNhbm5vdCBjaGFuZ2UgdGhlIHNpZGUgcG9ydCBtZW1vcnkgY2xvY2ssIGxlYXZlIGl0IGFzIGl0IGlzLgorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1NQTUNMS19MT1cgICAgICAgICAxCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfU1BNQ0xLX0hJR0ggICAgICAgIDIKKworI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTk9ORSAgICAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV9MT1cgICAgICAgIDEKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX0hJR0ggICAgICAgMgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qICBGb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZvciBjb21wYXRpYmxpdHkgaXNzdWUgaW4gZGlmZmVyZW50IFNXIGNvbXBvbmVudHMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IDg0ZTVkZjcuLjcxNzI3NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCkBAIC0yODgxLDYgKzI4ODEsMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCB0cmFjay0+bnVtX2NiOyBpKyspIHsKIAkJaWYgKHRyYWNrLT5jYltpXS5yb2JqID09IE5VTEwpIHsKKwkJCWlmICghKHRyYWNrLT5mYXN0ZmlsbCB8fCB0cmFjay0+Y29sb3JfY2hhbm5lbF9tYXNrIHx8CisJCQkgICAgICB0cmFjay0+YmxlbmRfcmVhZF9lbmFibGUpKSB7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlEUk1fRVJST1IoIltkcm1dIE5vIGJ1ZmZlciBmb3IgY29sb3IgYnVmZmVyICVkICFcbiIsIGkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggNzE4OGMzNy4uYjI3YTY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTY3LDEzICs2NywxNSBAQAogCXVuc2lnbmVkCQkJaW1tZF9kd29yZHM7CiAJdW5zaWduZWQJCQludW1fYXJyYXlzOwogCXVuc2lnbmVkCQkJbWF4X2luZHg7CisJdW5zaWduZWQJCQljb2xvcl9jaGFubmVsX21hc2s7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfYXJyYXkJYXJyYXlzWzExXTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJY2JbUjMwMF9NQVhfQ0JdOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAl6YjsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlCXRleHR1cmVzW1IzMDBfVFJBQ0tfTUFYX1RFWFRVUkVdOwogCWJvb2wJCQkJel9lbmFibGVkOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVfY3ViZTsKLQorCWJvb2wJCQkJZmFzdGZpbGw7CisJYm9vbAkJCQlibGVuZF9yZWFkX2VuYWJsZTsKIH07CiAKIGludCByMTAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCA4MzQ5MGMyLi4zZjJjYzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtODg3LDYgKzg4NywxNCBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0gUjEwMF9UUkFDS19DT01QX0RYVDE7CiAJCQlicmVhazsKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9BVEkyTjoKKwkJCWlmIChwLT5yZGV2LT5mYW1pbHkgPCBDSElQX1I0MjApIHsKKwkJCQlEUk1fRVJST1IoIkludmFsaWQgdGV4dHVyZSBmb3JtYXQgJXVcbiIsCisJCQkJCSAgKGlkeF92YWx1ZSAmIDB4MUYpKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCS8qIFRoZSBzYW1lIHJ1bGVzIGFwcGx5IGFzIGZvciBEWFQzLzUuICovCisJCQkvKiBQYXNzIHRocm91Z2guICovCiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRFhUMzoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9EWFQ1OgogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CkBAIC05NTEsNiArOTU5LDE2IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGhfMTEgPSB0bXA7CiAJCQl0bXAgPSAoKGlkeF92YWx1ZSA+PiAxNikgJiAxKSA8PCAxMTsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHRfMTEgPSB0bXA7CisKKwkJCS8qIEFUSTFOICovCisJCQlpZiAoaWR4X3ZhbHVlICYgKDEgPDwgMTQpKSB7CisJCQkJLyogVGhlIHNhbWUgcnVsZXMgYXBwbHkgYXMgZm9yIERYVDEuICovCisJCQkJdHJhY2stPnRleHR1cmVzW2ldLmNvbXByZXNzX2Zvcm1hdCA9CisJCQkJCVIxMDBfVFJBQ0tfQ09NUF9EWFQxOworCQkJfQorCQl9IGVsc2UgaWYgKGlkeF92YWx1ZSAmICgxIDw8IDE0KSkgeworCQkJRFJNX0VSUk9SKCJGb3JiaWRkZW4gYml0IFRYRk9STUFUX01TQlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4NDQ4MDoKQEAgLTk5Miw2ICsxMDEwLDE4IEBACiAJCX0KIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKKwljYXNlIDB4NGUwYzoKKwkJLyogUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sgKi8KKwkJdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayA9IGlkeF92YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSAweDRkMWM6CisJCS8qIFpCX0JXX0NOVEwgKi8KKwkJdHJhY2stPmZhc3RmaWxsID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgMikpOworCQlicmVhazsKKwljYXNlIDB4NGUwNDoKKwkJLyogUkIzRF9CTEVORENOVEwgKi8KKwkJdHJhY2stPmJsZW5kX3JlYWRfZW5hYmxlID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgMikpOworCQlicmVhazsKIAljYXNlIDB4NGJlODoKIAkJLyogdmFsaWQgcmVnaXN0ZXIgb25seSBvbiBSVjUzMCAqLwogCQlpZiAocC0+cmRldi0+ZmFtaWx5ID09IENISVBfUlY1MzApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKaW5kZXggY2IyZTQ3MC4uMzRiZmZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYwpAQCAtOTkwLDcgKzk5MCw3IEBACiAJaW50IHN6OwogCWludCBhZGRyOwogCWludCB0eXBlOwotCWludCBjbGFtcDsKKwlpbnQgaXNjbGFtcDsKIAlpbnQgc3RyaWRlOwogCVJJTkdfTE9DQUxTOwogCkBAIC05OTksMTAgKzk5OSwxMCBAQAogCWFkZHIgPSAoKGhlYWRlci5yNTAwZnAuYWRyaGlfZmxhZ3MgJiAxKSA8PCA4KSB8IGhlYWRlci5yNTAwZnAuYWRybG87CiAKIAl0eXBlID0gISEoaGVhZGVyLnI1MDBmcC5hZHJoaV9mbGFncyAmIFI1MDBGUF9DT05TVEFOVF9UWVBFKTsKLQljbGFtcCA9ICEhKGhlYWRlci5yNTAwZnAuYWRyaGlfZmxhZ3MgJiBSNTAwRlBfQ09OU1RBTlRfQ0xBTVApOworCWlzY2xhbXAgPSAhIShoZWFkZXIucjUwMGZwLmFkcmhpX2ZsYWdzICYgUjUwMEZQX0NPTlNUQU5UX0NMQU1QKTsKIAogCWFkZHIgfD0gKHR5cGUgPDwgMTYpOwotCWFkZHIgfD0gKGNsYW1wIDw8IDE3KTsKKwlhZGRyIHw9IChpc2NsYW1wIDw8IDE3KTsKIAogCXN0cmlkZSA9IHR5cGUgPyA0IDogNjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCmluZGV4IDRiN2FmZWYuLjE3MzVhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKQEAgLTkwMCw2ICs5MDAsNyBAQAogIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfRkxfSTMyCQkgICAgMHgxQgogIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfRkxfSTMyQTMyCQkgICAgMHgxQwogIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfRkxfUjMyRzMyQjMyQTMyCSAgICAweDFECisjCWRlZmluZSBSMzAwX1RYX0ZPUk1BVF9BVEkyTgkJICAgIDB4MUYKIAkvKiBhbHBoYSBtb2RlcywgY29udmVuaWVuY2UgbW9zdGx5ICovCiAJLyogaWYgeW91IGhhdmUgYWxwaGEsIHBpY2sgY29uc3RhbnQgYXBwcm9wcmlhdGUgdG8gdGhlCiAJICAgbnVtYmVyIG9mIGNoYW5uZWxzICgxIGZvciBJOCwgMiBmb3IgSThBOCwgNCBmb3IgUjhHOEI4QTgsIGV0YyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCAwZDgyMDc2Li40NDA2MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JKmNzX3JlbG9jID0gJnAtPnJlbG9jc1swXTsKKwkqY3NfcmVsb2MgPSBwLT5yZWxvY3M7CiAJKCpjc19yZWxvYyktPmxvYmouZ3B1X29mZnNldCA9ICh1NjQpcmVsb2NzX2NodW5rLT5rZGF0YVtpZHggKyAzXSA8PCAzMjsKIAkoKmNzX3JlbG9jKS0+bG9iai5ncHVfb2Zmc2V0IHw9IHJlbG9jc19jaHVuay0+a2RhdGFbaWR4ICsgMF07CiAJcmV0dXJuIDA7CkBAIC03MTcsNyArNzE3LDcgQEAKIAlpZiAocC0+Y2h1bmtfcmVsb2NzX2lkeCA9PSAtMSkgewogCQlyZXR1cm4gMDsKIAl9Ci0JcC0+cmVsb2NzID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJhZGVvbl9jc19yZWxvYyksIEdGUF9LRVJORUwpOworCXAtPnJlbG9jcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fY3NfcmVsb2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAocC0+cmVsb2NzID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggY2Q2NTBmZC4uNTNiNTU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0xNjIsNiArMTYyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQljcmVhdGVkOwogCXN0cnVjdCBsaXN0X2hlYWQJCWVtaXRlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlzaWduYWxlZDsKKwlib29sCQkJCWluaXRpYWxpemVkOwogfTsKIAogc3RydWN0IHJhZGVvbl9mZW5jZSB7CkBAIC0yMDIsOCArMjAzLDkgQEAKIHN0cnVjdCByYWRlb25fbW1hbiB7CiAJc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmICAgICAgICBib19nbG9iYWxfcmVmOwogCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZQltZW1fZ2xvYmFsX3JlZjsKLQlib29sCQkJCW1lbV9nbG9iYWxfcmVmZXJlbmNlZDsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZQkJYmRldjsKKwlib29sCQkJCW1lbV9nbG9iYWxfcmVmZXJlbmNlZDsKKwlib29sCQkJCWluaXRpYWxpemVkOwogfTsKIAogc3RydWN0IHJhZGVvbl9ibyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKaW5kZXggNjM2MTE2Yi4uZWIyOTIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaApAQCAtMzMsNiArMzMsNyBAQAogICovCiB1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7Cit1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogCiB1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTEwNiw3ICsxMDcsNyBAQAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCi0JLmdldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0xNjYsNyArMTY3LDcgQEAKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAotCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0yNTksNyArMjYwLDcgQEAKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAotCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggMTJhMGM3Ni4uNDFkZDhlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0xMTQsNiArMTE0LDcgQEAKIAkJCWkyYy5pMmNfaWQgPSBncGlvLT5zdWNJMmNJZC51Y0FjY2VzczsKIAogCQkJaTJjLnZhbGlkID0gdHJ1ZTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC03NDUsOCArNzQ2LDcgQEAKIAkJZWxzZQogCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCi0JCQkJCQkJCQkoMSA8PAotCQkJCQkJCQkJIGkpLAorCQkJCQkJCQkJKDEgPDwgaSksCiAJCQkJCQkJCQlkYWMpLAogCQkJCQkJICAoMSA8PCBpKSk7CiAJfQpAQCAtNzU4LDMyICs3NTgsMzAgQEAKIAkJCQlpZiAoYmlvc19jb25uZWN0b3JzW2pdLnZhbGlkICYmIChpICE9IGopKSB7CiAJCQkJCWlmIChiaW9zX2Nvbm5lY3RvcnNbaV0ubGluZV9tdXggPT0KIAkJCQkJICAgIGJpb3NfY29ubmVjdG9yc1tqXS5saW5lX211eCkgewotCQkJCQkJaWYgKCgoYmlvc19jb25uZWN0b3JzW2ldLgotCQkJCQkJICAgICAgZGV2aWNlcyAmCi0JCQkJCQkgICAgICAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKQotCQkJCQkJICAgICAmJiAoYmlvc19jb25uZWN0b3JzW2pdLgotCQkJCQkJCSBkZXZpY2VzICYKLQkJCQkJCQkgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkpCi0JCQkJCQkgICAgfHwKLQkJCQkJCSAgICAoKGJpb3NfY29ubmVjdG9yc1tqXS4KLQkJCQkJCSAgICAgIGRldmljZXMgJgotCQkJCQkJICAgICAgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkKLQkJCQkJCSAgICAgJiYgKGJpb3NfY29ubmVjdG9yc1tpXS4KLQkJCQkJCQkgZGV2aWNlcyAmCi0JCQkJCQkJIChBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpKSkgewotCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS4KLQkJCQkJCQkgICAgZGV2aWNlcyB8PQotCQkJCQkJCSAgICBiaW9zX2Nvbm5lY3RvcnNbal0uCi0JCQkJCQkJICAgIGRldmljZXM7Ci0JCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLgotCQkJCQkJCSAgICBjb25uZWN0b3JfdHlwZSA9Ci0JCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOwotCQkJCQkJCWlmIChiaW9zX2Nvbm5lY3RvcnNbal0uZGV2aWNlcyAmCi0JCQkJCQkJICAgIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpCisJCQkJCQkvKiBtYWtlIHN1cmUgbm90IHRvIGNvbWJpbmUgTFZEUyAqLworCQkJCQkJaWYgKGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgeworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS5saW5lX211eCA9IDUzOworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS5kZGNfYnVzLnZhbGlkID0gZmFsc2U7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQlpZiAoYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLmxpbmVfbXV4ID0gNTM7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLmRkY19idXMudmFsaWQgPSBmYWxzZTsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCS8qIGNvbWJpbmUgYW5hbG9nIGFuZCBkaWdpdGFsIGZvciBEVkktSSAqLworCQkJCQkJaWYgKCgoYmlvc19jb25uZWN0b3JzW2ldLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKSAmJgorCQkJCQkJICAgICAoYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1JUX1NVUFBPUlQpKSkgfHwKKwkJCQkJCSAgICAoKGJpb3NfY29ubmVjdG9yc1tqXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkgJiYKKwkJCQkJCSAgICAgKGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkpKSB7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLmRldmljZXMgfD0KKwkJCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXM7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLmNvbm5lY3Rvcl90eXBlID0KKwkJCQkJCQkJRFJNX01PREVfQ09OTkVDVE9SX0RWSUk7CisJCQkJCQkJaWYgKGJpb3NfY29ubmVjdG9yc1tqXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkKIAkJCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLmhwZCA9CiAJCQkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbal0uaHBkOwotCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tqXS4KLQkJCQkJCQkgICAgdmFsaWQgPSBmYWxzZTsKKwkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbal0udmFsaWQgPSBmYWxzZTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KQEAgLTEwMjksNiArMTAyNyw3IEBACiAJCQkJc3MtPmRlbGF5ID0gc3NfaW5mby0+YXNTU19JbmZvW2ldLnVjU1NfRGVsYXk7CiAJCQkJc3MtPnJhbmdlID0gc3NfaW5mby0+YXNTU19JbmZvW2ldLnVjU1NfUmFuZ2U7CiAJCQkJc3MtPnJlZmRpdiA9IHNzX2luZm8tPmFzU1NfSW5mb1tpXS51Y1JlY29tbWVuZGVkUmVmX0RpdjsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KQEAgLTEyMzQsNiArMTIzMyw2MSBAQAogCXJldHVybiB0cnVlOwogfQogCitlbnVtIHJhZGVvbl90dl9zdGQKK3JhZGVvbl9hdG9tYmlvc19nZXRfdHZfaW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBBbmFsb2dUVl9JbmZvKTsKKwl1aW50MTZfdCBkYXRhX29mZnNldDsKKwl1aW50OF90IGZyZXYsIGNyZXY7CisJc3RydWN0IF9BVE9NX0FOQUxPR19UVl9JTkZPICp0dl9pbmZvOworCWVudW0gcmFkZW9uX3R2X3N0ZCB0dl9zdGQgPSBUVl9TVERfTlRTQzsKKworCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGluZGV4LCBOVUxMLCAmZnJldiwgJmNyZXYsICZkYXRhX29mZnNldCk7CisKKwl0dl9pbmZvID0gKHN0cnVjdCBfQVRPTV9BTkFMT0dfVFZfSU5GTyAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKworCXN3aXRjaCAodHZfaW5mby0+dWNUVl9Cb290VXBEZWZhdWx0U3RhbmRhcmQpIHsKKwljYXNlIEFUT01fVFZfTlRTQzoKKwkJdHZfc3RkID0gVFZfU1REX05UU0M7CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBOVFNDXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX05UU0NKOgorCQl0dl9zdGQgPSBUVl9TVERfTlRTQ19KOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogTlRTQy1KXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX1BBTDoKKwkJdHZfc3RkID0gVFZfU1REX1BBTDsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFBBTFxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUxNOgorCQl0dl9zdGQgPSBUVl9TVERfUEFMX007CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBQQUwtTVxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUxOOgorCQl0dl9zdGQgPSBUVl9TVERfUEFMX047CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBQQUwtTlxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUxDTjoKKwkJdHZfc3RkID0gVFZfU1REX1BBTF9DTjsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFBBTC1DTlxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUw2MDoKKwkJdHZfc3RkID0gVFZfU1REX1BBTF82MDsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFBBTC02MFxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9TRUNBTToKKwkJdHZfc3RkID0gVFZfU1REX1NFQ0FNOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogU0VDQU1cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0dl9zdGQgPSBUVl9TVERfTlRTQzsKKwkJRFJNX0lORk8oIlVua25vd24gVFYgc3RhbmRhcmQ7IGRlZmF1bHRpbmcgdG8gTlRTQ1xuIik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdHZfc3RkOworfQorCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjICoKIHJhZGVvbl9hdG9tYmlvc19nZXRfdHZfZGFjX2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKQogewpAQCAtMTI2OSw2ICsxMzIzLDcgQEAKIAkJZGFjID0gZGFjX2luZm8tPnVjREFDMl9OVFNDX0RBQ19BZGp1c3RtZW50OwogCQl0dl9kYWMtPm50c2NfdHZkYWNfYWRqID0gKGJnIDw8IDE2KSB8IChkYWMgPDwgMjApOwogCisJCXR2X2RhYy0+dHZfc3RkID0gcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHJkZXYpOwogCX0KIAlyZXR1cm4gdHZfZGFjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwppbmRleCBiMDYyMTA5Li44MTJmMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYwpAQCAtNjIsNyArNjIsNyBAQAogfQogCiAvKiAxMCBraHogKi8KLXN0YXRpYyB1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9wbGwgKm1wbGwgPSAmcmRldi0+Y2xvY2subXBsbDsKIAl1aW50MzJfdCBmYl9kaXYsIHJlZl9kaXYsIHBvc3RfZGl2LCBtY2xrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IGM1MDIxYTMuLjU4ZjM0MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTU5NSw2ICs1OTUsMzQgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBkZWZhdWx0X3ByaW1hcnlkYWNfYWRqW0NISVBfTEFTVF0gPSB7CisJMHgwMDAwMDgwOCwJCS8qIHIxMDAgICovCisJMHgwMDAwMDgwOCwJCS8qIHJ2MTAwICovCisJMHgwMDAwMDgwOCwJCS8qIHJzMTAwICovCisJMHgwMDAwMDgwOCwJCS8qIHJ2MjAwICovCisJMHgwMDAwMDgwOCwJCS8qIHJzMjAwICovCisJMHgwMDAwMDgwOCwJCS8qIHIyMDAgICovCisJMHgwMDAwMDgwOCwJCS8qIHJ2MjUwICovCisJMHgwMDAwMDAwMCwJCS8qIHJzMzAwICovCisJMHgwMDAwMDgwOCwJCS8qIHJ2MjgwICovCisJMHgwMDAwMDgwOCwJCS8qIHIzMDAgICovCisJMHgwMDAwMDgwOCwJCS8qIHIzNTAgICovCisJMHgwMDAwMDgwOCwJCS8qIHJ2MzUwICovCisJMHgwMDAwMDgwOCwJCS8qIHJ2MzgwICovCisJMHgwMDAwMDgwOCwJCS8qIHI0MjAgICovCisJMHgwMDAwMDgwOCwJCS8qIHI0MjMgICovCisJMHgwMDAwMDgwOCwJCS8qIHJ2NDEwICovCisJMHgwMDAwMDAwMCwJCS8qIHJzNDAwICovCisJMHgwMDAwMDAwMCwJCS8qIHJzNDgwICovCit9OworCitzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X2dldF9wcmltYXJ5X2RhY19pbmZvX2Zyb21fdGFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJCQkJICBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMgKnBfZGFjKQoreworCXBfZGFjLT5wczJfcGRhY19hZGogPSBkZWZhdWx0X3ByaW1hcnlkYWNfYWRqW3JkZXYtPmZhbWlseV07CisJcmV0dXJuOworfQorCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMgKnJhZGVvbl9jb21iaW9zX2dldF9wcmltYXJ5X2RhY19pbmZvKHN0cnVjdAogCQkJCQkJCQkgICAgICAgcmFkZW9uX2VuY29kZXIKIAkJCQkJCQkJICAgICAgICplbmNvZGVyKQpAQCAtNjA0LDIwICs2MzIsMjAgQEAKIAl1aW50MTZfdCBkYWNfaW5mbzsKIAl1aW50OF90IHJldiwgYmcsIGRhYzsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMgKnBfZGFjID0gTlVMTDsKKwlpbnQgZm91bmQgPSAwOworCisJcF9kYWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMpLAorCQkJR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXBfZGFjKQorCQlyZXR1cm4gTlVMTDsKIAogCWlmIChyZGV2LT5iaW9zID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIG91dDsKIAogCS8qIGNoZWNrIENSVCB0YWJsZSAqLwogCWRhY19pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19DUlRfSU5GT19UQUJMRSk7CiAJaWYgKGRhY19pbmZvKSB7Ci0JCXBfZGFjID0KLQkJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fZW5jb2Rlcl9wcmltYXJ5X2RhYyksCi0JCQkgICAgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFwX2RhYykKLQkJCXJldHVybiBOVUxMOwotCiAJCXJldiA9IFJCSU9TOChkYWNfaW5mbykgJiAweDM7CiAJCWlmIChyZXYgPCAyKSB7CiAJCQliZyA9IFJCSU9TOChkYWNfaW5mbyArIDB4MikgJiAweGY7CkBAIC02MjgsMTcgKzY1NiwyMCBAQAogCQkJZGFjID0gUkJJT1M4KGRhY19pbmZvICsgMHgzKSAmIDB4ZjsKIAkJCXBfZGFjLT5wczJfcGRhY19hZGogPSAoYmcgPDwgOCkgfCAoZGFjKTsKIAkJfQotCisJCWZvdW5kID0gMTsKIAl9CiAKK291dDoKKwlpZiAoIWZvdW5kKSAvKiBmYWxsYmFjayB0byBkZWZhdWx0cyAqLworCQlyYWRlb25fbGVnYWN5X2dldF9wcmltYXJ5X2RhY19pbmZvX2Zyb21fdGFibGUocmRldiwgcF9kYWMpOworCiAJcmV0dXJuIHBfZGFjOwogfQogCi1zdGF0aWMgZW51bSByYWRlb25fdHZfc3RkCi1yYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpCitlbnVtIHJhZGVvbl90dl9zdGQKK3JhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJkZXYtPmRkZXY7CiAJdWludDE2X3QgdHZfaW5mbzsKIAllbnVtIHJhZGVvbl90dl9zdGQgdHZfc3RkID0gVFZfU1REX05UU0M7CiAKQEAgLTc3OSw3ICs4MTAsNyBAQAogCQkJdHZfZGFjLT5udHNjX3R2ZGFjX2FkaiA9IChiZyA8PCAxNikgfCAoZGFjIDw8IDIwKTsKIAkJCWZvdW5kID0gMTsKIAkJfQotCQl0dl9kYWMtPnR2X3N0ZCA9IHJhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKGVuY29kZXIpOworCQl0dl9kYWMtPnR2X3N0ZCA9IHJhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKHJkZXYpOwogCX0KIAlpZiAoIWZvdW5kKSB7CiAJCS8qIHRoZW4gY2hlY2sgQ1JUIHRhYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggNWVlY2UxOC4uYjgyYWU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtMjA4LDYgKzIwOCwxOCBAQAogCQlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIAogCQlEUk1fREVCVUcoIkFkZGluZyBuYXRpdmUgcGFuZWwgbW9kZSAlc1xuIiwgbW9kZS0+bmFtZSk7CisJfSBlbHNlIGlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgIT0gMCAmJgorCQkgICBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgIT0gMCkgeworCQkvKiBtYWMgbGFwdG9wcyB3aXRob3V0IGFuIGVkaWQgKi8KKwkJLyogTm90ZSB0aGF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBleGFjdCBwYW5lbCBtb2RlLAorCQkgKiBidXQgYW4gYXBwcm94aW1hdGlvbiBiYXNlZCBvbiB0aGUgY3Z0IGZvcm11bGEuICBGb3IgdGhlc2UKKwkJICogc3lzdGVtcyB3ZSBzaG91bGQgaWRlYWxseSByZWFkIHRoZSBtb2RlIGluZm8gb3V0IG9mIHRoZQorCQkgKiByZWdpc3RlcnMgb3IgYWRkIGEgbW9kZSB0YWJsZSwgYnV0IHRoaXMgd29ya3MgYW5kIGlzIG11Y2gKKwkJICogc2ltcGxlci4KKwkJICovCisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBuYXRpdmVfbW9kZS0+aGRpc3BsYXksIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSwgNjAsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCB8IERSTV9NT0RFX1RZUEVfRFJJVkVSOworCQlEUk1fREVCVUcoIkFkZGluZyBjdnQgYXBwcm94aW1hdGlvbiBvZiBuYXRpdmUgcGFuZWwgbW9kZSAlc1xuIiwgbW9kZS0+bmFtZSk7CiAJfQogCXJldHVybiBtb2RlOwogfQpAQCAtNjAzLDcgKzYxNSw3IEBACiAJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0KSB7CisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgJiYgZW5jb2RlcikgewogCQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOwogCQkJcmV0ID0gZW5jb2Rlcl9mdW5jcy0+ZGV0ZWN0KGVuY29kZXIsIGNvbm5lY3Rvcik7CiAJCX0KQEAgLTExNzEsNyArMTE4Myw3IEBACiAJCQkJCQkgICAgICAxKTsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLnR2X3N0ZF9wcm9wZXJ0eSwKLQkJCQkJCSAgICAgIDEpOworCQkJCQkJICAgICAgcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHJkZXYpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgpAQCAtMTMxNSw3ICsxMzI3LDcgQEAKIAkJCQkJCSAgICAgIDEpOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5LAotCQkJCQkJICAgICAgMSk7CisJCQkJCQkgICAgICByYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhyZGV2KSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCmluZGV4IDBiMmY5YzIuLjA2MTIzYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwpAQCAtMjE0NSw2ICsyMTQ1LDcgQEAKIAkJCSAmbWFzdGVyX3ByaXYtPnNhcmVhKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiU0FSRUEgc2V0dXAgZmFpbGVkXG4iKTsKKwkJa2ZyZWUobWFzdGVyX3ByaXYpOwogCQlyZXR1cm4gcmV0OwogCX0KIAltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYS0+aGFuZGxlICsgc2l6ZW9mKHN0cnVjdCBkcm1fc2FyZWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCAwMmJjZGIxLi4wYzUxZjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtMzkxLDYgKzM5MSwxMiBAQAogCQkvKiBGSVhNRTogbm90IHN1cHBvcnRlZCB5ZXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlyZGV2LT5hc2ljLT5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTDsKKwkJcmRldi0+YXNpYy0+c2V0X21lbW9yeV9jbG9jayA9IE5VTEw7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4MSw2ICs0ODcsNyBAQAogCWF0b21fY2FyZF9pbmZvLT5wbGxfd3JpdGUgPSBjYWlsX3BsbF93cml0ZTsKIAogCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQgPSBhdG9tX3BhcnNlKGF0b21fY2FyZF9pbmZvLCByZGV2LT5iaW9zKTsKKwltdXRleF9pbml0KCZyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LT5tdXRleCk7CiAJcmFkZW9uX2F0b21faW5pdGlhbGl6ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2LT5kZGV2KTsKIAlhdG9tX2FsbG9jYXRlX2ZiX3NjcmF0Y2gocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJcmV0dXJuIDA7CkBAIC01MzksOSArNTQ2LDcyIEBACiAJfQogfQogCi0vKgotICogUmFkZW9uIGRldmljZS4KLSAqLwordm9pZCByYWRlb25fY2hlY2tfYXJndW1lbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIHZyYW1saW1pdCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvICovCisJc3dpdGNoIChyYWRlb25fdnJhbV9saW1pdCkgeworCWNhc2UgMDoKKwljYXNlIDQ6CisJY2FzZSA4OgorCWNhc2UgMTY6CisJY2FzZSAzMjoKKwljYXNlIDY0OgorCWNhc2UgMTI4OgorCWNhc2UgMjU2OgorCWNhc2UgNTEyOgorCWNhc2UgMTAyNDoKKwljYXNlIDIwNDg6CisJY2FzZSA0MDk2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihyZGV2LT5kZXYsICJ2cmFtIGxpbWl0ICglZCkgbXVzdCBiZSBhIHBvd2VyIG9mIDJcbiIsCisJCQkJcmFkZW9uX3ZyYW1fbGltaXQpOworCQlyYWRlb25fdnJhbV9saW1pdCA9IDA7CisJCWJyZWFrOworCX0KKwlyYWRlb25fdnJhbV9saW1pdCA9IHJhZGVvbl92cmFtX2xpbWl0IDw8IDIwOworCS8qIGd0dCBzaXplIG11c3QgYmUgcG93ZXIgb2YgdHdvIGFuZCBncmVhdGVyIG9yIGVxdWFsIHRvIDMyTSAqLworCXN3aXRjaCAocmFkZW9uX2dhcnRfc2l6ZSkgeworCWNhc2UgNDoKKwljYXNlIDg6CisJY2FzZSAxNjoKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiZ2FydCBzaXplICglZCkgdG9vIHNtYWxsIGZvcmNpbmcgdG8gNTEyTVxuIiwKKwkJCQlyYWRlb25fZ2FydF9zaXplKTsKKwkJcmFkZW9uX2dhcnRfc2l6ZSA9IDUxMjsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwljYXNlIDY0OgorCWNhc2UgMTI4OgorCWNhc2UgMjU2OgorCWNhc2UgNTEyOgorCWNhc2UgMTAyNDoKKwljYXNlIDIwNDg6CisJY2FzZSA0MDk2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihyZGV2LT5kZXYsICJnYXJ0IHNpemUgKCVkKSBtdXN0IGJlIGEgcG93ZXIgb2YgMlxuIiwKKwkJCQlyYWRlb25fZ2FydF9zaXplKTsKKwkJcmFkZW9uX2dhcnRfc2l6ZSA9IDUxMjsKKwkJYnJlYWs7CisJfQorCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCS8qIEFHUCBtb2RlIGNhbiBvbmx5IGJlIC0xLCAxLCAyLCA0LCA4ICovCisJc3dpdGNoIChyYWRlb25fYWdwbW9kZSkgeworCWNhc2UgLTE6CisJY2FzZSAwOgorCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiaW52YWxpZCBBR1AgbW9kZSAlZCAodmFsaWQgbW9kZTogIgorCQkJCSItMSwgMCwgMSwgMiwgNCwgOClcbiIsIHJhZGVvbl9hZ3Btb2RlKTsKKwkJcmFkZW9uX2FncG1vZGUgPSAwOworCQlicmVhazsKKwl9Cit9CisKIGludCByYWRlb25fZGV2aWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKIAkJICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtNTgwLDkgKzY1MCw5IEBACiAKIAkvKiBTZXQgYXNpYyBmdW5jdGlvbnMgKi8KIAlyID0gcmFkZW9uX2FzaWNfaW5pdChyZGV2KTsKLQlpZiAocikgeworCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CisJcmFkZW9uX2NoZWNrX2FyZ3VtZW50cyhyZGV2KTsKIAogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1AgJiYgcmFkZW9uX2FncG1vZGUgPT0gLTEpIHsKIAkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOwpAQCAtNjYzLDE2ICs3MzMsMTggQEAKICAqLwogaW50IHJhZGVvbl9zdXNwZW5kX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2OwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAlpbnQgcjsKIAotCWlmIChkZXYgPT0gTlVMTCB8fCByZGV2ID09IE5VTEwpIHsKKwlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5kZXZfcHJpdmF0ZSA9PSBOVUxMKSB7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfUFJFVEhBVykgewogCQlyZXR1cm4gMDsKIAl9CisJcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKIAkvKiB1bnBpbiB0aGUgZnJvbnQgYnVmZmVycyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CiAJCXN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgKnJmYiA9IHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKaW5kZXggYTEzM2I4My4uMWZiMmYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwpAQCAtMzI5LDggKzMyOSwxMSBAQAogCQkJCXJldCA9IHJhZGVvbl9nZXRfYXRvbV9jb25uZWN0b3JfaW5mb19mcm9tX29iamVjdF90YWJsZShkZXYpOwogCQkJZWxzZQogCQkJCXJldCA9IHJhZGVvbl9nZXRfYXRvbV9jb25uZWN0b3JfaW5mb19mcm9tX3N1cHBvcnRlZF9kZXZpY2VzX3RhYmxlKGRldik7Ci0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJcmV0ID0gcmFkZW9uX2dldF9sZWdhY3lfY29ubmVjdG9yX2luZm9fZnJvbV9iaW9zKGRldik7CisJCQlpZiAocmV0ID09IGZhbHNlKQorCQkJCXJldCA9IHJhZGVvbl9nZXRfbGVnYWN5X2Nvbm5lY3Rvcl9pbmZvX2Zyb21fdGFibGUoZGV2KTsKKwkJfQogCX0gZWxzZSB7CiAJCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJCXJldCA9IHJhZGVvbl9nZXRfbGVnYWN5X2Nvbm5lY3Rvcl9pbmZvX2Zyb21fdGFibGUoZGV2KTsKQEAgLTczOSw3ICs3NDIsNyBAQAogCXsgVFZfU1REX1NFQ0FNLCAic2VjYW0iIH0sCiB9OwogCi1pbnQgcmFkZW9uX21vZGVzZXRfY3JlYXRlX3Byb3BzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIGludCByYWRlb25fbW9kZXNldF9jcmVhdGVfcHJvcHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IGksIHN6OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IGRiZDU2ZWYuLjhiYTNkZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgLm9wZW4gPSBkcm1fb3BlbiwKIAkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCSAubW1hcCA9IGRybV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApAQCAtMjg0LDcgKzI4NCw3IEBACiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJIC5vcGVuID0gZHJtX29wZW4sCiAJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkgLm1tYXAgPSByYWRlb25fbW1hcCwKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDBkMWQ5MDguLmNjYmE5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMjMzLDYgKzIzMyw4IEBACiAJCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKIAkJCWFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CisJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ID0gbW9kZS0+aGRpc3BsYXk7CisJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CiAJCX0KIAkJYWRqdXN0ZWRfbW9kZS0+YmFzZS5pZCA9IG1vZGVfaWQ7CiAJfQpAQCAtNDk1LDkgKzQ5Nyw5IEBACiAJCQkJYXJncy52MS51Y01pc2MgfD0gUEFORUxfRU5DT0RFUl9NSVNDX0hETUlfVFlQRTsKIAkJCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOwogCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDApKQorCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmIEFUT01fUEFORUxfTUlTQ19EVUFMKQogCQkJCQlhcmdzLnYxLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfRFVBTDsKLQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAxKSkKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfODg4UkdCKQogCQkJCQlhcmdzLnYxLnVjTWlzYyB8PSAoMSA8PCAxKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQpAQCAtNTI0LDE4ICs1MjYsMTggQEAKIAkJCWFyZ3MudjIudWNUZW1wb3JhbCA9IDA7CiAJCQlhcmdzLnYyLnVjRlJDID0gMDsKIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKLQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAwKSkKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfRFVBTCkKIAkJCQkJYXJncy52Mi51Y01pc2MgfD0gUEFORUxfRU5DT0RFUl9NSVNDX0RVQUw7Ci0JCQkJaWYgKGRpZy0+bHZkc19taXNjICYgKDEgPDwgNSkpIHsKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfU1BBVElBTCkgewogCQkJCQlhcmdzLnYyLnVjU3BhdGlhbCA9IFBBTkVMX0VOQ09ERVJfU1BBVElBTF9ESVRIRVJfRU47Ci0JCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDEpKQorCQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfODg4UkdCKQogCQkJCQkJYXJncy52Mi51Y1NwYXRpYWwgfD0gUEFORUxfRU5DT0RFUl9TUEFUSUFMX0RJVEhFUl9ERVBUSDsKIAkJCQl9Ci0JCQkJaWYgKGRpZy0+bHZkc19taXNjICYgKDEgPDwgNikpIHsKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfVEVNUE9SQUwpIHsKIAkJCQkJYXJncy52Mi51Y1RlbXBvcmFsID0gUEFORUxfRU5DT0RFUl9URU1QT1JBTF9ESVRIRVJfRU47Ci0JCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDEpKQorCQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfODg4UkdCKQogCQkJCQkJYXJncy52Mi51Y1RlbXBvcmFsIHw9IFBBTkVMX0VOQ09ERVJfVEVNUE9SQUxfRElUSEVSX0RFUFRIOwotCQkJCQlpZiAoKChkaWctPmx2ZHNfbWlzYyA+PiAyKSAmIDB4MykgPT0gMikKKwkJCQkJaWYgKCgoZGlnLT5sdmRzX21pc2MgPj4gQVRPTV9QQU5FTF9NSVNDX0dSRVlfTEVWRUxfU0hJRlQpICYgMHgzKSA9PSAyKQogCQkJCQkJYXJncy52Mi51Y1RlbXBvcmFsIHw9IFBBTkVMX0VOQ09ERVJfVEVNUE9SQUxfTEVWRUxfNDsKIAkJCQl9CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKaW5kZXggY2I0Y2Q5Ny4uODQ5NWQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCkBAIC0xNDAsMTYgKzE0MCwxNSBAQAogCiBib29sIHJhZGVvbl9mZW5jZV9zaWduYWxlZChzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGZlbmNlLT5yZGV2OwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCWJvb2wgc2lnbmFsZWQgPSBmYWxzZTsKIAotCWlmIChyZGV2LT5ncHVfbG9ja3VwKSB7CisJaWYgKCFmZW5jZSkKIAkJcmV0dXJuIHRydWU7Ci0JfQotCWlmIChmZW5jZSA9PSBOVUxMKSB7CisKKwlpZiAoZmVuY2UtPnJkZXYtPmdwdV9sb2NrdXApCiAJCXJldHVybiB0cnVlOwotCX0KKwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZmVuY2UtPnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOwogCXNpZ25hbGVkID0gZmVuY2UtPnNpZ25hbGVkOwogCS8qIGlmIHdlIGFyZSBzaHV0aW5nIGRvd24gcmVwb3J0IGFsbCBmZW5jZSBhcyBzaWduYWxlZCAqLwpAQCAtMzI0LDcgKzMyMyw3IEBACiAJd3JpdGVfbG9ja19pcnFzYXZlKCZyZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKIAlyID0gcmFkZW9uX3NjcmF0Y2hfZ2V0KHJkZXYsICZyZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcpOwogCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiRmVuY2UgZmFpbGVkIHRvIGdldCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmVuY2UgZmFpbGVkIHRvIGdldCBzY3JhdGNoIHJlZ2lzdGVyXG4iKTsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm4gcjsKIAl9CkBAIC0zMzUsOSArMzM0LDEwIEBACiAJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmZlbmNlX2Rydi5zaWduYWxlZCk7CiAJcmRldi0+ZmVuY2VfZHJ2LmNvdW50X3RpbWVvdXQgPSAwOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJkZXYtPmZlbmNlX2Rydi5xdWV1ZSk7CisJcmRldi0+ZmVuY2VfZHJ2LmluaXRpYWxpemVkID0gdHJ1ZTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ZmVuY2VfZHJ2LmxvY2ssIGlycV9mbGFncyk7CiAJaWYgKHJhZGVvbl9kZWJ1Z2ZzX2ZlbmNlX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBmZW5jZSAhXG4iKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmZW5jZSBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb24gZmFpbGVkXG4iKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0zNDYsMTEgKzM0NiwxMyBAQAogewogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCisJaWYgKCFyZGV2LT5mZW5jZV9kcnYuaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKIAl3YWtlX3VwX2FsbCgmcmRldi0+ZmVuY2VfZHJ2LnF1ZXVlKTsKIAl3cml0ZV9sb2NrX2lycXNhdmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOwogCXJhZGVvbl9zY3JhdGNoX2ZyZWUocmRldiwgcmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ZmVuY2VfZHJ2LmxvY2ssIGlycV9mbGFncyk7Ci0JRFJNX0lORk8oInJhZGVvbjogZmVuY2UgZmluYWxpemVkXG4iKTsKKwlyZGV2LT5mZW5jZV9kcnYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faW9jMzIuYwppbmRleCBhMWJmMTFkLi40OGI3Y2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lvYzMyLmMKQEAgLTkyLDggKzkyLDcgQEAKIAkJCSAgJmluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9DUF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fQ1BfSU5JVCwgKHVuc2lnbmVkIGxvbmcpaW5pdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fY2xlYXIzMiB7CkBAIC0xMjUsOCArMTI0LDcgQEAKIAkJCSAgJmNsci0+ZGVwdGhfYm94ZXMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0NMRUFSLCAodW5zaWduZWQgbG9uZyljbHIpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9DTEVBUiwgKHVuc2lnbmVkIGxvbmcpY2xyKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9zdGlwcGxlMzIgewpAQCAtMTQ5LDggKzE0Nyw3IEBACiAJCQkgICZyZXF1ZXN0LT5tYXNrKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9TVElQUExFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fU1RJUFBMRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fdGV4X2ltYWdlMzIgewpAQCAtMjA0LDggKzIwMSw3IEBACiAJCQkgICZpbWFnZS0+ZGF0YSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fVEVYVFVSRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX1RFWFRVUkUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3ZlcnRleDJfMzIgewpAQCAtMjM4LDggKzIzNCw3IEBACiAJCQkgICZyZXF1ZXN0LT5wcmltKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9WRVJURVgyLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fVkVSVEVYMiwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fY21kX2J1ZmZlcjMyIHsKQEAgLTI2OCw4ICsyNjMsNyBAQAogCQkJICAmcmVxdWVzdC0+Ym94ZXMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0NNREJVRiwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX0NNREJVRiwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fZ2V0cGFyYW0zMiB7CkBAIC0yOTMsOCArMjg3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9tZW1fYWxsb2MzMiB7CkBAIC0zMjIsOCArMzE1LDcgQEAKIAkJCSAgJnJlcXVlc3QtPnJlZ2lvbl9vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2lycV9lbWl0MzIgewpAQCAtMzQ1LDggKzMzNyw3IEBACiAJCQkgICZyZXF1ZXN0LT5pcnFfc2VxKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9JUlFfRU1JVCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX0lSUV9FTUlULCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogLyogVGhlIHR3byA2NC1iaXQgYXJjaGVzIHdoZXJlIGFsaWdub2YodTY0KT09NCBpbiAzMi1iaXQgY29kZSAqLwpAQCAtMzcyLDggKzM2Myw3IEBACiAJCQkgICZyZXF1ZXN0LT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX1NFVFBBUkFNLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX1NFVFBBUkFNLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CiB9CiAjZWxzZQogI2RlZmluZSBjb21wYXRfcmFkZW9uX2NwX3NldHBhcmFtIE5VTEwKQEAgLTQxMywxMiArNDAzLDEwIEBACiAJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9BUlJBWV9TSVpFKHJhZGVvbl9jb21wYXRfaW9jdGxzKSkKIAkJZm4gPSByYWRlb25fY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogCi0JbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCiAJaWYgKGZuICE9IE5VTEwpCiAJCXJldCA9ICgqZm4pIChmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00MzEsOSArNDE5LDcgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFKQogCQlyZXR1cm4gZHJtX2NvbXBhdF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KLQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKaW5kZXggYjc5ZWNjNC4uMmYzNDlhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKQEAgLTI4OSwxNiArMjg5LDE2IEBACiAJZHJtX3JhZGVvbl9pcnFfZW1pdF90ICplbWl0ID0gZGF0YTsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwotCiAJaWYgKCFkZXZfcHJpdikgewogCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCiAJcmVzdWx0ID0gcmFkZW9uX2VtaXRfaXJxKGRldik7CiAKIAlpZiAoRFJNX0NPUFlfVE9fVVNFUihlbWl0LT5pcnFfc2VxLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCmluZGV4IGI4MmVkZTkuLmNjMjc0ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwpAQCAtNDMsOCArNDMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3JteF9tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xMDU5LDcgKzEwNTgsNyBAQAogCXJhZGVvbl9zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwogCXJhZGVvbl9vdmVyc2Nhbl9zZXR1cChjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkgewotCQlyYWRlb25fbGVnYWN5X3JteF9tb2RlX3NldChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKKwkJcmFkZW9uX2xlZ2FjeV9ybXhfbW9kZV9zZXQoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJfSBlbHNlIHsKIAkJaWYgKHJhZGVvbl9jcnRjLT5ybXhfdHlwZSAhPSBSTVhfT0ZGKSB7CiAJCQkvKiBGSVhNRTogb25seSBmaXJzdCBjcnRjIGhhcyBybXggd2hhdCBzaG91bGQgd2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggZGYwMDUxNS4uOTgxNTA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTIwNyw2ICsyMDcsOCBAQAogCQkqYWRqdXN0ZWRfbW9kZSA9ICpuYXRpdmVfbW9kZTsKIAkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKIAkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBtb2RlLT52ZGlzcGxheTsKKwkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSA9IG1vZGUtPmhkaXNwbGF5OworCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CiAJCWFkanVzdGVkX21vZGUtPmJhc2UuaWQgPSBtb2RlX2lkOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCmluZGV4IDNkY2JlMTMuLjQwMjM2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKQEAgLTg4LDYgKzg4LDcgQEAKIAlUVl9TVERfU0NBUlRfUEFMLAogCVRWX1NURF9TRUNBTSwKIAlUVl9TVERfUEFMX0NOLAorCVRWX1NURF9QQUxfTiwKIH07CiAKIC8qIHJhZGVvbiBncGlvLWJhc2VkIGkyYwpAQCAtMzk1LDYgKzM5NiwxMSBAQAogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogfTsKIAorZXh0ZXJuIGVudW0gcmFkZW9uX3R2X3N0ZAorcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGVudW0gcmFkZW9uX3R2X3N0ZAorcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwogZXh0ZXJuIHZvaWQgcmFkZW9uX2Nvbm5lY3Rvcl9ob3RwbHVnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogZXh0ZXJuIGJvb2wgcmFkZW9uX2RwX25lZWRzX2xpbmtfdHJhaW4oc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpOwogZXh0ZXJuIGludCByYWRlb25fZHBfbW9kZV92YWxpZF9oZWxwZXIoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKaW5kZXggMzkxYzk3My4uOWY1ZTJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYwpAQCAtNDIsOCArNDIsOCBAQAogCS8qIE51bWJlciBvZiB0ZXN0cyA9CiAJICogKFRvdGFsIEdUVCAtIElCIHBvb2wgLSB3cml0ZWJhY2sgcGFnZSAtIHJpbmcgYnVmZmVyKSAvIHRlc3Qgc2l6ZQogCSAqLwotCW4gPSAocmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fSUJfUE9PTF9TSVpFKjY0KjEwMjQgLSBSQURFT05fR1BVX1BBR0VfU0laRSAtCi0JICAgICByZGV2LT5jcC5yaW5nX3NpemUpIC8gc2l6ZTsKKwluID0gKCh1MzIpKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gUkFERU9OX0dQVV9QQUdFX1NJWkUgLQorCSAgICAgcmRldi0+Y3AucmluZ19zaXplKSkgLyBzaXplOwogCiAJZ3R0X29iaiA9IGt6YWxsb2MobiAqIHNpemVvZigqZ3R0X29iaiksIEdGUF9LRVJORUwpOwogCWlmICghZ3R0X29iaikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwppbmRleCBkN2ZkMTYwLi4zYjBjMDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwpAQCAtNDk0LDYgKzQ5NCw3IEBACiAJCURSTV9FUlJPUigiZmFpbGVkIGluaXRpYWxpemluZyBidWZmZXIgb2JqZWN0IGRyaXZlciglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQorCXJkZXYtPm1tYW4uaW5pdGlhbGl6ZWQgPSB0cnVlOwogCXIgPSB0dG1fYm9faW5pdF9tbSgmcmRldi0+bW1hbi5iZGV2LCBUVE1fUExfVlJBTSwKIAkJCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAlpZiAocikgewpAQCAtNTQxLDYgKzU0Miw4IEBACiB7CiAJaW50IHI7CiAKKwlpZiAoIXJkZXYtPm1tYW4uaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKIAlpZiAocmRldi0+c3RvbGxlbl92Z2FfbWVtb3J5KSB7CiAJCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5zdG9sbGVuX3ZnYV9tZW1vcnksIGZhbHNlKTsKIAkJaWYgKHIgPT0gMCkgewpAQCAtNTU0LDYgKzU1Nyw3IEBACiAJdHRtX2JvX2RldmljZV9yZWxlYXNlKCZyZGV2LT5tbWFuLmJkZXYpOwogCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX3R0bV9nbG9iYWxfZmluaShyZGV2KTsKKwlyZGV2LT5tbWFuLmluaXRpYWxpemVkID0gZmFsc2U7CiAJRFJNX0lORk8oInJhZGVvbjogdHRtIGZpbmFsaXplZFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCA0ZjhlYTQyLi40MjQ1MjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCkBAIC0zOTYsNyArMzk2LDcgQEAKIAl9CiAJd2hpbGUgKHN0YXR1cyB8fCByNTAwX2Rpc3BfaW50KSB7CiAJCS8qIFNXIGludGVycnVwdCAqLwotCQlpZiAoR18wMDAwNDBfU1dfSU5UX0VOKHN0YXR1cykpCisJCWlmIChHXzAwMDA0NF9TV19JTlQoc3RhdHVzKSkKIAkJCXJhZGVvbl9mZW5jZV9wcm9jZXNzKHJkZXYpOwogCQkvKiBWZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHRzICovCiAJCWlmIChHXzAwN0VEQ19MQl9EMV9WQkxBTktfSU5URVJSVVBUKHI1MDBfZGlzcF9pbnQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuYwppbmRleCBlZWU1MmFhLi4wMjFkZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuYwpAQCAtNTAsNyArNTAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX2Rydi5jCmluZGV4IGU3MjVjYzAuLjRmZDFmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX2Rydi5jCkBAIC04MCw3ICs4MCw3IEBACiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJIC5vcGVuID0gZHJtX29wZW4sCiAJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkgLm1tYXAgPSBkcm1fbW1hcCwKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdGRmeC90ZGZ4X2Rydi5jCmluZGV4IDAxMmZmMmUuLmVjNWE0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RkZngvdGRmeF9kcnYuYwpAQCAtNDgsNyArNDgsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCmluZGV4IGJjMmY1MTguLjdhMWIyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCkBAIC01OCw3ICs1OCw3IEBACiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCQkub3BlbiA9IGRybV9vcGVuLAogCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkuaW9jdGwgPSBkcm1faW9jdGwsCisJCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJLm1tYXAgPSBkcm1fbW1hcCwKIAkJLnBvbGwgPSBkcm1fcG9sbCwKIAkJLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCmluZGV4IDdiNDhiYjMuLjFkYjFlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCkBAIC0xMDMsMzcgKzEwMywzOSBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2Mgdm13X2lvY3Rsc1tdID0gewotCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19HRVRfUEFSQU0sIHZtd19nZXRwYXJhbV9pb2N0bCwgMCksCisJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0dFVF9QQVJBTSwgdm13X2dldHBhcmFtX2lvY3RsLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0FMTE9DX0RNQUJVRiwgdm13X2RtYWJ1Zl9hbGxvY19pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfVU5SRUZfRE1BQlVGLCB2bXdfZG1hYnVmX3VucmVmX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19DVVJTT1JfQllQQVNTLAotCQkgICAgICB2bXdfa21zX2N1cnNvcl9ieXBhc3NfaW9jdGwsIDApLAorCQkgICAgICB2bXdfa21zX2N1cnNvcl9ieXBhc3NfaW9jdGwsCisJCSAgICAgIERSTV9NQVNURVIgfCBEUk1fQ09OVFJPTF9BTExPVyB8IERSTV9VTkxPQ0tFRCksCiAKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQ09OVFJPTF9TVFJFQU0sIHZtd19vdmVybGF5X2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX01BU1RFUiB8IERSTV9DT05UUk9MX0FMTE9XIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQ0xBSU1fU1RSRUFNLCB2bXdfc3RyZWFtX2NsYWltX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX01BU1RFUiB8IERSTV9DT05UUk9MX0FMTE9XIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfVU5SRUZfU1RSRUFNLCB2bXdfc3RyZWFtX3VucmVmX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX01BU1RFUiB8IERSTV9DT05UUk9MX0FMTE9XIHwgRFJNX1VOTE9DS0VEKSwKIAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19DUkVBVEVfQ09OVEVYVCwgdm13X2NvbnRleHRfZGVmaW5lX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19VTlJFRl9DT05URVhULCB2bXdfY29udGV4dF9kZXN0cm95X2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19DUkVBVEVfU1VSRkFDRSwgdm13X3N1cmZhY2VfZGVmaW5lX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19VTlJFRl9TVVJGQUNFLCB2bXdfc3VyZmFjZV9kZXN0cm95X2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19SRUZfU1VSRkFDRSwgdm13X3N1cmZhY2VfcmVmZXJlbmNlX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19FWEVDQlVGLCB2bXdfZXhlY2J1Zl9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfRklGT19ERUJVRywgdm13X2ZpZm9fZGVidWdfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9ST09UX09OTFkgfCBEUk1fTUFTVEVSIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfRkVOQ0VfV0FJVCwgdm13X2ZlbmNlX3dhaXRfaW9jdGwsCi0JCSAgICAgIDApCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKQogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZtd19wY2lfaWRfbGlzdFtdID0gewpAQCAtNDYwLDExICs0NjIsOSBAQAogCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmaWxlX3ByaXYtPm1pbm9yLT5kZXY7CiAJdW5zaWduZWQgaW50IG5yID0gRFJNX0lPQ1RMX05SKGNtZCk7Ci0JbG9uZyByZXQ7CiAKIAkvKgotCSAqIFRoZSBkcml2ZXIgcHJpdmF0ZSBpb2N0bHMgYW5kIFRUTSBpb2N0bHMgc2hvdWxkIGJlCi0JICogdGhyZWFkLXNhZmUuCisJICogRG8gZXh0cmEgY2hlY2tpbmcgb24gZHJpdmVyIHByaXZhdGUgaW9jdGxzLgogCSAqLwogCiAJaWYgKChuciA+PSBEUk1fQ09NTUFORF9CQVNFKSAmJiAobnIgPCBEUk1fQ09NTUFORF9FTkQpCkBAIC00NzcsMTggKzQ3Nyw5IEBACiAJCQkJICBuciAtIERSTV9DT01NQU5EX0JBU0UpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJcmV0dXJuIGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAotCQkJCSBmaWxwLCBjbWQsIGFyZyk7CiAJfQogCi0JLyoKLQkgKiBOb3QgYWxsIG9sZCBkcm0gaW9jdGxzIGFyZSB0aHJlYWQtc2FmZS4KLQkgKi8KLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIH0KIAogc3RhdGljIGludCB2bXdfZmlyc3RvcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IDQzNTQ2ZDAuLmU2MWJkODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC0xMjMsNiArMTIzLDcgQEAKIAl1aW50MzJfdCBsYXN0X2NpZDsKIAlib29sIGNpZF92YWxpZDsKIAl1aW50MzJfdCBsYXN0X3NpZDsKKwl1aW50MzJfdCBzaWRfdHJhbnNsYXRpb247CiAJYm9vbCBzaWRfdmFsaWQ7CiAJc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGU7CiAJc3RydWN0IGxpc3RfaGVhZCB2YWxpZGF0ZV9ub2RlczsKQEAgLTMxNyw5ICszMTgsMTAgQEAKIGV4dGVybiBpbnQgdm13X3N1cmZhY2VfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgIHN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmLAogCQkJICAgIHZvaWQgKCpyZXNfZnJlZSkgKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykpOwotZXh0ZXJuIGludCB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJCSAgIGludCBzaWQsIHN0cnVjdCB2bXdfc3VyZmFjZSAqKm91dCk7CitleHRlcm4gaW50IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkJCQkgIHVpbnQzMl90IGhhbmRsZSwKKwkJCQkJICBzdHJ1Y3Qgdm13X3N1cmZhY2UgKipvdXQpOwogZXh0ZXJuIGludCB2bXdfc3VyZmFjZV9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IHZtd19zdXJmYWNlX2RlZmluZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtMzI4LDcgKzMzMCw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgdm13X3N1cmZhY2VfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCi0JCQkgICAgIGludCBpZCk7CisJCQkgICAgIHVpbnQzMl90IGhhbmRsZSwgaW50ICppZCk7CiBleHRlcm4gdm9pZCB2bXdfZG1hYnVmX2JvX2ZyZWUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CiBleHRlcm4gaW50IHZtd19kbWFidWZfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgc3RydWN0IHZtd19kbWFfYnVmZmVyICp2bXdfYm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKaW5kZXggN2EzOWYzZS4uMmU5MmRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYwpAQCAtNzMsMjEgKzczLDMyIEBACiAKIHN0YXRpYyBpbnQgdm13X2NtZF9zaWRfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAotCQkJICAgICB1aW50MzJfdCBzaWQpCisJCQkgICAgIHVpbnQzMl90ICpzaWQpCiB7Ci0JaWYgKHVubGlrZWx5KCghc3dfY29udGV4dC0+c2lkX3ZhbGlkIHx8IHNpZCAhPSBzd19jb250ZXh0LT5sYXN0X3NpZCkgJiYKLQkJICAgICBzaWQgIT0gU1ZHQTNEX0lOVkFMSURfSUQpKSB7Ci0JCWludCByZXQgPSB2bXdfc3VyZmFjZV9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dC0+dGZpbGUsIHNpZCk7CisJaWYgKCpzaWQgPT0gU1ZHQTNEX0lOVkFMSURfSUQpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KCghc3dfY29udGV4dC0+c2lkX3ZhbGlkICB8fAorCQkgICAgICAqc2lkICE9IHN3X2NvbnRleHQtPmxhc3Rfc2lkKSkpIHsKKwkJaW50IHJlYWxfaWQ7CisJCWludCByZXQgPSB2bXdfc3VyZmFjZV9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dC0+dGZpbGUsCisJCQkJCSAgICAqc2lkLCAmcmVhbF9pZCk7CiAKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQkJRFJNX0VSUk9SKCJDb3VsZCBvdCBmaW5kIG9yIHVzZSBzdXJmYWNlICV1XG4iLAotCQkJCSAgKHVuc2lnbmVkKSBzaWQpOworCQkJRFJNX0VSUk9SKCJDb3VsZCBvdCBmaW5kIG9yIHVzZSBzdXJmYWNlIDB4JTA4eCAiCisJCQkJICAiYWRkcmVzcyAweCUwOGx4XG4iLAorCQkJCSAgKHVuc2lnbmVkIGludCkgKnNpZCwKKwkJCQkgICh1bnNpZ25lZCBsb25nKSBzaWQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCXN3X2NvbnRleHQtPmxhc3Rfc2lkID0gc2lkOworCQlzd19jb250ZXh0LT5sYXN0X3NpZCA9ICpzaWQ7CiAJCXN3X2NvbnRleHQtPnNpZF92YWxpZCA9IHRydWU7Ci0JfQorCQkqc2lkID0gcmVhbF9pZDsKKwkJc3dfY29udGV4dC0+c2lkX3RyYW5zbGF0aW9uID0gcmVhbF9pZDsKKwl9IGVsc2UKKwkJKnNpZCA9IHN3X2NvbnRleHQtPnNpZF90cmFuc2xhdGlvbjsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDcsNyArMTE4LDggQEAKIAkJcmV0dXJuIHJldDsKIAogCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2lkX2NtZCwgaGVhZGVyKTsKLQlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGNtZC0+Ym9keS50YXJnZXQuc2lkKTsKKwlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS50YXJnZXQuc2lkKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHZtd19jbWRfc3VyZmFjZV9jb3B5X2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0xMjEsMTAgKzEzMywxMCBAQAogCWludCByZXQ7CiAKIAljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3NpZF9jbWQsIGhlYWRlcik7Ci0JcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGNtZC0+Ym9keS5zcmMuc2lkKTsKKwlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5zcmMuc2lkKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlyZXR1cm4gcmV0OwotCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgY21kLT5ib2R5LmRlc3Quc2lkKTsKKwlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsICZjbWQtPmJvZHkuZGVzdC5zaWQpOwogfQogCiBzdGF0aWMgaW50IHZtd19jbWRfc3RyZXRjaF9ibHRfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTEzOCwxMCArMTUwLDEwIEBACiAJaW50IHJldDsKIAogCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2lkX2NtZCwgaGVhZGVyKTsKLQlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgY21kLT5ib2R5LnNyYy5zaWQpOworCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnNyYy5zaWQpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7Ci0JcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQtPmJvZHkuZGVzdC5zaWQpOworCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5kZXN0LnNpZCk7CiB9CiAKIHN0YXRpYyBpbnQgdm13X2NtZF9ibHRfc3VyZl9zY3JlZW5fY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTE1NCw3ICsxNjYsNyBAQAogCX0gKmNtZDsKIAogCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2lkX2NtZCwgaGVhZGVyKTsKLQlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGNtZC0+Ym9keS5zcmNJbWFnZS5zaWQpOworCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5zcmNJbWFnZS5zaWQpOwogfQogCiBzdGF0aWMgaW50IHZtd19jbWRfcHJlc2VudF9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LApAQCAtMTY3LDcgKzE3OSw3IEBACiAJfSAqY21kOwogCiAJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19zaWRfY21kLCBoZWFkZXIpOwotCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgY21kLT5ib2R5LnNpZCk7CisJcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnNpZCk7CiB9CiAKIHN0YXRpYyBpbnQgdm13X2NtZF9kbWEoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTE4NywxMiArMTk5LDcgQEAKIAl1aW50MzJfdCBjdXJfdmFsaWRhdGVfbm9kZTsKIAlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmFsX2J1ZjsKIAotCiAJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19kbWFfY21kLCBoZWFkZXIpOwotCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQtPmRtYS5ob3N0LnNpZCk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJcmV0dXJuIHJldDsKLQogCWhhbmRsZSA9IGNtZC0+ZG1hLmd1ZXN0LnB0ci5nbXJJZDsKIAlyZXQgPSB2bXdfdXNlcl9kbWFidWZfbG9va3VwKHN3X2NvbnRleHQtPnRmaWxlLCBoYW5kbGUsICZ2bXdfYm8pOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKQEAgLTIyOCwxNCArMjM1LDIzIEBACiAJCSsrc3dfY29udGV4dC0+Y3VyX3ZhbF9idWY7CiAJfQogCi0JcmV0ID0gdm13X3VzZXJfc3VyZmFjZV9sb29rdXAoZGV2X3ByaXYsIHN3X2NvbnRleHQtPnRmaWxlLAotCQkJCSAgICAgIGNtZC0+ZG1hLmhvc3Quc2lkLCAmc3JmKTsKKwlyZXQgPSB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cF9oYW5kbGUoZGV2X3ByaXYsIHN3X2NvbnRleHQtPnRmaWxlLAorCQkJCQkgICAgIGNtZC0+ZG1hLmhvc3Quc2lkLCAmc3JmKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgc3VyZmFjZVxuIik7CiAJCWdvdG8gb3V0X25vX3JlbG9jOwogCX0KIAorCS8qKgorCSAqIFBhdGNoIGNvbW1hbmQgc3RyZWFtIHdpdGggZGV2aWNlIFNJRC4KKwkgKi8KKworCWNtZC0+ZG1hLmhvc3Quc2lkID0gc3JmLT5yZXMuaWQ7CiAJdm13X2ttc19jdXJzb3Jfc25vb3Aoc3JmLCBzd19jb250ZXh0LT50ZmlsZSwgYm8sIGhlYWRlcik7CisJLyoqCisJICogRklYTUU6IE1heSBkZWFkbG9jayBoZXJlIHdoZW4gY2FsbGVkIGZyb20gdGhlCisJICogY29tbWFuZCBwYXJzaW5nIGNvZGUuCisJICovCiAJdm13X3N1cmZhY2VfdW5yZWZlcmVuY2UoJnNyZik7CiAKIG91dF9ub19yZWxvYzoKQEAgLTI0Myw2ICsyNTksOTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHZtd19jbWRfZHJhdyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19kcmF3X2NtZCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZERyYXdQcmltaXRpdmVzIGJvZHk7CisJfSAqY21kOworCVNWR0EzZFZlcnRleERlY2wgKmRlY2wgPSAoU1ZHQTNkVmVydGV4RGVjbCAqKSgKKwkJKHVuc2lnbmVkIGxvbmcpaGVhZGVyICsgc2l6ZW9mKCpjbWQpKTsKKwlTVkdBM2RQcmltaXRpdmVSYW5nZSAqcmFuZ2U7CisJdWludDMyX3QgaTsKKwl1aW50MzJfdCBtYXhudW07CisJaW50IHJldDsKKworCXJldCA9IHZtd19jbWRfY2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBoZWFkZXIpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X2RyYXdfY21kLCBoZWFkZXIpOworCW1heG51bSA9IChoZWFkZXItPnNpemUgLSBzaXplb2YoY21kLT5ib2R5KSkgLyBzaXplb2YoKmRlY2wpOworCisJaWYgKHVubGlrZWx5KGNtZC0+Ym9keS5udW1WZXJ0ZXhEZWNscyA+IG1heG51bSkpIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIG51bWJlciBvZiB2ZXJ0ZXggZGVjbGFyYXRpb25zLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmJvZHkubnVtVmVydGV4RGVjbHM7ICsraSwgKytkZWNsKSB7CisJCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LAorCQkJCQkmZGVjbC0+YXJyYXkuc3VyZmFjZUlkKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiByZXQ7CisJfQorCisJbWF4bnVtID0gKGhlYWRlci0+c2l6ZSAtIHNpemVvZihjbWQtPmJvZHkpIC0KKwkJICBjbWQtPmJvZHkubnVtVmVydGV4RGVjbHMgKiBzaXplb2YoKmRlY2wpKSAvIHNpemVvZigqcmFuZ2UpOworCWlmICh1bmxpa2VseShjbWQtPmJvZHkubnVtUmFuZ2VzID4gbWF4bnVtKSkgeworCQlEUk1fRVJST1IoIklsbGVnYWwgbnVtYmVyIG9mIGluZGV4IHJhbmdlcy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyYW5nZSA9IChTVkdBM2RQcmltaXRpdmVSYW5nZSAqKSBkZWNsOworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmJvZHkubnVtUmFuZ2VzOyArK2ksICsrcmFuZ2UpIHsKKwkJcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJCSZyYW5nZS0+aW5kZXhBcnJheS5zdXJmYWNlSWQpOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2bXdfY21kX3RleF9zdGF0ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfdGV4X3N0YXRlX2NtZCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZFNldFRleHR1cmVTdGF0ZSBzdGF0ZTsKKwl9OworCisJU1ZHQTNkVGV4dHVyZVN0YXRlICpsYXN0X3N0YXRlID0gKFNWR0EzZFRleHR1cmVTdGF0ZSAqKQorCSAgKCh1bnNpZ25lZCBsb25nKSBoZWFkZXIgKyBoZWFkZXItPnNpemUgKyBzaXplb2YoaGVhZGVyKSk7CisJU1ZHQTNkVGV4dHVyZVN0YXRlICpjdXJfc3RhdGUgPSAoU1ZHQTNkVGV4dHVyZVN0YXRlICopCisJCSgodW5zaWduZWQgbG9uZykgaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCB2bXdfdGV4X3N0YXRlX2NtZCkpOworCWludCByZXQ7CisKKwlyZXQgPSB2bXdfY21kX2NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgaGVhZGVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJZm9yICg7IGN1cl9zdGF0ZSA8IGxhc3Rfc3RhdGU7ICsrY3VyX3N0YXRlKSB7CisJCWlmIChsaWtlbHkoY3VyX3N0YXRlLT5uYW1lICE9IFNWR0EzRF9UU19CSU5EX1RFWFRVUkUpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJCSZjdXJfc3RhdGUtPnZhbHVlKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIAogdHlwZWRlZiBpbnQgKCp2bXdfY21kX2Z1bmMpIChzdHJ1Y3Qgdm13X3ByaXZhdGUgKiwKIAkJCSAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICosCkBAIC0yNjQsNyArMzY0LDcgQEAKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRSRU5ERVJTVEFURSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRSRU5ERVJUQVJHRVQsCiAJCSAgICAmdm13X2NtZF9zZXRfcmVuZGVyX3RhcmdldF9jaGVjayksCi0JVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUVEVYVFVSRVNUQVRFLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVFRFWFRVUkVTVEFURSwgJnZtd19jbWRfdGV4X3N0YXRlKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRNQVRFUklBTCwgJnZtd19jbWRfY2lkX2NoZWNrKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRMSUdIVERBVEEsICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUTElHSFRFTkFCTEVELCAmdm13X2NtZF9jaWRfY2hlY2spLApAQCAtMjc2LDcgKzM3Niw3IEBACiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0hBREVSX0RFU1RST1ksICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUX1NIQURFUiwgJnZtd19jbWRfY2lkX2NoZWNrKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRfU0hBREVSX0NPTlNULCAmdm13X2NtZF9jaWRfY2hlY2spLAotCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RSQVdfUFJJTUlUSVZFUywgJnZtd19jbWRfY2lkX2NoZWNrKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EUkFXX1BSSU1JVElWRVMsICZ2bXdfY21kX2RyYXcpLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVFNDSVNTT1JSRUNULCAmdm13X2NtZF9jaWRfY2hlY2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0JFR0lOX1FVRVJZLCAmdm13X2NtZF9jaWRfY2hlY2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0VORF9RVUVSWSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKQEAgLTI5MSw2ICszOTEsNyBAQAogCQkJIHZvaWQgKmJ1ZiwgdWludDMyX3QgKnNpemUpCiB7CiAJdWludDMyX3QgY21kX2lkOworCXVpbnQzMl90IHNpemVfcmVtYWluaW5nID0gKnNpemU7CiAJU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIgPSAoU1ZHQTNkQ21kSGVhZGVyICopIGJ1ZjsKIAlpbnQgcmV0OwogCkBAIC0zMDQsNiArNDA1LDkgQEAKIAkqc2l6ZSA9IGxlMzJfdG9fY3B1KGhlYWRlci0+c2l6ZSkgKyBzaXplb2YoU1ZHQTNkQ21kSGVhZGVyKTsKIAogCWNtZF9pZCAtPSBTVkdBXzNEX0NNRF9CQVNFOworCWlmICh1bmxpa2VseSgqc2l6ZSA+IHNpemVfcmVtYWluaW5nKSkKKwkJZ290byBvdXRfZXJyOworCiAJaWYgKHVubGlrZWx5KGNtZF9pZCA+PSBTVkdBXzNEX0NNRF9NQVggLSBTVkdBXzNEX0NNRF9CQVNFKSkKIAkJZ290byBvdXRfZXJyOwogCkBAIC0zMjYsNiArNDMwLDcgQEAKIAlpbnQgcmV0OwogCiAJd2hpbGUgKGN1cl9zaXplID4gMCkgeworCQlzaXplID0gY3VyX3NpemU7CiAJCXJldCA9IHZtd19jbWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGJ1ZiwgJnNpemUpOwogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQkJcmV0dXJuIHJldDsKQEAgLTM4Niw3ICs0OTEsNyBAQAogCQlyZXR1cm4gMDsKIAogCXJldCA9IHZtd19nbXJfYmluZChkZXZfcHJpdiwgYm8pOwotCWlmIChsaWtlbHkocmV0ID09IDAgfHwgcmV0ID09IC1FUkVTVEFSVCkpCisJaWYgKGxpa2VseShyZXQgPT0gMCB8fCByZXQgPT0gLUVSRVNUQVJUU1lTKSkKIAkJcmV0dXJuIHJldDsKIAogCkBAIC00MjksNyArNTM0LDcgQEAKIAogCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQlyZXQgPSAtRVJFU1RBUlQ7CisJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJZ290byBvdXRfbm9fY21kX211dGV4OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCmluZGV4IDc2YjA2OTMuLjAxZmViNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCQl9CiAJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CiAJCWlmIChpbnRlcnJ1cHRpYmxlICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXQgPSAtRVJFU1RBUlQ7CisJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTIzNyw5ICsyMzcsNyBAQAogCQkgICAgKGRldl9wcml2LT5maWZvX3F1ZXVlLAogCQkgICAgICF2bXdfZmlmb19pc19mdWxsKGRldl9wcml2LCBieXRlcyksIHRpbWVvdXQpOwogCi0JaWYgKHVubGlrZWx5KHJldCA9PSAtRVJFU1RBUlRTWVMpKQotCQlyZXQgPSAtRVJFU1RBUlQ7Ci0JZWxzZSBpZiAodW5saWtlbHkocmV0ID09IDApKQorCWlmICh1bmxpa2VseShyZXQgPT0gMCkpCiAJCXJldCA9IC1FQlVTWTsKIAllbHNlIGlmIChsaWtlbHkocmV0ID4gMCkpCiAJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCmluZGV4IDllMGYwMzAuLmQ0MDA4NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJCQkJICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJfQogCQlpZiAoaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0ID0gLUVSRVNUQVJUOworCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yMTgsOSArMjE4LDcgQEAKIAkJICAgICB2bXdfZmVuY2Vfc2lnbmFsZWQoZGV2X3ByaXYsIHNlcXVlbmNlKSwKIAkJICAgICB0aW1lb3V0KTsKIAotCWlmICh1bmxpa2VseShyZXQgPT0gLUVSRVNUQVJUU1lTKSkKLQkJcmV0ID0gLUVSRVNUQVJUOwotCWVsc2UgaWYgKHVubGlrZWx5KHJldCA9PSAwKSkKKwlpZiAodW5saWtlbHkocmV0ID09IDApKQogCQlyZXQgPSAtRUJVU1k7CiAJZWxzZSBpZiAobGlrZWx5KHJldCA+IDApKQogCQlyZXQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYwppbmRleCBlOTQwM2JlLi5iMWFmNzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYwpAQCAtMTA2LDggKzEwNiw4IEBACiAJaW50IHJldDsKIAogCWlmIChoYW5kbGUpIHsKLQkJcmV0ID0gdm13X3VzZXJfc3VyZmFjZV9sb29rdXAoZGV2X3ByaXYsIHRmaWxlLAotCQkJCQkgICAgICBoYW5kbGUsICZzdXJmYWNlKTsKKwkJcmV0ID0gdm13X3VzZXJfc3VyZmFjZV9sb29rdXBfaGFuZGxlKGRldl9wcml2LCB0ZmlsZSwKKwkJCQkJCSAgICAgaGFuZGxlLCAmc3VyZmFjZSk7CiAJCWlmICghcmV0KSB7CiAJCQlpZiAoIXN1cmZhY2UtPnNub29wZXIuaW1hZ2UpIHsKIAkJCQlEUk1fRVJST1IoInN1cmZhY2Ugbm90IHN1aXRhYmxlIGZvciBjdXJzb3JcbiIpOwpAQCAtNzA0LDggKzcwNCw4IEBACiAJc3RydWN0IHZtd19kbWFfYnVmZmVyICpibyA9IE5VTEw7CiAJaW50IHJldDsKIAotCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwKGRldl9wcml2LCB0ZmlsZSwKLQkJCQkgICAgICBtb2RlX2NtZC0+aGFuZGxlLCAmc3VyZmFjZSk7CisJcmV0ID0gdm13X3VzZXJfc3VyZmFjZV9sb29rdXBfaGFuZGxlKGRldl9wcml2LCB0ZmlsZSwKKwkJCQkJICAgICBtb2RlX2NtZC0+aGFuZGxlLCAmc3VyZmFjZSk7CiAJaWYgKHJldCkKIAkJZ290byB0cnlfZG1hYnVmOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYwppbmRleCBhMWNlZWQwLi5jMDEyZDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKQEAgLTQ4OCwyOCArNDg4LDQ0IEBACiAJa2ZyZWUodXNlcl9zcmYpOwogfQogCi1pbnQgdm13X3VzZXJfc3VyZmFjZV9sb29rdXAoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKLQkJCSAgICBpbnQgc2lkLCBzdHJ1Y3Qgdm13X3N1cmZhY2UgKipvdXQpCitpbnQgdm13X3VzZXJfc3VyZmFjZV9sb29rdXBfaGFuZGxlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCisJCQkJICAgdWludDMyX3QgaGFuZGxlLCBzdHJ1Y3Qgdm13X3N1cmZhY2UgKipvdXQpCiB7CiAJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOwogCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmOwogCXN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlICp1c2VyX3NyZjsKKwlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlOworCWludCByZXQgPSAtRUlOVkFMOwogCi0JcmVzID0gdm13X3Jlc291cmNlX2xvb2t1cChkZXZfcHJpdiwgJmRldl9wcml2LT5zdXJmYWNlX2lkciwgc2lkKTsKLQlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKQorCWJhc2UgPSB0dG1fYmFzZV9vYmplY3RfbG9va3VwKHRmaWxlLCBoYW5kbGUpOworCWlmICh1bmxpa2VseShiYXNlID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChyZXMtPnJlc19mcmVlICE9ICZ2bXdfdXNlcl9zdXJmYWNlX2ZyZWUpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICh1bmxpa2VseShiYXNlLT5vYmplY3RfdHlwZSAhPSBWTVdfUkVTX1NVUkZBQ0UpKQorCQlnb3RvIG91dF9iYWRfcmVzb3VyY2U7CiAKLQlzcmYgPSBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X3N1cmZhY2UsIHJlcyk7Ci0JdXNlcl9zcmYgPSBjb250YWluZXJfb2Yoc3JmLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgc3JmKTsKLQlpZiAodXNlcl9zcmYtPmJhc2UudGZpbGUgIT0gdGZpbGUgJiYgIXVzZXJfc3JmLT5iYXNlLnNoYXJlYWJsZSkKLQkJcmV0dXJuIC1FUEVSTTsKKwl1c2VyX3NyZiA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgYmFzZSk7CisJc3JmID0gJnVzZXJfc3JmLT5zcmY7CisJcmVzID0gJnNyZi0+cmVzOworCisJcmVhZF9sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoIXJlcy0+YXZhaWwgfHwgcmVzLT5yZXNfZnJlZSAhPSAmdm13X3VzZXJfc3VyZmFjZV9mcmVlKSB7CisJCXJlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisJCWdvdG8gb3V0X2JhZF9yZXNvdXJjZTsKKwl9CisKKwlrcmVmX2dldCgmcmVzLT5rcmVmKTsKKwlyZWFkX3VubG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOwogCiAJKm91dCA9IHNyZjsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworCitvdXRfYmFkX3Jlc291cmNlOgorCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFzZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCB2bXdfdXNlcl9zdXJmYWNlX2Jhc2VfcmVsZWFzZShzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICoqcF9iYXNlKQpAQCAtNTI2LDM1ICs1NDIsMTAgQEAKIGludCB2bXdfc3VyZmFjZV9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7Ci0Jc3RydWN0IHZtd19zdXJmYWNlICpzcmY7Ci0Jc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3JmOwogCXN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnICphcmcgPSAoc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgKilkYXRhOwogCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlID0gdm13X2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlOwotCWludCByZXQgPSAwOwogCi0JcmVzID0gdm13X3Jlc291cmNlX2xvb2t1cChkZXZfcHJpdiwgJmRldl9wcml2LT5zdXJmYWNlX2lkciwgYXJnLT5zaWQpOwotCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHJlcy0+cmVzX2ZyZWUgIT0gJnZtd191c2VyX3N1cmZhY2VfZnJlZSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzcmYgPSBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X3N1cmZhY2UsIHJlcyk7Ci0JdXNlcl9zcmYgPSBjb250YWluZXJfb2Yoc3JmLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgc3JmKTsKLQlpZiAodXNlcl9zcmYtPmJhc2UudGZpbGUgIT0gdGZpbGUgJiYgIXVzZXJfc3JmLT5iYXNlLnNoYXJlYWJsZSkgewotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXR0bV9yZWZfb2JqZWN0X2Jhc2VfdW5yZWYodGZpbGUsIHVzZXJfc3JmLT5iYXNlLmhhc2gua2V5LAotCQkJCSAgVFRNX1JFRl9VU0FHRSk7Ci1vdXQ6Ci0Jdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHR0bV9yZWZfb2JqZWN0X2Jhc2VfdW5yZWYodGZpbGUsIGFyZy0+c2lkLCBUVE1fUkVGX1VTQUdFKTsKIH0KIAogaW50IHZtd19zdXJmYWNlX2RlZmluZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNjQ5LDcgKzY0MCwxMCBAQAogCX0KIAlzcmYtPnNub29wZXIuY3J0YyA9IE5VTEw7CiAKLQlyZXAtPnNpZCA9IHJlcy0+aWQ7CisJcmVwLT5zaWQgPSB1c2VyX3NyZi0+YmFzZS5oYXNoLmtleTsKKwlpZiAocmVwLT5zaWQgPT0gU1ZHQTNEX0lOVkFMSURfSUQpCisJCURSTV9FUlJPUigiQ3JlYXRlZCBiYWQgU3VyZmFjZSBJRC5cbiIpOworCiAJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOwogCXJldHVybiAwOwogb3V0X2VycjE6CkBAIC02NjIsMzkgKzY1NiwzMyBAQAogaW50IHZtd19zdXJmYWNlX3JlZmVyZW5jZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOwogCXVuaW9uIGRybV92bXdfc3VyZmFjZV9yZWZlcmVuY2VfYXJnICphcmcgPQogCSAgICAodW5pb24gZHJtX3Ztd19zdXJmYWNlX3JlZmVyZW5jZV9hcmcgKilkYXRhOwogCXN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnICpyZXEgPSAmYXJnLT5yZXE7CiAJc3RydWN0IGRybV92bXdfc3VyZmFjZV9jcmVhdGVfcmVxICpyZXAgPSAmYXJnLT5yZXA7CiAJc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUgPSB2bXdfZnByaXYoZmlsZV9wcml2KS0+dGZpbGU7Ci0Jc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOwogCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmOwogCXN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlICp1c2VyX3NyZjsKIAlzdHJ1Y3QgZHJtX3Ztd19zaXplIF9fdXNlciAqdXNlcl9zaXplczsKLQlpbnQgcmV0OworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJhc2U7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlyZXMgPSB2bXdfcmVzb3VyY2VfbG9va3VwKGRldl9wcml2LCAmZGV2X3ByaXYtPnN1cmZhY2VfaWRyLCByZXEtPnNpZCk7Ci0JaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkKKwliYXNlID0gdHRtX2Jhc2Vfb2JqZWN0X2xvb2t1cCh0ZmlsZSwgcmVxLT5zaWQpOworCWlmICh1bmxpa2VseShiYXNlID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiQ291bGQgbm90IGZpbmQgc3VyZmFjZSB0byByZWZlcmVuY2UuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmVzLT5yZXNfZnJlZSAhPSAmdm13X3VzZXJfc3VyZmFjZV9mcmVlKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwogCX0KIAotCXNyZiA9IGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfc3VyZmFjZSwgcmVzKTsKLQl1c2VyX3NyZiA9IGNvbnRhaW5lcl9vZihzcmYsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBzcmYpOwotCWlmICh1c2VyX3NyZi0+YmFzZS50ZmlsZSAhPSB0ZmlsZSAmJiAhdXNlcl9zcmYtPmJhc2Uuc2hhcmVhYmxlKSB7Ci0JCURSTV9FUlJPUigiVHJpZWQgdG8gcmVmZXJlbmNlIG5vbmUgc2hhcmVhYmxlIHN1cmZhY2VcbiIpOwotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAodW5saWtlbHkoYmFzZS0+b2JqZWN0X3R5cGUgIT0gVk1XX1JFU19TVVJGQUNFKSkKKwkJZ290byBvdXRfYmFkX3Jlc291cmNlOworCisJdXNlcl9zcmYgPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIGJhc2UpOworCXNyZiA9ICZ1c2VyX3NyZi0+c3JmOwogCiAJcmV0ID0gdHRtX3JlZl9vYmplY3RfYWRkKHRmaWxlLCAmdXNlcl9zcmYtPmJhc2UsIFRUTV9SRUZfVVNBR0UsIE5VTEwpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKIAkJRFJNX0VSUk9SKCJDb3VsZCBub3QgYWRkIGEgcmVmZXJlbmNlIHRvIGEgc3VyZmFjZS5cbiIpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfbm9fcmVmZXJlbmNlOwogCX0KIAogCXJlcC0+ZmxhZ3MgPSBzcmYtPmZsYWdzOwpAQCAtNzA2LDQwICs2OTQsNDMgQEAKIAlpZiAodXNlcl9zaXplcykKIAkJcmV0ID0gY29weV90b191c2VyKHVzZXJfc2l6ZXMsIHNyZi0+c2l6ZXMsCiAJCQkJICAgc3JmLT5udW1fc2l6ZXMgKiBzaXplb2YoKnNyZi0+c2l6ZXMpKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJRFJNX0VSUk9SKCJjb3B5X3RvX3VzZXIgZmFpbGVkICVwICV1XG4iLAogCQkJICB1c2VyX3NpemVzLCBzcmYtPm51bV9zaXplcyk7Ci0JCS8qKgotCQkgKiBGSVhNRTogVW5yZWZlcmVuY2Ugc3VyZmFjZSBoZXJlPwotCQkgKi8KLQkJZ290byBvdXQ7Ci0JfQotb3V0OgotCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKK291dF9iYWRfcmVzb3VyY2U6CitvdXRfbm9fcmVmZXJlbmNlOgorCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFzZSk7CisKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgdm13X3N1cmZhY2VfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJICAgICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCi0JCSAgICAgIGludCBpZCkKKwkJICAgICAgdWludDMyX3QgaGFuZGxlLCBpbnQgKmlkKQogewotCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlOworCXN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlICp1c2VyX3NyZjsKIAotCXJlYWRfbG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOwotCXJlcyA9IGlkcl9maW5kKCZkZXZfcHJpdi0+c3VyZmFjZV9pZHIsIGlkKTsKLQlpZiAocmVzICYmIHJlcy0+YXZhaWwpIHsKLQkJc3RydWN0IHZtd19zdXJmYWNlICpzcmYgPQotCQkJY29udGFpbmVyX29mKHJlcywgc3RydWN0IHZtd19zdXJmYWNlLCByZXMpOwotCQlzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAqdXNyZiA9Ci0JCQljb250YWluZXJfb2Yoc3JmLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgc3JmKTsKKwlpbnQgcmV0ID0gLUVQRVJNOwogCi0JCWlmICh1c3JmLT5iYXNlLnRmaWxlICE9IHRmaWxlICYmICF1c3JmLT5iYXNlLnNoYXJlYWJsZSkKLQkJCXJldCA9IC1FUEVSTTsKLQl9IGVsc2UKLQkJcmV0ID0gLUVJTlZBTDsKLQlyZWFkX3VubG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworCWJhc2UgPSB0dG1fYmFzZV9vYmplY3RfbG9va3VwKHRmaWxlLCBoYW5kbGUpOworCWlmICh1bmxpa2VseShiYXNlID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICh1bmxpa2VseShiYXNlLT5vYmplY3RfdHlwZSAhPSBWTVdfUkVTX1NVUkZBQ0UpKQorCQlnb3RvIG91dF9iYWRfc3VyZmFjZTsKKworCXVzZXJfc3JmID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBiYXNlKTsKKwkqaWQgPSB1c2VyX3NyZi0+c3JmLnJlcy5pZDsKKwlyZXQgPSAwOworCitvdXRfYmFkX3N1cmZhY2U6CisJLyoqCisJICogRklYTUU6IE1heSBkZWFkbG9jayBoZXJlIHdoZW4gY2FsbGVkIGZyb20gdGhlCisJICogY29tbWFuZCBwYXJzaW5nIGNvZGUuCisJICovCisKKwl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYmZpbi10d2kuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYmZpbi10d2kuYwppbmRleCBiMzA5YWMyLi5mZTNmYjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWJmaW4tdHdpLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1iZmluLXR3aS5jCkBAIC02OTMsMTMgKzY5MywxMyBAQAogCX0KIAogCS8qIFNldCBUV0kgaW50ZXJuYWwgY2xvY2sgYXMgMTBNSHogKi8KLQl3cml0ZV9DT05UUk9MKGlmYWNlLCAoKGdldF9zY2xrKCkgLyAxMDI0IC8gMTAyNCArIDUpIC8gMTApICYgMHg3Rik7CisJd3JpdGVfQ09OVFJPTChpZmFjZSwgKChnZXRfc2NsaygpIC8gMTAwMCAvIDEwMDAgKyA1KSAvIDEwKSAmIDB4N0YpOwogCiAJLyoKIAkgKiBXZSB3aWxsIG5vdCBlbmQgdXAgd2l0aCBhIENMS0RJVj0wIGJlY2F1c2Ugbm8gb25lIHdpbGwgc3BlY2lmeQotCSAqIDIwa0h6IFNDTCBvciBsZXNzIGluIEtjb25maWcgbm93LiAoNSAqIDEwMjQgLyAyMCA9IDB4MTAwKQorCSAqIDIwa0h6IFNDTCBvciBsZXNzIGluIEtjb25maWcgbm93LiAoNSAqIDEwMDAgLyAyMCA9IDI1MCkKIAkgKi8KLQljbGtoaWxvdyA9IDUgKiAxMDI0IC8gQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWjsKKwljbGtoaWxvdyA9ICgoMTAgKiAxMDAwIC8gQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWikgKyAxKSAvIDI7CiAKIAkvKiBTZXQgVHdpIGludGVyZmFjZSBjbG9jayBhcyBzcGVjaWZpZWQgKi8KIAl3cml0ZV9DTEtESVYoaWZhY2UsIChjbGtoaWxvdyA8PCA4KSB8IGNsa2hpbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggNzViZjNhZC4uMDAzN2UzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTI0Nyw3ICsyNDcsMTMgQEAKIAkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgT01BUF9JMkNfQ09OX0VOKTsKIAl9CiAJZGV2LT5pZGxlID0gMDsKLQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19JRV9SRUcsIGRldi0+aWVzdGF0ZSk7CisKKwkvKgorCSAqIERvbid0IHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgaWYgdGhlIElFIHN0YXRlIGlzIDAgYXMgaXQgY2FuCisJICogY2F1c2UgZGVhZGxvY2suCisJICovCisJaWYgKGRldi0+aWVzdGF0ZSkKKwkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfSUVfUkVHLCBkZXYtPmllc3RhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwX2kyY19pZGxlKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKQEAgLTI4MCw2ICsyODYsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGludGVybmFsX2NsayA9IDA7CiAKIAlpZiAoZGV2LT5yZXYgPj0gT01BUF9JMkNfUkVWXzIpIHsKKwkJLyogRGlzYWJsZSBJMkMgY29udHJvbGxlciBiZWZvcmUgc29mdCByZXNldCAqLworCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLAorCQkJb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHKSAmCisJCQkJfihPTUFQX0kyQ19DT05fRU4pKTsKKwogCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19TWVNDX1JFRywgU1lTQ19TT0ZUUkVTRVRfTUFTSyk7CiAJCS8qIEZvciBzb21lIHJlYXNvbiB3ZSBuZWVkIHRvIHNldCB0aGUgRU4gYml0IGJlZm9yZSB0aGUKIAkJICogcmVzZXQgZG9uZSBiaXQgZ2V0cyBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L0tjb25maWcgYi9kcml2ZXJzL2llZWUxMzk0L0tjb25maWcKaW5kZXggZjEwMmZjYy4uZTAyMDk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvS2NvbmZpZwpAQCAtMSw4ICsxLDMgQEAKLW1lbnUgIklFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgfHwgQlJPS0VOCi0KLXNvdXJjZSAiZHJpdmVycy9maXJld2lyZS9LY29uZmlnIgotCiBjb25maWcgSUVFRTEzOTQKIAl0cmlzdGF0ZSAiTGVnYWN5IGFsdGVybmF0aXZlIEZpcmVXaXJlIGRyaXZlciBzdGFjayIKIAlkZXBlbmRzIG9uIFBDSSB8fCBCUk9LRU4KQEAgLTE2LDggKzExLDEzIEBACiAJICBpcyB0aGUgY29yZSBzdXBwb3J0IG9ubHksIHlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgYSBkcml2ZXIgZm9yCiAJICB5b3VyIElFRUUgMTM5NCBhZGFwdGVyLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZWVlMTM5NC4KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGllZWUxMzk0LgorCisJICBOT1RFOgorCSAgaWVlZTEzOTQgaXMgc3VwZXJzZWRlZCBieSB0aGUgbmV3ZXIgZmlyZXdpcmUtY29yZSBkcml2ZXIuICBTZWUKKwkgIGh0dHA6Ly9pZWVlMTM5NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0p1anVfTWlncmF0aW9uIGZvcgorCSAgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3dpdGNoIHRvIHRoZSBuZXcgRmlyZVdpcmUgZHJpdmVycy4KIAogY29uZmlnIElFRUUxMzk0X09IQ0kxMzk0CiAJdHJpc3RhdGUgIk9IQ0ktMTM5NCBjb250cm9sbGVycyIKQEAgLTI5LDE5ICsyOSwyMyBAQAogCSAgdXNlIG9uZSBvZiB0aGVzZSBjaGlwc2V0cy4gIEl0IHNob3VsZCB3b3JrIHdpdGggYW55IE9IQ0ktMTM5NAogCSAgY29tcGxpYW50IGNhcmQsIGhvd2V2ZXIuCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG9oY2kxMzk0LgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgb2hjaTEzOTQuCiAKIAkgIE5PVEU6CisJICBvaGNpMTM5NCBpcyBzdXBlcnNlZGVkIGJ5IHRoZSBuZXdlciBmaXJld2lyZS1vaGNpIGRyaXZlci4gIFNlZQorCSAgaHR0cDovL2llZWUxMzk0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvSnVqdV9NaWdyYXRpb24gZm9yCisJICBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzd2l0Y2ggdG8gdGhlIG5ldyBGaXJlV2lyZSBkcml2ZXJzLgorCiAJICBJZiB5b3Ugd2FudCB0byBpbnN0YWxsIGZpcmV3aXJlLW9oY2kgYW5kIG9oY2kxMzk0IHRvZ2V0aGVyLCB5b3UKIAkgIHNob3VsZCBjb25maWd1cmUgdGhlbSBvbmx5IGFzIG1vZHVsZXMgYW5kIGJsYWNrbGlzdCB0aGUgZHJpdmVyKHMpCiAJICB3aGljaCB5b3UgZG9uJ3Qgd2FudCB0byBoYXZlIGF1dG8tbG9hZGVkLiAgQWRkIGVpdGhlcgogCi0JICAgICAgYmxhY2tsaXN0IGZpcmV3aXJlLW9oY2kKLQkgIG9yCiAJICAgICAgYmxhY2tsaXN0IG9oY2kxMzk0CiAJICAgICAgYmxhY2tsaXN0IHZpZGVvMTM5NAogCSAgICAgIGJsYWNrbGlzdCBkdjEzOTQKKwkgIG9yCisJICAgICAgYmxhY2tsaXN0IGZpcmV3aXJlLW9oY2kKIAogCSAgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mIG9yIC9ldGMvbW9kcHJvYmUuZC8qIGFuZCB1cGRhdGUgbW9kcHJvYmUuY29uZgogCSAgZGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJpYnV0aW9uLgpAQCAtNTgsOCArNjIsOCBAQAogCSAgSW5zdHJ1bWVudHMgUENJTHlueCBjaGlwLiAgTm90ZTogdGhpcyBkcml2ZXIgaXMgd3JpdHRlbiBmb3IgcmV2aXNpb24KIAkgIDIgb2YgdGhpcyBjaGlwIGFuZCBtYXkgbm90IHdvcmsgd2l0aCByZXZpc2lvbiAwLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwY2lseW54LgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgcGNpbHlueC4KIAogCSAgT25seSBzb21lIG9sZCBhbmQgbm93IHZlcnkgcmFyZSBQQ0kgYW5kIENhcmRCdXMgY2FyZHMgYW5kCiAJICBQb3dlck1hY3MgRzMgQiZXIGNvbnRhaW4gdGhlIFBDSUx5bnggY29udHJvbGxlci4gIFRoZXJlZm9yZQpAQCAtNzksNiArODMsMTQgQEAKIAkgIFlvdSBzaG91bGQgYWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgZGlza3MsIENELVJPTXMsIGV0Yy4gaW4gdGhlIFNDU0kKIAkgIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgc2JwMi4KKworCSAgTk9URToKKwkgIHNicDIgaXMgc3VwZXJzZWRlZCBieSB0aGUgbmV3ZXIgZmlyZXdpcmUtc2JwMiBkcml2ZXIuIFNlZQorCSAgaHR0cDovL2llZWUxMzk0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvSnVqdV9NaWdyYXRpb24gZm9yCisJICBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzd2l0Y2ggdG8gdGhlIG5ldyBGaXJlV2lyZSBkcml2ZXJzLgorCiBjb25maWcgSUVFRTEzOTRfU0JQMl9QSFlTX0RNQQogCWJvb2wgIkVuYWJsZSByZXBsYWNlbWVudCBmb3IgcGh5c2ljYWwgRE1BIGluIFNCUDIiCiAJZGVwZW5kcyBvbiBJRUVFMTM5NF9TQlAyICYmIFZJUlRfVE9fQlVTICYmIEVYUEVSSU1FTlRBTApAQCAtMTExLDYgKzEyMywxMSBAQAogCiAJICBUaGUgbW9kdWxlIGlzIGNhbGxlZCBldGgxMzk0IGFsdGhvdWdoIGl0IGRvZXMgbm90IGVtdWxhdGUgRXRoZXJuZXQuCiAKKwkgIE5PVEU6CisJICBldGgxMzk0IGlzIHN1cGVyc2VkZWQgYnkgdGhlIG5ld2VyIGZpcmV3aXJlLW5ldCBkcml2ZXIuIFNlZQorCSAgaHR0cDovL2llZWUxMzk0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvSnVqdV9NaWdyYXRpb24gZm9yCisJICBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzd2l0Y2ggdG8gdGhlIG5ldyBGaXJlV2lyZSBkcml2ZXJzLgorCiBjb25maWcgSUVFRTEzOTRfUkFXSU8KIAl0cmlzdGF0ZSAicmF3MTM5NCB1c2Vyc3BhY2UgaW50ZXJmYWNlIgogCWRlcGVuZHMgb24gSUVFRTEzOTQKQEAgLTEyMyw2ICsxNDAsMTEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIHJhdzEzOTQuCiAKKwkgIE5PVEU6CisJICByYXcxMzk0IGlzIHN1cGVyc2VkZWQgYnkgdGhlIG5ld2VyIGZpcmV3aXJlLWNvcmUgZHJpdmVyLiBTZWUKKwkgIGh0dHA6Ly9pZWVlMTM5NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0p1anVfTWlncmF0aW9uIGZvcgorCSAgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3dpdGNoIHRvIHRoZSBuZXcgRmlyZVdpcmUgZHJpdmVycy4KKwogY29uZmlnIElFRUUxMzk0X1ZJREVPMTM5NAogCXRyaXN0YXRlICJ2aWRlbzEzOTQgdXNlcnNwYWNlIGludGVyZmFjZSIKIAlkZXBlbmRzIG9uIElFRUUxMzk0ICYmIElFRUUxMzk0X09IQ0kxMzk0CkBAIC0xMzYsMTMgKzE1OCwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgdmlkZW8xMzk0LgogCisJICBOT1RFOgorCSAgdmlkZW8xMzk0IGlzIHN1cGVyc2VkZWQgYnkgdGhlIG5ld2VyIGZpcmV3aXJlLWNvcmUgZHJpdmVyLiBTZWUKKwkgIGh0dHA6Ly9pZWVlMTM5NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0p1anVfTWlncmF0aW9uIGZvcgorCSAgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3dpdGNoIHRvIHRoZSBuZXcgRmlyZVdpcmUgZHJpdmVycy4KKwogY29uZmlnIElFRUUxMzk0X0RWMTM5NAogCXRyaXN0YXRlICJkdjEzOTQgdXNlcnNwYWNlIGludGVyZmFjZSAoZGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBJRUVFMTM5NCAmJiBJRUVFMTM5NF9PSENJMTM5NAogCWhlbHAKIAkgIFRoZSBkdjEzOTQgZHJpdmVyIGlzIHVuc3VwcG9ydGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBmcm9tIExpbnV4IGluIGEKLQkgIGZ1dHVyZSByZWxlYXNlLiAgSXRzIGZ1bmN0aW9uYWxpdHkgaXMgbm93IHByb3ZpZGVkIGJ5IHJhdzEzOTQgdG9nZXRoZXIKLQkgIHdpdGggbGlicmFyaWVzIHN1Y2ggYXMgbGliaWVjNjE4ODMuCisJICBmdXR1cmUgcmVsZWFzZS4gIEl0cyBmdW5jdGlvbmFsaXR5IGlzIG5vdyBwcm92aWRlZCBieSBlaXRoZXIKKwkgIHJhdzEzOTQgb3IgZmlyZXdpcmUtY29yZSB0b2dldGhlciB3aXRoIGxpYnJhcmllcyBzdWNoIGFzIGxpYmllYzYxODgzLgogCiBjb25maWcgSUVFRTEzOTRfVkVSQk9TRURFQlVHCiAJYm9vbCAiRXhjZXNzaXZlIGRlYnVnZ2luZyBvdXRwdXQiCkBAIC0xNTMsNSArMTgwLDMgQEAKIAkgIHdpbGwgcXVpY2tseSByZXN1bHQgaW4gbGFyZ2UgYW1vdW50cyBvZiBkYXRhIHNlbnQgdG8gdGhlIHN5c3RlbSBsb2cuCiAKIAkgIFNheSBZIGlmIHlvdSByZWFsbHkgbmVlZCB0aGUgZGVidWdnaW5nIG91dHB1dC4gIEV2ZXJ5b25lIGVsc2Ugc2F5cyBOLgotCi1lbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCmluZGV4IGJmZDAzYmYuLmYzZDQ0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCiAjaW5jbHVkZSAidDNfY3BsLmgiCiAjaW5jbHVkZSAidDNjZGV2LmgiCkBAIC03NSwxMyArNzYsMTMgQEAKIH07CiAKIHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSB7Ci0Jc3RydWN0IGtmaWZvICp0cHRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gdHB0X2ZpZm87CiAJc3BpbmxvY2tfdCB0cHRfZmlmb19sb2NrOwotCXN0cnVjdCBrZmlmbyAqcXBpZF9maWZvOworCXN0cnVjdCBrZmlmbyBxcGlkX2ZpZm87CiAJc3BpbmxvY2tfdCBxcGlkX2ZpZm9fbG9jazsKLQlzdHJ1Y3Qga2ZpZm8gKmNxaWRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gY3FpZF9maWZvOwogCXNwaW5sb2NrX3QgY3FpZF9maWZvX2xvY2s7Ci0Jc3RydWN0IGtmaWZvICpwZGlkX2ZpZm87CisJc3RydWN0IGtmaWZvIHBkaWRfZmlmbzsKIAlzcGlubG9ja190IHBkaWRfZmlmb19sb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmMKaW5kZXggYmQyMzNjMC4uMzFmOTIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5jCkBAIC0zOSwxMiArMzksMTIgQEAKICNpbmNsdWRlICJjeGlvX3Jlc291cmNlLmgiCiAjaW5jbHVkZSAiY3hpb19oYWwuaCIKIAotc3RhdGljIHN0cnVjdCBrZmlmbyAqcmhkbF9maWZvOworc3RhdGljIHN0cnVjdCBrZmlmbyByaGRsX2ZpZm87CiBzdGF0aWMgc3BpbmxvY2tfdCByaGRsX2ZpZm9fbG9jazsKIAogI2RlZmluZSBSQU5ET01fU0laRSAxNgogCi1zdGF0aWMgaW50IF9fY3hpb19pbml0X3Jlc291cmNlX2ZpZm8oc3RydWN0IGtmaWZvICoqZmlmbywKK3N0YXRpYyBpbnQgX19jeGlvX2luaXRfcmVzb3VyY2VfZmlmbyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCiAJCQkJICAgc3BpbmxvY2tfdCAqZmlmb19sb2NrLAogCQkJCSAgIHUzMiBuciwgdTMyIHNraXBfbG93LAogCQkJCSAgIHUzMiBza2lwX2hpZ2gsCkBAIC01NSwxMiArNTUsMTEgQEAKIAl1MzIgcmFycmF5WzE2XTsKIAlzcGluX2xvY2tfaW5pdChmaWZvX2xvY2spOwogCi0JKmZpZm8gPSBrZmlmb19hbGxvYyhuciAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMLCBmaWZvX2xvY2spOwotCWlmIChJU19FUlIoKmZpZm8pKQorCWlmIChrZmlmb19hbGxvYyhmaWZvLCBuciAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2tpcF9sb3cgKyBza2lwX2hpZ2g7IGkrKykKLQkJX19rZmlmb19wdXQoKmZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMikpOworCQlrZmlmb19pbihmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpKTsKIAlpZiAocmFuZG9tKSB7CiAJCWogPSAwOwogCQlyYW5kb21fYnl0ZXMgPSByYW5kb20zMigpOwpAQCAtNzIsMzMgKzcxLDM1IEBACiAJCQkJcmFuZG9tX2J5dGVzID0gcmFuZG9tMzIoKTsKIAkJCX0KIAkJCWlkeCA9IChyYW5kb21fYnl0ZXMgPj4gKGogKiAyKSkgJiAweEY7Ci0JCQlfX2tmaWZvX3B1dCgqZmlmbywKKwkJCWtmaWZvX2luKGZpZm8sCiAJCQkJKHVuc2lnbmVkIGNoYXIgKikgJnJhcnJheVtpZHhdLAogCQkJCXNpemVvZih1MzIpKTsKIAkJCXJhcnJheVtpZHhdID0gaTsKIAkJCWorKzsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgUkFORE9NX1NJWkU7IGkrKykKLQkJCV9fa2ZpZm9fcHV0KCpmaWZvLAorCQkJa2ZpZm9faW4oZmlmbywKIAkJCQkodW5zaWduZWQgY2hhciAqKSAmcmFycmF5W2ldLAogCQkJCXNpemVvZih1MzIpKTsKIAl9IGVsc2UKIAkJZm9yIChpID0gc2tpcF9sb3c7IGkgPCBuciAtIHNraXBfaGlnaDsgaSsrKQotCQkJX19rZmlmb19wdXQoKmZpZm8sICh1bnNpZ25lZCBjaGFyICopICZpLCBzaXplb2YodTMyKSk7CisJCQlrZmlmb19pbihmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmaSwgc2l6ZW9mKHUzMikpOwogCiAJZm9yIChpID0gMDsgaSA8IHNraXBfbG93ICsgc2tpcF9oaWdoOyBpKyspCi0JCWtmaWZvX2dldCgqZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LCBzaXplb2YodTMyKSk7CisJCWlmIChrZmlmb19vdXRfbG9ja2VkKGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwKKwkJCQlzaXplb2YodTMyKSwgZmlmb19sb2NrKSAhPSBzaXplb2YodTMyKSkKKwkJCQkJYnJlYWs7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3hpb19pbml0X3Jlc291cmNlX2ZpZm8oc3RydWN0IGtmaWZvICoqZmlmbywgc3BpbmxvY2tfdCAqIGZpZm9fbG9jaywKK3N0YXRpYyBpbnQgY3hpb19pbml0X3Jlc291cmNlX2ZpZm8oc3RydWN0IGtmaWZvICpmaWZvLCBzcGlubG9ja190ICogZmlmb19sb2NrLAogCQkJCSAgIHUzMiBuciwgdTMyIHNraXBfbG93LCB1MzIgc2tpcF9oaWdoKQogewogCXJldHVybiAoX19jeGlvX2luaXRfcmVzb3VyY2VfZmlmbyhmaWZvLCBmaWZvX2xvY2ssIG5yLCBza2lwX2xvdywKIAkJCQkJICBza2lwX2hpZ2gsIDApKTsKIH0KIAotc3RhdGljIGludCBjeGlvX2luaXRfcmVzb3VyY2VfZmlmb19yYW5kb20oc3RydWN0IGtmaWZvICoqZmlmbywKK3N0YXRpYyBpbnQgY3hpb19pbml0X3Jlc291cmNlX2ZpZm9fcmFuZG9tKHN0cnVjdCBrZmlmbyAqZmlmbywKIAkJCQkgICBzcGlubG9ja190ICogZmlmb19sb2NrLAogCQkJCSAgIHUzMiBuciwgdTMyIHNraXBfbG93LCB1MzIgc2tpcF9oaWdoKQogewpAQCAtMTEzLDE1ICsxMTQsMTMgQEAKIAogCXNwaW5fbG9ja19pbml0KCZyZGV2X3AtPnJzY3AtPnFwaWRfZmlmb19sb2NrKTsKIAotCXJkZXZfcC0+cnNjcC0+cXBpZF9maWZvID0ga2ZpZm9fYWxsb2MoVDNfTUFYX05VTV9RUCAqIHNpemVvZih1MzIpLAotCQkJCQkgICAgICBHRlBfS0VSTkVMLAotCQkJCQkgICAgICAmcmRldl9wLT5yc2NwLT5xcGlkX2ZpZm9fbG9jayk7Ci0JaWYgKElTX0VSUihyZGV2X3AtPnJzY3AtPnFwaWRfZmlmbykpCisJaWYgKGtmaWZvX2FsbG9jKCZyZGV2X3AtPnJzY3AtPnFwaWRfZmlmbywgVDNfTUFYX05VTV9RUCAqIHNpemVvZih1MzIpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGkgPSAxNjsgaSA8IFQzX01BWF9OVU1fUVA7IGkrKykKIAkJaWYgKCEoaSAmIHJkZXZfcC0+cXBtYXNrKSkKLQkJCV9fa2ZpZm9fcHV0KHJkZXZfcC0+cnNjcC0+cXBpZF9maWZvLAorCQkJa2ZpZm9faW4oJnJkZXZfcC0+cnNjcC0+cXBpZF9maWZvLAogCQkJCSAgICAodW5zaWduZWQgY2hhciAqKSAmaSwgc2l6ZW9mKHUzMikpOwogCXJldHVybiAwOwogfQpAQCAtMTM0LDcgKzEzMyw3IEBACiAKIHZvaWQgY3hpb19oYWxfZGVzdHJveV9yaGRsX3Jlc291cmNlKHZvaWQpCiB7Ci0Ja2ZpZm9fZnJlZShyaGRsX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJoZGxfZmlmbyk7CiB9CiAKIC8qIG5yXyogbXVzdCBiZSBwb3dlciBvZiAyICovCkBAIC0xNjcsMTEgKzE2NiwxMSBAQAogCQlnb3RvIHBkaWRfZXJyOwogCXJldHVybiAwOwogcGRpZF9lcnI6Ci0Ja2ZpZm9fZnJlZShyc2NwLT5jcWlkX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPmNxaWRfZmlmbyk7CiBjcWlkX2VycjoKLQlrZmlmb19mcmVlKHJzY3AtPnFwaWRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+cXBpZF9maWZvKTsKIHFwaWRfZXJyOgotCWtmaWZvX2ZyZWUocnNjcC0+dHB0X2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPnRwdF9maWZvKTsKIHRwdF9lcnI6CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0xNzksMzMgKzE3OCwzNyBAQAogLyoKICAqIHJldHVybnMgMCBpZiBubyByZXNvdXJjZSBhdmFpbGFibGUKICAqLwotc3RhdGljIHUzMiBjeGlvX2hhbF9nZXRfcmVzb3VyY2Uoc3RydWN0IGtmaWZvICpmaWZvKQorc3RhdGljIHUzMiBjeGlvX2hhbF9nZXRfcmVzb3VyY2Uoc3RydWN0IGtmaWZvICpmaWZvLCBzcGlubG9ja190ICogbG9jaykKIHsKIAl1MzIgZW50cnk7Ci0JaWYgKGtmaWZvX2dldChmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpKSkKKwlpZiAoa2ZpZm9fb3V0X2xvY2tlZChmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpLCBsb2NrKSkKIAkJcmV0dXJuIGVudHJ5OwogCWVsc2UKIAkJcmV0dXJuIDA7CS8qIGZpZm8gZW1wdHJ5ICovCiB9CiAKLXN0YXRpYyB2b2lkIGN4aW9faGFsX3B1dF9yZXNvdXJjZShzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHUzMiBlbnRyeSkKK3N0YXRpYyB2b2lkIGN4aW9faGFsX3B1dF9yZXNvdXJjZShzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHNwaW5sb2NrX3QgKiBsb2NrLAorCQl1MzIgZW50cnkpCiB7Ci0JQlVHX09OKGtmaWZvX3B1dChmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpKSA9PSAwKTsKKwlCVUdfT04oCisJa2ZpZm9faW5fbG9ja2VkKGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMiksIGxvY2spCisJPT0gMCk7CiB9CiAKIHUzMiBjeGlvX2hhbF9nZXRfc3RhZyhzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3ApCiB7Ci0JcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZShyc2NwLT50cHRfZmlmbyk7CisJcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZSgmcnNjcC0+dHB0X2ZpZm8sICZyc2NwLT50cHRfZmlmb19sb2NrKTsKIH0KIAogdm9pZCBjeGlvX2hhbF9wdXRfc3RhZyhzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3AsIHUzMiBzdGFnKQogewotCWN4aW9faGFsX3B1dF9yZXNvdXJjZShyc2NwLT50cHRfZmlmbywgc3RhZyk7CisJY3hpb19oYWxfcHV0X3Jlc291cmNlKCZyc2NwLT50cHRfZmlmbywgJnJzY3AtPnRwdF9maWZvX2xvY2ssIHN0YWcpOwogfQogCiB1MzIgY3hpb19oYWxfZ2V0X3FwaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwKQogewotCXUzMiBxcGlkID0gY3hpb19oYWxfZ2V0X3Jlc291cmNlKHJzY3AtPnFwaWRfZmlmbyk7CisJdTMyIHFwaWQgPSBjeGlvX2hhbF9nZXRfcmVzb3VyY2UoJnJzY3AtPnFwaWRfZmlmbywKKwkJCSZyc2NwLT5xcGlkX2ZpZm9fbG9jayk7CiAJUERCRygiJXMgcXBpZCAweCV4XG4iLCBfX2Z1bmNfXywgcXBpZCk7CiAJcmV0dXJuIHFwaWQ7CiB9CkBAIC0yMTMsMzUgKzIxNiwzNSBAQAogdm9pZCBjeGlvX2hhbF9wdXRfcXBpZChzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3AsIHUzMiBxcGlkKQogewogCVBEQkcoIiVzIHFwaWQgMHgleFxuIiwgX19mdW5jX18sIHFwaWQpOwotCWN4aW9faGFsX3B1dF9yZXNvdXJjZShyc2NwLT5xcGlkX2ZpZm8sIHFwaWQpOworCWN4aW9faGFsX3B1dF9yZXNvdXJjZSgmcnNjcC0+cXBpZF9maWZvLCAmcnNjcC0+cXBpZF9maWZvX2xvY2ssIHFwaWQpOwogfQogCiB1MzIgY3hpb19oYWxfZ2V0X2NxaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwKQogewotCXJldHVybiBjeGlvX2hhbF9nZXRfcmVzb3VyY2UocnNjcC0+Y3FpZF9maWZvKTsKKwlyZXR1cm4gY3hpb19oYWxfZ2V0X3Jlc291cmNlKCZyc2NwLT5jcWlkX2ZpZm8sICZyc2NwLT5jcWlkX2ZpZm9fbG9jayk7CiB9CiAKIHZvaWQgY3hpb19oYWxfcHV0X2NxaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwLCB1MzIgY3FpZCkKIHsKLQljeGlvX2hhbF9wdXRfcmVzb3VyY2UocnNjcC0+Y3FpZF9maWZvLCBjcWlkKTsKKwljeGlvX2hhbF9wdXRfcmVzb3VyY2UoJnJzY3AtPmNxaWRfZmlmbywgJnJzY3AtPmNxaWRfZmlmb19sb2NrLCBjcWlkKTsKIH0KIAogdTMyIGN4aW9faGFsX2dldF9wZGlkKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCkKIHsKLQlyZXR1cm4gY3hpb19oYWxfZ2V0X3Jlc291cmNlKHJzY3AtPnBkaWRfZmlmbyk7CisJcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZSgmcnNjcC0+cGRpZF9maWZvLCAmcnNjcC0+cGRpZF9maWZvX2xvY2spOwogfQogCiB2b2lkIGN4aW9faGFsX3B1dF9wZGlkKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCwgdTMyIHBkaWQpCiB7Ci0JY3hpb19oYWxfcHV0X3Jlc291cmNlKHJzY3AtPnBkaWRfZmlmbywgcGRpZCk7CisJY3hpb19oYWxfcHV0X3Jlc291cmNlKCZyc2NwLT5wZGlkX2ZpZm8sICZyc2NwLT5wZGlkX2ZpZm9fbG9jaywgcGRpZCk7CiB9CiAKIHZvaWQgY3hpb19oYWxfZGVzdHJveV9yZXNvdXJjZShzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3ApCiB7Ci0Ja2ZpZm9fZnJlZShyc2NwLT50cHRfZmlmbyk7Ci0Ja2ZpZm9fZnJlZShyc2NwLT5jcWlkX2ZpZm8pOwotCWtmaWZvX2ZyZWUocnNjcC0+cXBpZF9maWZvKTsKLQlrZmlmb19mcmVlKHJzY3AtPnBkaWRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+dHB0X2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPmNxaWRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+cXBpZF9maWZvKTsKKwlrZmlmb19mcmVlKCZyc2NwLT5wZGlkX2ZpZm8pOwogCWtmcmVlKHJzY3ApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYyBiL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCmluZGV4IGI0ODNiMjkuLmY5NjcwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCkBAIC0yMjEsMTEgKzIyMSwyNyBAQAogfQogCiAvKgorICogT25seSBsZWZ0L3JpZ2h0IGRpcmVjdGlvbiBzaG91bGQgYmUgdXNlZCAodW5kZXIvb3ZlciAweDgwMDApIGZvcgorICogZm9yd2FyZC9yZXZlcnNlIG1vdG9yIGRpcmVjdGlvbiAodG8ga2VlcCBjYWxjdWxhdGlvbiBmYXN0ICYgc2ltcGxlKS4KKyAqLworc3RhdGljIHUxNiBtbF9jYWxjdWxhdGVfZGlyZWN0aW9uKHUxNiBkaXJlY3Rpb24sIHUxNiBmb3JjZSwKKwkJCQkgIHUxNiBuZXdfZGlyZWN0aW9uLCB1MTYgbmV3X2ZvcmNlKQoreworCWlmICghZm9yY2UpCisJCXJldHVybiBuZXdfZGlyZWN0aW9uOworCWlmICghbmV3X2ZvcmNlKQorCQlyZXR1cm4gZGlyZWN0aW9uOworCXJldHVybiAoKCh1MzIpKGRpcmVjdGlvbiA+PiAxKSAqIGZvcmNlICsKKwkJIChuZXdfZGlyZWN0aW9uID4+IDEpICogbmV3X2ZvcmNlKSAvCisJCShmb3JjZSArIG5ld19mb3JjZSkpIDw8IDE7Cit9CisKKy8qCiAgKiBDb21iaW5lIHR3byBlZmZlY3RzIGFuZCBhcHBseSBnYWluLgogICovCiBzdGF0aWMgdm9pZCBtbF9jb21iaW5lX2VmZmVjdHMoc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0LAogCQkJICAgICAgIHN0cnVjdCBtbF9lZmZlY3Rfc3RhdGUgKnN0YXRlLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBnYWluKQorCQkJICAgICAgIGludCBnYWluKQogewogCXN0cnVjdCBmZl9lZmZlY3QgKm5ldyA9IHN0YXRlLT5lZmZlY3Q7CiAJdW5zaWduZWQgaW50IHN0cm9uZywgd2VhaywgaTsKQEAgLTI1Miw4ICsyNjgsMjEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZGX1JVTUJMRToKLQkJc3Ryb25nID0gbmV3LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlICogZ2FpbiAvIDB4ZmZmZjsKLQkJd2VhayA9IG5ldy0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGUgKiBnYWluIC8gMHhmZmZmOworCQlzdHJvbmcgPSAodTMyKW5ldy0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZSAqIGdhaW4gLyAweGZmZmY7CisJCXdlYWsgPSAodTMyKW5ldy0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGUgKiBnYWluIC8gMHhmZmZmOworCisJCWlmIChlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGUgKyBzdHJvbmcpCisJCQllZmZlY3QtPmRpcmVjdGlvbiA9IG1sX2NhbGN1bGF0ZV9kaXJlY3Rpb24oCisJCQkJZWZmZWN0LT5kaXJlY3Rpb24sCisJCQkJZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlLAorCQkJCW5ldy0+ZGlyZWN0aW9uLCBzdHJvbmcpOworCQllbHNlIGlmIChlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlICsgd2VhaykKKwkJCWVmZmVjdC0+ZGlyZWN0aW9uID0gbWxfY2FsY3VsYXRlX2RpcmVjdGlvbigKKwkJCQllZmZlY3QtPmRpcmVjdGlvbiwKKwkJCQllZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlLAorCQkJCW5ldy0+ZGlyZWN0aW9uLCB3ZWFrKTsKKwkJZWxzZQorCQkJZWZmZWN0LT5kaXJlY3Rpb24gPSAwOwogCQllZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGUgPQogCQkJbWluKHN0cm9uZyArIGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZSwKIAkJCSAgICAweGZmZmZVKTsKQEAgLTI2OCw2ICsyOTcsMTMgQEAKIAkJLyogaGVyZSB3ZSBhbHNvIHNjYWxlIGl0IDB4N2ZmZiA9PiAweGZmZmYgKi8KIAkJaSA9IGkgKiBnYWluIC8gMHg3ZmZmOwogCisJCWlmIChlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGUgKyBpKQorCQkJZWZmZWN0LT5kaXJlY3Rpb24gPSBtbF9jYWxjdWxhdGVfZGlyZWN0aW9uKAorCQkJCWVmZmVjdC0+ZGlyZWN0aW9uLAorCQkJCWVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZSwKKwkJCQluZXctPmRpcmVjdGlvbiwgaSk7CisJCWVsc2UKKwkJCWVmZmVjdC0+ZGlyZWN0aW9uID0gMDsKIAkJZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlID0KIAkJCW1pbihpICsgZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlLCAweGZmZmZVKTsKIAkJZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZSA9CkBAIC00MTEsOCArNDQ3LDYgQEAKIAkJCQkgbXNlY3NfdG9famlmZmllcyhzdGF0ZS0+ZWZmZWN0LT5yZXBsYXkubGVuZ3RoKTsKIAkJc3RhdGUtPmFkal9hdCA9IHN0YXRlLT5wbGF5X2F0OwogCi0JCW1sX3NjaGVkdWxlX3RpbWVyKG1sKTsKLQogCX0gZWxzZSB7CiAJCWRlYnVnKCJpbml0aWF0ZWQgc3RvcCIpOwogCkBAIC00MjAsMTAgKzQ1NCwxMCBAQAogCQkJX19zZXRfYml0KEZGX0VGRkVDVF9BQk9SVElORywgJnN0YXRlLT5mbGFncyk7CiAJCWVsc2UKIAkJCV9fY2xlYXJfYml0KEZGX0VGRkVDVF9TVEFSVEVELCAmc3RhdGUtPmZsYWdzKTsKLQotCQltbF9wbGF5X2VmZmVjdHMobWwpOwogCX0KIAorCW1sX3BsYXlfZWZmZWN0cyhtbCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKaW5kZXggZjZjNjg4Yy4uYjFlZGQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaWZvcmNlX3JlbGVhc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQorc3RhdGljIHZvaWQgaWZvcmNlX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWZvcmNlICppZm9yY2UgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpOwpAQCAtMjI4LDMwICsyMjgsMTcgQEAKIAogCQkvKiBEaXNhYmxlIGZvcmNlIGZlZWRiYWNrIHBsYXliYWNrICovCiAJCWlmb3JjZV9zZW5kX3BhY2tldChpZm9yY2UsIEZGX0NNRF9FTkFCTEUsICJcMDAxIik7CisJCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpZm9yY2UtPndhaXQsCisJCQkhdGVzdF9iaXQoSUZPUkNFX1hNSVRfUlVOTklORywgaWZvcmNlLT54bWl0X2ZsYWdzKSk7CiAJfQogCiAJc3dpdGNoIChpZm9yY2UtPmJ1cykgewogI2lmZGVmIENPTkZJR19KT1lTVElDS19JRk9SQ0VfVVNCCi0JCWNhc2UgSUZPUkNFX1VTQjoKLQkJCXVzYl9raWxsX3VyYihpZm9yY2UtPmlycSk7Ci0KLQkJCS8qIFRoZSBkZXZpY2Ugd2FzIHVucGx1Z2dlZCBiZWZvcmUgdGhlIGZpbGUKLQkJCSAqIHdhcyByZWxlYXNlZCAqLwotCQkJaWYgKGlmb3JjZS0+dXNiZGV2ID09IE5VTEwpIHsKLQkJCQlpZm9yY2VfZGVsZXRlX2RldmljZShpZm9yY2UpOwotCQkJCWtmcmVlKGlmb3JjZSk7Ci0JCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0JfQotfQotCi12b2lkIGlmb3JjZV9kZWxldGVfZGV2aWNlKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSkKLXsKLQlzd2l0Y2ggKGlmb3JjZS0+YnVzKSB7Ci0jaWZkZWYgQ09ORklHX0pPWVNUSUNLX0lGT1JDRV9VU0IKIAljYXNlIElGT1JDRV9VU0I6Ci0JCWlmb3JjZV91c2JfZGVsZXRlKGlmb3JjZSk7CisJCXVzYl9raWxsX3VyYihpZm9yY2UtPmlycSk7CisJCXVzYl9raWxsX3VyYihpZm9yY2UtPm91dCk7CisJCXVzYl9raWxsX3VyYihpZm9yY2UtPmN0cmwpOwogCQlicmVhazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19KT1lTVElDS19JRk9SQ0VfMjMyCkBAIC0zMDMsNyArMjkwLDcgQEAKIAogCWlucHV0X2Rldi0+bmFtZSA9ICJVbmtub3duIEktRm9yY2UgZGV2aWNlIjsKIAlpbnB1dF9kZXYtPm9wZW4gPSBpZm9yY2Vfb3BlbjsKLQlpbnB1dF9kZXYtPmNsb3NlID0gaWZvcmNlX3JlbGVhc2U7CisJaW5wdXRfZGV2LT5jbG9zZSA9IGlmb3JjZV9jbG9zZTsKIAogLyoKICAqIE9uLWRldmljZSBtZW1vcnkgYWxsb2NhdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS11c2IuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS11c2IuYwppbmRleCA5ZjI4OWQ4Li5iNDEzMDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCkBAIC0xMDksNiArMTA5LDcgQEAKIAlzdHJ1Y3QgaWZvcmNlICppZm9yY2UgPSB1cmItPmNvbnRleHQ7CiAKIAlpZiAodXJiLT5zdGF0dXMpIHsKKwkJY2xlYXJfYml0KElGT1JDRV9YTUlUX1JVTk5JTkcsIGlmb3JjZS0+eG1pdF9mbGFncyk7CiAJCWRiZygidXJiLT5zdGF0dXMgJWQsIGV4aXRpbmciLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAl9CkBAIC0xODYsMzMgKzE4NywxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIENhbGxlZCBieSBpZm9yY2VfZGVsZXRlKCkgKi8KLXZvaWQgaWZvcmNlX3VzYl9kZWxldGUoc3RydWN0IGlmb3JjZSogaWZvcmNlKQorc3RhdGljIHZvaWQgaWZvcmNlX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXVzYl9raWxsX3VyYihpZm9yY2UtPmlycSk7Ci0JdXNiX2tpbGxfdXJiKGlmb3JjZS0+b3V0KTsKLQl1c2Jfa2lsbF91cmIoaWZvcmNlLT5jdHJsKTsKKwlzdHJ1Y3QgaWZvcmNlICppZm9yY2UgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlmb3JjZS0+ZGV2KTsKIAogCXVzYl9mcmVlX3VyYihpZm9yY2UtPmlycSk7CiAJdXNiX2ZyZWVfdXJiKGlmb3JjZS0+b3V0KTsKIAl1c2JfZnJlZV91cmIoaWZvcmNlLT5jdHJsKTsKLX0KIAotc3RhdGljIHZvaWQgaWZvcmNlX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCBpZm9yY2UgKmlmb3JjZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JaW50IG9wZW4gPSAwOyAvKiBGSVhNRSEgaWZvcmNlLT5kZXYuaGFuZGxlLT5vcGVuOyAqLwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQlpZiAoaWZvcmNlKSB7Ci0JCWlmb3JjZS0+dXNiZGV2ID0gTlVMTDsKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWZvcmNlLT5kZXYpOwotCi0JCWlmICghb3BlbikgewotCQkJaWZvcmNlX2RlbGV0ZV9kZXZpY2UoaWZvcmNlKTsKLQkJCWtmcmVlKGlmb3JjZSk7Ci0JCX0KLQl9CisJa2ZyZWUoaWZvcmNlKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlmb3JjZV91c2JfaWRzIFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLmggYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAppbmRleCBmMmQ5MWY0Li45ZjQ5NGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAorKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaApAQCAtMTUwLDExICsxNTAsOSBAQAogCiAvKiBpZm9yY2UtdXNiLmMgKi8KIHZvaWQgaWZvcmNlX3VzYl94bWl0KHN0cnVjdCBpZm9yY2UgKmlmb3JjZSk7Ci12b2lkIGlmb3JjZV91c2JfZGVsZXRlKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSk7CiAKIC8qIGlmb3JjZS1tYWluLmMgKi8KIGludCBpZm9yY2VfaW5pdF9kZXZpY2Uoc3RydWN0IGlmb3JjZSAqaWZvcmNlKTsKLXZvaWQgaWZvcmNlX2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGlmb3JjZSAqaWZvcmNlKTsKIAogLyogaWZvcmNlLXBhY2tldHMuYyAqLwogaW50IGlmb3JjZV9jb250cm9sX3BsYXliYWNrKHN0cnVjdCBpZm9yY2UqLCB1MTYgaWQsIHVuc2lnbmVkIGludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggYTM1NzM1Ny4uMWY1ZTJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtMTM0LDcgKzEzNCw4IEBACiAjZGVmaW5lIEFUS0JEX0NNRF9HRVRJRAkJMHgwMmYyCiAjZGVmaW5lIEFUS0JEX0NNRF9TRVRSRVAJMHgxMGYzCiAjZGVmaW5lIEFUS0JEX0NNRF9FTkFCTEUJMHgwMGY0Ci0jZGVmaW5lIEFUS0JEX0NNRF9SRVNFVF9ESVMJMHgwMGY1CisjZGVmaW5lIEFUS0JEX0NNRF9SRVNFVF9ESVMJMHgwMGY1CS8qIFJlc2V0IHRvIGRlZmF1bHRzIGFuZCBkaXNhYmxlICovCisjZGVmaW5lIEFUS0JEX0NNRF9SRVNFVF9ERUYJMHgwMGY2CS8qIFJlc2V0IHRvIGRlZmF1bHRzICovCiAjZGVmaW5lIEFUS0JEX0NNRF9TRVRBTExfTUJSCTB4MDBmYQogI2RlZmluZSBBVEtCRF9DTURfUkVTRVRfQkFUCTB4MDJmZgogI2RlZmluZSBBVEtCRF9DTURfUkVTRU5ECTB4MDBmZQpAQCAtODM2LDcgKzgzNyw3IEBACiAJc3RydWN0IGF0a2JkICphdGtiZCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKIAogCWF0a2JkX2Rpc2FibGUoYXRrYmQpOwotCXBzMl9jb21tYW5kKCZhdGtiZC0+cHMyZGV2LCBOVUxMLCBBVEtCRF9DTURfUkVTRVRfQkFUKTsKKwlwczJfY29tbWFuZCgmYXRrYmQtPnBzMmRldiwgTlVMTCwgQVRLQkRfQ01EX1JFU0VUX0RFRik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXRyaXhfa2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYwppbmRleCAzNGY0YTI5Li5kM2M4YjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYwpAQCAtMjksMTEgKzI5LDEzIEBACiAJdW5zaWduZWQgc2hvcnQgKmtleWNvZGVzOwogCXVuc2lnbmVkIGludCByb3dfc2hpZnQ7CiAKKwlERUNMQVJFX0JJVE1BUChkaXNhYmxlZF9ncGlvcywgTUFUUklYX01BWF9ST1dTKTsKKwogCXVpbnQzMl90IGxhc3Rfa2V5X3N0YXRlW01BVFJJWF9NQVhfQ09MU107CiAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXNwaW5sb2NrX3QgbG9jazsKIAlib29sIHNjYW5fcGVuZGluZzsKIAlib29sIHN0b3BwZWQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogLyoKQEAgLTIyMiw5ICsyMjQsMTYgQEAKIAogCW1hdHJpeF9rZXlwYWRfc3RvcChrZXlwYWQtPmlucHV0X2Rldik7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCi0JCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKQotCQkJZW5hYmxlX2lycV93YWtlKGdwaW9fdG9faXJxKHBkYXRhLT5yb3dfZ3Bpb3NbaV0pKTsKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcm93X2dwaW9zOyBpKyspIHsKKwkJCWlmICghdGVzdF9iaXQoaSwga2V5cGFkLT5kaXNhYmxlZF9ncGlvcykpIHsKKwkJCQl1bnNpZ25lZCBpbnQgZ3BpbyA9IHBkYXRhLT5yb3dfZ3Bpb3NbaV07CisKKwkJCQlpZiAoZW5hYmxlX2lycV93YWtlKGdwaW9fdG9faXJxKGdwaW8pKSA9PSAwKQorCQkJCQlfX3NldF9iaXQoaSwga2V5cGFkLT5kaXNhYmxlZF9ncGlvcyk7CisJCQl9CisJCX0KKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNiw5ICsyNDUsMTUgQEAKIAljb25zdCBzdHJ1Y3QgbWF0cml4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtleXBhZC0+cGRhdGE7CiAJaW50IGk7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCi0JCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKQotCQkJZGlzYWJsZV9pcnFfd2FrZShncGlvX3RvX2lycShwZGF0YS0+cm93X2dwaW9zW2ldKSk7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKSB7CisJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksIGtleXBhZC0+ZGlzYWJsZWRfZ3Bpb3MpKSB7CisJCQkJdW5zaWduZWQgaW50IGdwaW8gPSBwZGF0YS0+cm93X2dwaW9zW2ldOworCisJCQkJZGlzYWJsZV9pcnFfd2FrZShncGlvX3RvX2lycShncGlvKSk7CisJCQl9CisJCX0KKwl9CiAKIAltYXRyaXhfa2V5cGFkX3N0YXJ0KGtleXBhZC0+aW5wdXRfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCmluZGV4IGVlYWE3YWMuLjIxZDYxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMKQEAgLTI1MywxNCArMjUzLDYgQEAKIAl1OCByZWc7CiAJaW50IHJldDsKIAotI2lmZGVmIENPTkZJR19MT0NLREVQCi0JLyogV09SS0FST1VORCBmb3IgbG9ja2RlcCBmb3JjaW5nIElSUUZfRElTQUJMRUQgb24gdXMsIHdoaWNoCi0JICogd2UgZG9uJ3Qgd2FudCBhbmQgY2FuJ3QgdG9sZXJhdGUuICBBbHRob3VnaCBpdCBtaWdodCBiZQotCSAqIGZyaWVuZGxpZXIgbm90IHRvIGJvcnJvdyB0aGlzIHRocmVhZCBjb250ZXh0Li4uCi0JICovCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotI2VuZGlmCi0KIAkvKiBSZWFkICYgQ2xlYXIgVFdMNDAzMCBwZW5kaW5nIGludGVycnVwdCAqLwogCXJldCA9IHR3bDQwMzBfa3ByZWFkKGtwLCAmcmVnLCBLRVlQX0lTUjEsIDEpOwogCkBAIC00MDMsNyArMzk1LDggQEAKIAkgKgogCSAqIE5PVEU6ICB3ZSBhc3N1bWUgdGhpcyBob3N0IGlzIHdpcmVkIHRvIFRXTDQwNDAgSU5UMSwgbm90IElOVDIgLi4uCiAJICovCi0JZXJyb3IgPSByZXF1ZXN0X2lycShrcC0+aXJxLCBkb19rcF9pcnEsIDAsIHBkZXYtPm5hbWUsIGtwKTsKKwllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGtwLT5pcnEsIE5VTEwsIGRvX2twX2lycSwKKwkJCTAsIHBkZXYtPm5hbWUsIGtwKTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2luZm8oa3AtPmRiZ19kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIGlycSBubz0lZFxuIiwKIAkJCWtwLT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3R3bDQwMzAtcHdyYnV0dG9uLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYwppbmRleCBiZGRlNWM4Li5lOTA2OWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYwpAQCAtMzksMTggKzM5LDggQEAKIAlpbnQgZXJyOwogCXU4IHZhbHVlOwogCi0jaWZkZWYgQ09ORklHX0xPQ0tERVAKLQkvKiBXT1JLQVJPVU5EIGZvciBsb2NrZGVwIGZvcmNpbmcgSVJRRl9ESVNBQkxFRCBvbiB1cywgd2hpY2gKLQkgKiB3ZSBkb24ndCB3YW50IGFuZCBjYW4ndCB0b2xlcmF0ZSBzaW5jZSB0aGlzIGlzIGEgdGhyZWFkZWQKLQkgKiBJUlEgYW5kIGNhbiBzbGVlcCBkdWUgdG8gdGhlIGkyYyByZWFkcyBpdCBoYXMgdG8gaXNzdWUuCi0JICogQWx0aG91Z2ggaXQgbWlnaHQgYmUgZnJpZW5kbGllciBub3QgdG8gYm9ycm93IHRoaXMgdGhyZWFkCi0JICogY29udGV4dC4uLgotCSAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLSNlbmRpZgotCiAJZXJyID0gdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnZhbHVlLAotCQkJCSAgU1RTX0hXX0NPTkRJVElPTlMpOworCQkJCVNUU19IV19DT05ESVRJT05TKTsKIAlpZiAoIWVycikgIHsKIAkJaW5wdXRfcmVwb3J0X2tleShwd3IsIEtFWV9QT1dFUiwgdmFsdWUgJiBQV1JfUFdST05fSVJRKTsKIAkJaW5wdXRfc3luYyhwd3IpOwpAQCAtODAsNyArNzAsNyBAQAogCXB3ci0+cGh5cyA9ICJ0d2w0MDMwX3B3cmJ1dHRvbi9pbnB1dDAiOwogCXB3ci0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQllcnIgPSByZXF1ZXN0X2lycShpcnEsIHBvd2VyYnV0dG9uX2lycSwKKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIE5VTEwsIHBvd2VyYnV0dG9uX2lycSwKIAkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKIAkJCSJ0d2w0MDMwX3B3cmJ1dHRvbiIsIHB3cik7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAzOGRhNmFiLi5jMGFmYjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJ3aXN0cm9uLWJpb3MiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKLSNpZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE0KIAkJLnBtCT0gJndpc3Ryb25fcG1fb3BzLAogI2VuZGlmCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCAzZmVlYjNhLi5jNzE0Y2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCkBAIC03MCw3ICs3MCw3IEBACiBjb25maWcgTU9VU0VfUFMyX0xJRkVCT09LCiAJYm9vbCAiRnVqaXRzdSBMaWZlYm9vayBQUy8yIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiIgaWYgRU1CRURERUQKIAlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIE1PVVNFX1BTMiAmJiBYODYKKwlkZXBlbmRzIG9uIE1PVVNFX1BTMiAmJiBYODYgJiYgRE1JCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIEZ1aml0c3UgQi1zZXJpZXMgTGlmZWJvb2sgUFMvMgogCSAgVG91Y2hTY3JlZW4gY29ubmVjdGVkIHRvIHlvdXIgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwppbmRleCBiMTQ2MjM3Li45MGJlMzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwpAQCAtNDI3LDcgKzQyNyw2IEBACiAKIHN0YXRpYyBpbnQgaGdwa19yZWdpc3RlcihzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwc21vdXNlLT5kZXY7CiAJaW50IGVycjsKIAogCS8qIHJlZ2lzdGVyIGhhbmRsZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKaW5kZXggMmU2YmRmZS4uNmQ3YWExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwpAQCAtNDQsNyArNDQsNiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0Y29uc3QgbGlmZWJvb2tfZG1pX3RhYmxlW10gPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfRE1JKSAmJiBkZWZpbmVkKENPTkZJR19YODYpCiAJewogCQkvKiBGTE9SQS1pZSA1NW1pICovCiAJCS5tYXRjaGVzID0gewpAQCAtMTE4LDcgKzExNyw2IEBACiAJCX0sCiAJfSwKIAl7IH0KLSNlbmRpZgogfTsKIAogdm9pZCBfX2luaXQgbGlmZWJvb2tfbW9kdWxlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCmluZGV4IGZkMGJjMDkuLjQwMWFjNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwpAQCAtMTEzNyw3ICsxMTM3LDEwIEBACiAJaWYgKHBzbW91c2UtPmNsZWFudXApCiAJCXBzbW91c2UtPmNsZWFudXAocHNtb3VzZSk7CiAKLQlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworLyoKKyAqIFJlc2V0IHRoZSBtb3VzZSB0byBkZWZhdWx0cyAoYmFyZSBQUy8yIHByb3RvY29sKS4KKyAqLworCXBzMl9jb21tYW5kKCZwc21vdXNlLT5wczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX1JFU0VUX0RJUyk7CiAKIC8qCiAgKiBTb21lIGJveGVzLCBzdWNoIGFzIEhQIG54NzQwMCwgZ2V0IHRlcnJpYmx5IGNvbmZ1c2VkIGlmIG1vdXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggMDIzNmYwZC4uZTBmMzAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtMjg0LDEzICsyODQsNyBAQAogCiAJbXV0ZXhfbG9jaygmc2VyaW9fbXV0ZXgpOwogCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2UgaGFuZGxlIG9ubHkgb25lIGV2ZW50IGhlcmUgdG8gZ2l2ZSBzd3N1c3AKLQkgKiBhIGNoYW5jZSB0byBmcmVlemUga3NlcmlvZCB0aHJlYWQuIFNlcmlvIGV2ZW50cyBzaG91bGQKLQkgKiBiZSBwcmV0dHkgcmFyZSBzbyB3ZSBhcmUgbm90IGNvbmNlcm5lZCBhYm91dCB0YWtpbmcKLQkgKiBwZXJmb3JtYW5jZSBoaXQuCi0JICovCi0JaWYgKChldmVudCA9IHNlcmlvX2dldF9ldmVudCgpKSkgeworCXdoaWxlICgoZXZlbnQgPSBzZXJpb19nZXRfZXZlbnQoKSkpIHsKIAogCQlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CiAJCQljYXNlIFNFUklPX1JFR0lTVEVSX1BPUlQ6CkBAIC0zODAsMTAgKzM3NCw5IEBACiAKIHN0YXRpYyBpbnQgc2VyaW9fdGhyZWFkKHZvaWQgKm5vdGhpbmcpCiB7Ci0Jc2V0X2ZyZWV6YWJsZSgpOwogCWRvIHsKIAkJc2VyaW9faGFuZGxlX2V2ZW50KCk7Ci0JCXdhaXRfZXZlbnRfZnJlZXphYmxlKHNlcmlvX3dhaXQsCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzZXJpb193YWl0LAogCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFsaXN0X2VtcHR5KCZzZXJpb19ldmVudF9saXN0KSk7CiAJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29yZS5jCmluZGV4IDdlNWYzMGQuLmYxZThhZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAJc2l6ZV90IHJlY3ZidWZfc2l6ZSA9IDE1MDA7CiAJaW50IHJlY3ZsZW47CiAJc3RydWN0IHNvY2tldCAqc29ja2V0ID0gTlVMTDsKLQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAKIAkvKiBhbGxvY2F0ZSBidWZmZXIgbWVtb3J5ICovCiAJcmVjdmJ1ZiA9IGttYWxsb2MocmVjdmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3NlZ21lbnRzLmMgYi9kcml2ZXJzL2xndWVzdC9zZWdtZW50cy5jCmluZGV4IDk1MWM1N2IuLmVkZTQ2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3NlZ21lbnRzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3Qvc2VnbWVudHMuYwpAQCAtMTc5LDggKzE3OSwxMCBAQAogCSAqIFdlIGFzc3VtZSB0aGUgR3Vlc3QgaGFzIHRoZSBzYW1lIG51bWJlciBvZiBHRFQgZW50cmllcyBhcyB0aGUKIAkgKiBIb3N0LCBvdGhlcndpc2Ugd2UnZCBoYXZlIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBHdWVzdCBHRFQuCiAJICovCi0JaWYgKG51bSA+PSBBUlJBWV9TSVpFKGNwdS0+YXJjaC5nZHQpKQorCWlmIChudW0gPj0gQVJSQVlfU0laRShjcHUtPmFyY2guZ2R0KSkgewogCQlraWxsX2d1ZXN0KGNwdSwgInRvbyBtYW55IGdkdCBlbnRyaWVzICVpIiwgbnVtKTsKKwkJcmV0dXJuOworCX0KIAogCS8qIFNldCBpdCB1cCwgdGhlbiBmaXggaXQuICovCiAJY3B1LT5hcmNoLmdkdFtudW1dLmEgPSBsbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBmNGY1ZjgyLi5kZDNkZmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0zODYsNyArMzg2LDkgQEAKIAlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJm1kZGV2LT5hY3RpdmUsICZhbGxfbWRkZXZzX2xvY2spKQogCQlyZXR1cm47CiAJaWYgKCFtZGRldi0+cmFpZF9kaXNrcyAmJiBsaXN0X2VtcHR5KCZtZGRldi0+ZGlza3MpICYmCi0JICAgICFtZGRldi0+aG9sZF9hY3RpdmUpIHsKKwkgICAgbWRkZXYtPmN0aW1lID09IDAgJiYgIW1kZGV2LT5ob2xkX2FjdGl2ZSkgeworCQkvKiBBcnJheSBpcyBub3QgY29uZmlndXJlZCBhdCBhbGwsIGFuZCBub3QgaGVsZCBhY3RpdmUsCisJCSAqIHNvIGRlc3Ryb3kgaXQgKi8KIAkJbGlzdF9kZWwoJm1kZGV2LT5hbGxfbWRkZXZzKTsKIAkJaWYgKG1kZGV2LT5nZW5kaXNrKSB7CiAJCQkvKiB3ZSBkaWQgYSBwcm9iZSBzbyBuZWVkIHRvIGNsZWFuIHVwLgpAQCAtNDM1NSw3ICs0MzU3LDcgQEAKIAltZGRldi0+YmFycmllcnNfd29yayA9IDE7CiAJbWRkZXYtPm9rX3N0YXJ0X2RlZ3JhZGVkID0gc3RhcnRfZGlydHlfZGVncmFkZWQ7CiAKLQlpZiAoc3RhcnRfcmVhZG9ubHkpCisJaWYgKHN0YXJ0X3JlYWRvbmx5ICYmIG1kZGV2LT5ybyA9PSAwKQogCQltZGRldi0+cm8gPSAyOyAvKiByZWFkLW9ubHksIGJ1dCBzd2l0Y2ggb24gZmlyc3Qgd3JpdGUgKi8KIAogCWVyciA9IG1kZGV2LT5wZXJzLT5ydW4obWRkZXYpOwpAQCAtNDQxOSwzMyArNDQyMSw2IEBACiAKIAlzZXRfY2FwYWNpdHkoZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCi0JLyogSWYgdGhlcmUgaXMgYSBwYXJ0aWFsbHktcmVjb3ZlcmVkIGRyaXZlIHdlIG5lZWQgdG8KLQkgKiBzdGFydCByZWNvdmVyeSBoZXJlLiAgSWYgd2UgbGVhdmUgaXQgdG8gbWRfY2hlY2tfcmVjb3ZlcnksCi0JICogaXQgd2lsbCByZW1vdmUgdGhlIGRyaXZlcyBhbmQgbm90IGRvIHRoZSByaWdodCB0aGluZwotCSAqLwotCWlmIChtZGRldi0+ZGVncmFkZWQgJiYgIW1kZGV2LT5zeW5jX3RocmVhZCkgewotCQlpbnQgc3BhcmVzID0gMDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgotCQkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpICYmCi0JCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKLQkJCQkvKiBjb21wbGV0ZSBhbiBpbnRlcnJ1cHRlZCByZWNvdmVyeSAqLwotCQkJCXNwYXJlcysrOwotCQlpZiAoc3BhcmVzICYmIG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKLQkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7Ci0JCQlzZXRfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZtZGRldi0+cmVjb3ZlcnkpOwotCQkJbWRkZXYtPnN5bmNfdGhyZWFkID0gbWRfcmVnaXN0ZXJfdGhyZWFkKG1kX2RvX3N5bmMsCi0JCQkJCQkJCW1kZGV2LAotCQkJCQkJCQkicmVzeW5jIik7Ci0JCQlpZiAoIW1kZGV2LT5zeW5jX3RocmVhZCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBzdGFydCByZXN5bmMiCi0JCQkJICAgICAgICIgdGhyZWFkLi4uXG4iLAotCQkJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKLQkJCQkvKiBsZWF2ZSB0aGUgc3BhcmVzIHdoZXJlIHRoZXkgYXJlLCBpdCBzaG91bGRuJ3QgaHVydCAqLwotCQkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7Ci0JCQl9Ci0JCX0KLQl9CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAltZF93YWtldXBfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7IC8qIHBvc3NpYmx5IGtpY2sgb2ZmIGEgcmVzaGFwZSAqLwogCkBAIC01MjYyLDYgKzUyMzcsMTAgQEAKIAkJbWRkZXYtPm1pbm9yX3ZlcnNpb24gPSBpbmZvLT5taW5vcl92ZXJzaW9uOwogCQltZGRldi0+cGF0Y2hfdmVyc2lvbiA9IGluZm8tPnBhdGNoX3ZlcnNpb247CiAJCW1kZGV2LT5wZXJzaXN0ZW50ID0gIWluZm8tPm5vdF9wZXJzaXN0ZW50OworCQkvKiBlbnN1cmUgbWRkZXZfcHV0IGRvZXNuJ3QgZGVsZXRlIHRoaXMgbm93IHRoYXQgdGhlcmUKKwkJICogaXMgc29tZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24uCisJCSAqLworCQltZGRldi0+Y3RpbWUgICAgICAgICA9IGdldF9zZWNvbmRzKCk7CiAJCXJldHVybiAwOwogCX0KIAltZGRldi0+bWFqb3JfdmVyc2lvbiA9IE1EX01BSk9SX1ZFUlNJT047CkBAIC02NDk0LDEwICs2NDczLDExIEBACiAJCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDI7CiAKIAl0cnlfYWdhaW46Ci0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CisKKwkJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpKQogCQkJZ290byBza2lwOwotCQl9CiAJCWZvcl9lYWNoX21kZGV2KG1kZGV2MiwgdG1wKSB7CiAJCQlpZiAobWRkZXYyID09IG1kZGV2KQogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCmluZGV4IGZlNDQ3ODkuLjYyMjNiZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKQEAgLTIwMiwxNCArMjAyLDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzdTsKIAotCWlmICgodGNvZGUgIT0gVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUICYmCi0JICAgICB0Y29kZSAhPSBUQ09ERV9XUklURV9CTE9DS19SRVFVRVNUKSB8fAotCSAgICBvZmZzZXQgIT0gQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfRkNQX1JFU1BPTlNFIHx8Ci0JICAgIGxlbmd0aCA9PSAwIHx8Ci0JICAgICgoKHU4ICopcGF5bG9hZClbMF0gJiAweGYwKSAhPSAwKSB7Ci0JCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfVFlQRV9FUlJPUik7CisJaWYgKGxlbmd0aCA8IDIgfHwgKCgodTggKilwYXlsb2FkKVswXSAmIDB4ZjApICE9IDApCiAJCXJldHVybjsKLQl9CiAKIAlzdSA9ICgodTggKilwYXlsb2FkKVsxXSAmIDB4NzsKIApAQCAtMjMwLDEwICsyMjQsOCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZub2RlX2xpc3RfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGZkdHYpIHsKKwlpZiAoZmR0dikKIAkJYXZjX3JlY3YoZmR0diwgcGF5bG9hZCwgbGVuZ3RoKTsKLQkJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9DT01QTEVURSk7Ci0JfQogfQogCiBzdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciBmY3BfaGFuZGxlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4OC1pci5jCmluZGV4IDNjY2M4YWYuLjJiZjU3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODgtaXIuYwpAQCAtMTI0LDE1ICsxMjQsMTIgQEAKIAlhdG9taWNfdCByeGNsa19kaXZpZGVyOwogCWF0b21pY190IHJ4X2ludmVydDsKIAotCXN0cnVjdCBrZmlmbyAqcnhfa2ZpZm87CisJc3RydWN0IGtmaWZvIHJ4X2tmaWZvOwogCXNwaW5sb2NrX3Qgcnhfa2ZpZm9fbG9jazsKIAogCXN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzIHR4X3BhcmFtczsKIAlzdHJ1Y3QgbXV0ZXggdHhfcGFyYW1zX2xvY2s7CiAJYXRvbWljX3QgdHhjbGtfZGl2aWRlcjsKLQotCXN0cnVjdCBrZmlmbyAqdHhfa2ZpZm87Ci0Jc3BpbmxvY2tfdCB0eF9rZmlmb19sb2NrOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gyMzg4OF9pcl9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKQEAgLTUyMiw2ICs1MTksNyBAQAogewogCXN0cnVjdCBjeDIzODg4X2lyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHN0YXRlLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXUzMiBjbnRybCA9IGN4MjM4ODhfaXJfcmVhZDQoZGV2LCBDWDIzODg4X0lSX0NOVFJMX1JFRyk7CiAJdTMyIGlycWVuID0gY3gyMzg4OF9pcl9yZWFkNChkZXYsIENYMjM4ODhfSVJfSVJRRU5fUkVHKTsKQEAgLTU5NCw4ICs1OTIsOSBAQAogCQkJaWYgKGkgPT0gMCkKIAkJCQlicmVhazsKIAkJCWogPSBpICogc2l6ZW9mKHUzMik7Ci0JCQlrID0ga2ZpZm9fcHV0KHN0YXRlLT5yeF9rZmlmbywKLQkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKSByeF9kYXRhLCBqKTsKKwkJCWsgPSBrZmlmb19pbl9sb2NrZWQoJnN0YXRlLT5yeF9rZmlmbywKKwkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKSByeF9kYXRhLCBqLAorCQkJCSAgICAgICZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7CiAJCQlpZiAoayAhPSBqKQogCQkJCWtyb3IrKzsgLyogcnhfa2ZpZm8gb3ZlciBydW4gKi8KIAkJfQpAQCAtNjMxLDggKzYzMCwxMSBAQAogCQljeDIzODg4X2lyX3dyaXRlNChkZXYsIENYMjM4ODhfSVJfQ05UUkxfUkVHLCBjbnRybCk7CiAJCSpoYW5kbGVkID0gdHJ1ZTsKIAl9Ci0JaWYgKGtmaWZvX2xlbihzdGF0ZS0+cnhfa2ZpZm8pID49IENYMjM4ODhfSVJfUlhfS0ZJRk9fU0laRSAvIDIpCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKKwlpZiAoa2ZpZm9fbGVuKCZzdGF0ZS0+cnhfa2ZpZm8pID49IENYMjM4ODhfSVJfUlhfS0ZJRk9fU0laRSAvIDIpCiAJCWV2ZW50cyB8PSBWNEwyX1NVQkRFVl9JUl9SWF9GSUZPX1NFUlZJQ0VfUkVROworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5yeF9rZmlmb19sb2NrLCBmbGFncyk7CiAKIAlpZiAoZXZlbnRzKQogCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIFY0TDJfU1VCREVWX0lSX1JYX05PVElGWSwgJmV2ZW50cyk7CkBAIC02NTcsNyArNjU5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JbiA9IGtmaWZvX2dldChzdGF0ZS0+cnhfa2ZpZm8sIGJ1Ziwgbik7CisJbiA9IGtmaWZvX291dF9sb2NrZWQoJnN0YXRlLT5yeF9rZmlmbywgYnVmLCBuLCAmc3RhdGUtPnJ4X2tmaWZvX2xvY2spOwogCiAJbiAvPSBzaXplb2YodTMyKTsKIAkqbnVtID0gbiAqIHNpemVvZih1MzIpOwpAQCAtNzg1LDcgKzc4NywxMiBAQAogCW8tPmludGVycnVwdF9lbmFibGUgPSBwLT5pbnRlcnJ1cHRfZW5hYmxlOwogCW8tPmVuYWJsZSA9IHAtPmVuYWJsZTsKIAlpZiAocC0+ZW5hYmxlKSB7Ci0JCWtmaWZvX3Jlc2V0KHN0YXRlLT5yeF9rZmlmbyk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5yeF9rZmlmb19sb2NrLCBmbGFncyk7CisJCWtmaWZvX3Jlc2V0KCZzdGF0ZS0+cnhfa2ZpZm8pOworCQkvKiByZXNldCB0eF9maWZvIHRvbyBpZiB0aGVyZSBpcyBvbmUuLi4gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKHAtPmludGVycnVwdF9lbmFibGUpCiAJCQlpcnFlbmFibGVfcngoZGV2LCBJUlFFTl9SU0UgfCBJUlFFTl9SVEUgfCBJUlFFTl9ST0UpOwogCQljb250cm9sX3J4X2VuYWJsZShkZXYsIHAtPmVuYWJsZSk7CkBAIC04OTIsNyArODk5LDYgQEAKIAlvLT5pbnRlcnJ1cHRfZW5hYmxlID0gcC0+aW50ZXJydXB0X2VuYWJsZTsKIAlvLT5lbmFibGUgPSBwLT5lbmFibGU7CiAJaWYgKHAtPmVuYWJsZSkgewotCQlrZmlmb19yZXNldChzdGF0ZS0+dHhfa2ZpZm8pOwogCQlpZiAocC0+aW50ZXJydXB0X2VuYWJsZSkKIAkJCWlycWVuYWJsZV90eChkZXYsIElSUUVOX1RTRSk7CiAJCWNvbnRyb2xfdHhfZW5hYmxlKGRldiwgcC0+ZW5hYmxlKTsKQEAgLTExNjgsMTkgKzExNzQsOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pbml0KCZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7Ci0Jc3RhdGUtPnJ4X2tmaWZvID0ga2ZpZm9fYWxsb2MoQ1gyMzg4OF9JUl9SWF9LRklGT19TSVpFLCBHRlBfS0VSTkVMLAotCQkJCSAgICAgICZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7Ci0JaWYgKHN0YXRlLT5yeF9rZmlmbyA9PSBOVUxMKQorCWlmIChrZmlmb19hbGxvYygmc3RhdGUtPnJ4X2tmaWZvLCBDWDIzODg4X0lSX1JYX0tGSUZPX1NJWkUsIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNwaW5fbG9ja19pbml0KCZzdGF0ZS0+dHhfa2ZpZm9fbG9jayk7Ci0Jc3RhdGUtPnR4X2tmaWZvID0ga2ZpZm9fYWxsb2MoQ1gyMzg4OF9JUl9UWF9LRklGT19TSVpFLCBHRlBfS0VSTkVMLAotCQkJCSAgICAgICZzdGF0ZS0+dHhfa2ZpZm9fbG9jayk7Ci0JaWYgKHN0YXRlLT50eF9rZmlmbyA9PSBOVUxMKSB7Ci0JCWtmaWZvX2ZyZWUoc3RhdGUtPnJ4X2tmaWZvKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJc3RhdGUtPmRldiA9IGRldjsKIAlzdGF0ZS0+aWQgPSBWNEwyX0lERU5UX0NYMjM4ODhfSVI7CiAJc3RhdGUtPnJldiA9IDA7CkBAIC0xMjExLDggKzEyMDcsNyBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzKSk7CiAJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIGlyLCB0eF9zX3BhcmFtZXRlcnMsICZkZWZhdWx0X3BhcmFtcyk7CiAJfSBlbHNlIHsKLQkJa2ZpZm9fZnJlZShzdGF0ZS0+cnhfa2ZpZm8pOwotCQlrZmlmb19mcmVlKHN0YXRlLT50eF9rZmlmbyk7CisJCWtmaWZvX2ZyZWUoJnN0YXRlLT5yeF9rZmlmbyk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xMjMxLDggKzEyMjYsNyBAQAogCiAJc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCWtmaWZvX2ZyZWUoc3RhdGUtPnJ4X2tmaWZvKTsKLQlrZmlmb19mcmVlKHN0YXRlLT50eF9rZmlmbyk7CisJa2ZpZm9fZnJlZSgmc3RhdGUtPnJ4X2tmaWZvKTsKIAlrZnJlZShzdGF0ZSk7CiAJLyogTm90aGluZyBtb3JlIHRvIGZyZWUoKSBhcyBzdGF0ZSBoZWxkIHRoZSBhY3R1YWwgdjRsMl9zdWJkZXYgb2JqZWN0ICovCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCmluZGV4IDZmZmE2NGMuLmI0MjE4NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCkBAIC04MDAsOCArODAwLDggQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJaWYgKG1leWUubWNoaXBfbW9kZSA9PSBNQ0hJUF9ISUNfTU9ERV9DT05UX09VVCkgewotCQlpZiAoa2ZpZm9fZ2V0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAotCQkJICAgICAgc2l6ZW9mKGludCkpICE9IHNpemVvZihpbnQpKSB7CisJCWlmIChrZmlmb19vdXRfbG9ja2VkKCZtZXllLmdyYWJxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwKKwkJCSAgICAgIHNpemVvZihpbnQpLCAmbWV5ZS5ncmFicV9sb2NrKSAhPSBzaXplb2YoaW50KSkgewogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9CkBAIC04MTEsNyArODExLDggQEAKIAkJbWV5ZS5ncmFiX2J1ZmZlcltyZXFucl0uc3RhdGUgPSBNRVlFX0JVRl9ET05FOwogCQlkb19nZXR0aW1lb2ZkYXkoJm1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnRpbWVzdGFtcCk7CiAJCW1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnNlcXVlbmNlID0gc2VxdWVuY2UrKzsKLQkJa2ZpZm9fcHV0KG1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLCBzaXplb2YoaW50KSk7CisJCWtmaWZvX2luX2xvY2tlZCgmbWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCisJCQkJc2l6ZW9mKGludCksICZtZXllLmRvbmVxX2xvY2spOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1leWUucHJvY19saXN0KTsKIAl9IGVsc2UgewogCQlpbnQgc2l6ZTsKQEAgLTgyMCw4ICs4MjEsOCBAQAogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJZ290byBhZ2FpbjsKIAkJfQotCQlpZiAoa2ZpZm9fZ2V0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAotCQkJICAgICAgc2l6ZW9mKGludCkpICE9IHNpemVvZihpbnQpKSB7CisJCWlmIChrZmlmb19vdXRfbG9ja2VkKCZtZXllLmdyYWJxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwKKwkJCSAgICAgIHNpemVvZihpbnQpLCAmbWV5ZS5ncmFicV9sb2NrKSAhPSBzaXplb2YoaW50KSkgewogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJZ290byBhZ2FpbjsKIAkJfQpAQCAtODMxLDcgKzgzMiw4IEBACiAJCW1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnN0YXRlID0gTUVZRV9CVUZfRE9ORTsKIAkJZG9fZ2V0dGltZW9mZGF5KCZtZXllLmdyYWJfYnVmZmVyW3JlcW5yXS50aW1lc3RhbXApOwogCQltZXllLmdyYWJfYnVmZmVyW3JlcW5yXS5zZXF1ZW5jZSA9IHNlcXVlbmNlKys7Ci0JCWtmaWZvX3B1dChtZXllLmRvbmVxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwgc2l6ZW9mKGludCkpOworCQlrZmlmb19pbl9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAorCQkJCXNpemVvZihpbnQpLCAmbWV5ZS5kb25lcV9sb2NrKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZtZXllLnByb2NfbGlzdCk7CiAJfQogCW1jaGlwX2ZyZWVfZnJhbWUoKTsKQEAgLTg1OSw4ICs4NjEsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IE1FWUVfTUFYX0JVRk5CUlM7IGkrKykKIAkJbWV5ZS5ncmFiX2J1ZmZlcltpXS5zdGF0ZSA9IE1FWUVfQlVGX1VOVVNFRDsKLQlrZmlmb19yZXNldChtZXllLmdyYWJxKTsKLQlrZmlmb19yZXNldChtZXllLmRvbmVxKTsKKwlrZmlmb19yZXNldCgmbWV5ZS5ncmFicSk7CisJa2ZpZm9fcmVzZXQoJm1leWUuZG9uZXEpOwogCXJldHVybiAwOwogfQogCkBAIC05MzMsNyArOTM1LDggQEAKIAkJbWNoaXBfY29udF9jb21wcmVzc2lvbl9zdGFydCgpOwogCiAJbWV5ZS5ncmFiX2J1ZmZlclsqbmJdLnN0YXRlID0gTUVZRV9CVUZfVVNJTkc7Ci0Ja2ZpZm9fcHV0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopbmIsIHNpemVvZihpbnQpKTsKKwlrZmlmb19pbl9sb2NrZWQoJm1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopbmIsIHNpemVvZihpbnQpLAorCQkJICZtZXllLmdyYWJxX2xvY2spOwogCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtOTY1LDcgKzk2OCw5IEBACiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgTUVZRV9CVUZfRE9ORToKIAkJbWV5ZS5ncmFiX2J1ZmZlclsqaV0uc3RhdGUgPSBNRVlFX0JVRl9VTlVTRUQ7Ci0JCWtmaWZvX2dldChtZXllLmRvbmVxLCAodW5zaWduZWQgY2hhciAqKSZ1bnVzZWQsIHNpemVvZihpbnQpKTsKKwkJaWYgKGtmaWZvX291dF9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnVudXNlZCwKKwkJCQlzaXplb2YoaW50KSwgJm1leWUuZG9uZXFfbG9jaykgIT0gc2l6ZW9mKGludCkpCisJCQkJCWJyZWFrOwogCX0KIAkqaSA9IG1leWUuZ3JhYl9idWZmZXJbKmldLnNpemU7CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwpAQCAtMTQ1Miw3ICsxNDU3LDggQEAKIAlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOwogCWJ1Zi0+ZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfRE9ORTsKIAltZXllLmdyYWJfYnVmZmVyW2J1Zi0+aW5kZXhdLnN0YXRlID0gTUVZRV9CVUZfVVNJTkc7Ci0Ja2ZpZm9fcHV0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJmJ1Zi0+aW5kZXgsIHNpemVvZihpbnQpKTsKKwlrZmlmb19pbl9sb2NrZWQoJm1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJmJ1Zi0+aW5kZXgsCisJCQlzaXplb2YoaW50KSwgJm1leWUuZ3JhYnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0xNDY3LDE5ICsxNDczLDE5IEBACiAKIAltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCi0JaWYgKGtmaWZvX2xlbihtZXllLmRvbmVxKSA9PSAwICYmIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJaWYgKGtmaWZvX2xlbigmbWV5ZS5kb25lcSkgPT0gMCAmJiBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobWV5ZS5wcm9jX2xpc3QsCi0JCQkJICAgICBrZmlmb19sZW4obWV5ZS5kb25lcSkgIT0gMCkgPCAwKSB7CisJCQkJICAgICBrZmlmb19sZW4oJm1leWUuZG9uZXEpICE9IDApIDwgMCkgewogCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQogCi0JaWYgKCFrZmlmb19nZXQobWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCi0JCSAgICAgICBzaXplb2YoaW50KSkpIHsKKwlpZiAoIWtmaWZvX291dF9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAorCQkgICAgICAgc2l6ZW9mKGludCksICZtZXllLmRvbmVxX2xvY2spKSB7CiAJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0xNTI5LDggKzE1MzUsOCBAQAogewogCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJbWNoaXBfaGljX3N0b3AoKTsKLQlrZmlmb19yZXNldChtZXllLmdyYWJxKTsKLQlrZmlmb19yZXNldChtZXllLmRvbmVxKTsKKwlrZmlmb19yZXNldCgmbWV5ZS5ncmFicSk7CisJa2ZpZm9fcmVzZXQoJm1leWUuZG9uZXEpOwogCiAJZm9yIChpID0gMDsgaSA8IE1FWUVfTUFYX0JVRk5CUlM7IGkrKykKIAkJbWV5ZS5ncmFiX2J1ZmZlcltpXS5zdGF0ZSA9IE1FWUVfQlVGX1VOVVNFRDsKQEAgLTE1NzIsNyArMTU3OCw3IEBACiAKIAltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCXBvbGxfd2FpdChmaWxlLCAmbWV5ZS5wcm9jX2xpc3QsIHdhaXQpOwotCWlmIChrZmlmb19sZW4obWV5ZS5kb25lcSkpCisJaWYgKGtmaWZvX2xlbigmbWV5ZS5kb25lcSkpCiAJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCXJldHVybiByZXM7CkBAIC0xNzQ1LDE2ICsxNzUxLDE0IEBACiAJfQogCiAJc3Bpbl9sb2NrX2luaXQoJm1leWUuZ3JhYnFfbG9jayk7Ci0JbWV5ZS5ncmFicSA9IGtmaWZvX2FsbG9jKHNpemVvZihpbnQpICogTUVZRV9NQVhfQlVGTkJSUywgR0ZQX0tFUk5FTCwKLQkJCQkgJm1leWUuZ3JhYnFfbG9jayk7Ci0JaWYgKElTX0VSUihtZXllLmdyYWJxKSkgeworCWlmIChrZmlmb19hbGxvYygmbWV5ZS5ncmFicSwgc2l6ZW9mKGludCkgKiBNRVlFX01BWF9CVUZOQlJTLAorCQkJCUdGUF9LRVJORUwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWV5ZTogZmlmbyBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0a2ZpZm9hbGxvYzE7CiAJfQogCXNwaW5fbG9ja19pbml0KCZtZXllLmRvbmVxX2xvY2spOwotCW1leWUuZG9uZXEgPSBrZmlmb19hbGxvYyhzaXplb2YoaW50KSAqIE1FWUVfTUFYX0JVRk5CUlMsIEdGUF9LRVJORUwsCi0JCQkJICZtZXllLmRvbmVxX2xvY2spOwotCWlmIChJU19FUlIobWV5ZS5kb25lcSkpIHsKKwlpZiAoa2ZpZm9fYWxsb2MoJm1leWUuZG9uZXEsIHNpemVvZihpbnQpICogTUVZRV9NQVhfQlVGTkJSUywKKwkJCQlHRlBfS0VSTkVMKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1leWU6IGZpZm8gYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIG91dGtmaWZvYWxsb2MyOwogCX0KQEAgLTE4NjgsOSArMTg3Miw5IEBACiBvdXRlbmFibGVkZXY6CiAJc29ueV9waWNfY2FtZXJhX2NvbW1hbmQoU09OWV9QSUNfQ09NTUFORF9TRVRDQU1FUkEsIDApOwogb3V0c29ueXBpZW5hYmxlOgotCWtmaWZvX2ZyZWUobWV5ZS5kb25lcSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5kb25lcSk7CiBvdXRrZmlmb2FsbG9jMjoKLQlrZmlmb19mcmVlKG1leWUuZ3JhYnEpOworCWtmaWZvX2ZyZWUoJm1leWUuZ3JhYnEpOwogb3V0a2ZpZm9hbGxvYzE6CiAJdmZyZWUobWV5ZS5ncmFiX3RlbXApOwogb3V0dm1hbGxvYzoKQEAgLTE5MDEsOCArMTkwNSw4IEBACiAKIAlzb255X3BpY19jYW1lcmFfY29tbWFuZChTT05ZX1BJQ19DT01NQU5EX1NFVENBTUVSQSwgMCk7CiAKLQlrZmlmb19mcmVlKG1leWUuZG9uZXEpOwotCWtmaWZvX2ZyZWUobWV5ZS5ncmFicSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5kb25lcSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5ncmFicSk7CiAKIAl2ZnJlZShtZXllLmdyYWJfdGVtcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKaW5kZXggNWY3MGExMC4uMTMyMWFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKQEAgLTMwMyw5ICszMDMsOSBAQAogCXN0cnVjdCBtZXllX2dyYWJfYnVmZmVyIGdyYWJfYnVmZmVyW01FWUVfTUFYX0JVRk5CUlNdOwogCWludCB2bWFfdXNlX2NvdW50W01FWUVfTUFYX0JVRk5CUlNdOyAvKiBtbWFwIGNvdW50ICovCiAJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBtdXRleCBmb3Igb3Blbi9tbWFwLi4uICovCi0Jc3RydWN0IGtmaWZvICpncmFicTsJCS8qIHF1ZXVlIGZvciBidWZmZXJzIHRvIGJlIGdyYWJiZWQgKi8KKwlzdHJ1Y3Qga2ZpZm8gZ3JhYnE7CQkvKiBxdWV1ZSBmb3IgYnVmZmVycyB0byBiZSBncmFiYmVkICovCiAJc3BpbmxvY2tfdCBncmFicV9sb2NrOwkJLyogbG9jayBwcm90ZWN0aW5nIHRoZSBxdWV1ZSAqLwotCXN0cnVjdCBrZmlmbyAqZG9uZXE7CQkvKiBxdWV1ZSBmb3IgZ3JhYmJlZCBidWZmZXJzICovCisJc3RydWN0IGtmaWZvIGRvbmVxOwkJLyogcXVldWUgZm9yIGdyYWJiZWQgYnVmZmVycyAqLwogCXNwaW5sb2NrX3QgZG9uZXFfbG9jazsJCS8qIGxvY2sgcHJvdGVjdGluZyB0aGUgcXVldWUgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBwcm9jX2xpc3Q7CS8qIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CS8qIHZpZGVvIGRldmljZSBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCmluZGV4IGVmYmE3MDIuLjNkNWY0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCkBAIC00MCw4ICs0MCw3IEBACiAKICNkZWZpbmUgU0dfVEFCTEVTSVpFCQkzMAogCi1zdGF0aWMgaW50IGkyb19jZmdfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKLQkJCSB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBsb25nIGkyb19jZmdfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAogc3RhdGljIHNwaW5sb2NrX3QgaTJvX2NvbmZpZ19sb2NrOwogCkBAIC03NTEsNyArNzUwLDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJMk9HRVRJT1BTOgotCQlyZXQgPSBpMm9fY2ZnX2lvY3RsKE5VTEwsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcmV0ID0gaTJvX2NmZ19pb2N0bChmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgSTJPUEFTU1RIUlUzMjoKIAkJcmV0ID0gaTJvX2NmZ19wYXNzdGhydTMyKGZpbGUsIGNtZCwgYXJnKTsKQEAgLTk4NCwxMSArOTgzLDExIEBACiAvKgogICogSU9DVEwgSGFuZGxlcgogICovCi1zdGF0aWMgaW50IGkyb19jZmdfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgaTJvX2NmZ19pb2N0bChzdHJ1Y3QgZmlsZSAqZnAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCByZXQ7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJMk9HRVRJT1BTOgogCQlyZXQgPSBpMm9fY2ZnX2dldGlvcHMoYXJnKTsKQEAgLTEwNDQsNyArMTA0Myw3IEBACiAJCW9zbV9kZWJ1ZygidW5rbm93biBpb2N0bCBjYWxsZWQhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTExOCw3ICsxMTE3LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCi0JLmlvY3RsID0gaTJvX2NmZ19pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBpMm9fY2ZnX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0gaTJvX2NmZ19jb21wYXRfaW9jdGwsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtaXJxLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWlycS5jCmluZGV4IDIwZDI5YmEuLjlkZjlhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtaXJxLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1pcnEuYwpAQCAtNTY4LDEyICs1NjgsMTIgQEAKIAogCQlieXRlc1tieXRlXSAmPSB+KDB4MDMgPDwgb2ZmKTsKIAotCQlzcGluX2xvY2tfaXJxKCZkLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9ja19pcnEoJmQtPmxvY2spOwogCQlpZiAoZC0+c3RhdHVzICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCiAJCQlieXRlc1tieXRlXSB8PSBCSVQob2ZmICsgMSk7CiAJCWlmIChkLT5zdGF0dXMgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCiAJCQlieXRlc1tieXRlXSB8PSBCSVQob2ZmICsgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmZC0+bG9jayk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJmQtPmxvY2spOwogCiAJCWVkZ2VfY2hhbmdlICY9IH5CSVQoaSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDcuYyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKaW5kZXggZmJjMjMxMS4uNzdjZjA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDcuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNy5jCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTczNCw4ICs3MzUsNyBAQAogCW1lbWNweV90b2lvKGxwLT5iYXNlLCBpbml0X3dvcmRzICsgNSwgc2l6ZW9mKGluaXRfd29yZHMpIC0gMTApOwogCiAJLyogRmlsbCBpbiB0aGUgc3RhdGlvbiBhZGRyZXNzLiAqLwotCW1lbWNweV90b2lvKGxwLT5iYXNlK1NBX09GRlNFVCwgZGV2LT5kZXZfYWRkciwKLQkJICAgc2l6ZW9mKGRldi0+ZGV2X2FkZHIpKTsKKwltZW1jcHlfdG9pbyhscC0+YmFzZStTQV9PRkZTRVQsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogCS8qIFRoZSBUeC1ibG9jayBsaXN0IGlzIHdyaXR0ZW4gYXMgbmVlZGVkLiAgV2UganVzdCBzZXQgdXAgdGhlIHZhbHVlcy4gKi8KIAlscC0+dHhfY21kX2xpbmsgPSBJRExFTE9PUCArIDQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBlNThhNjUzLi5kZDlhMDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTIzNDYsNiArMjM0Niw3IEBACiAKIGNvbmZpZyBHRUxJQ19XSVJFTEVTUwogCWJvb2wgIlBTMyBXaXJlbGVzcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gV0xBTgogCWRlcGVuZHMgb24gR0VMSUNfTkVUCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCWhlbHAKQEAgLTIzNTgsNiArMjM1OSw3IEBACiBjb25maWcgR0VMSUNfV0lSRUxFU1NfT0xEX1BTS19JTlRFUkZBQ0UKICAgICAgICBib29sICJQUzMgV2lyZWxlc3MgcHJpdmF0ZSBQU0sgaW50ZXJmYWNlIChPQlNPTEVURSkiCiAgICAgICAgZGVwZW5kcyBvbiBHRUxJQ19XSVJFTEVTUworICAgICAgIHNlbGVjdCBXRVhUX1BSSVYKICAgICAgICBoZWxwCiAgICAgICAgICAgVGhpcyBvcHRpb24gcmV0YWlucyB0aGUgb2Jzb2xldGUgcHJpdmF0ZSBpbnRlcmZhY2UgdG8gcGFzcwogICAgICAgICAgIHRoZSBQU0sgZnJvbSB1c2VyIHNwYWNlIHByb2dyYW1zIHRvIHRoZSBkcml2ZXIuICBUaGUgUFNLCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCmluZGV4IGMzN2VlOWUuLjM5ZTFjMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCkBAIC02OCw2ICs2OCw3IEBACiAJdHJpc3RhdGUgIk51dm90b24gdzkwcDkxMCBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfVzkwWDkwMAogCXNlbGVjdCBQSFlMSUIKKwlzZWxlY3QgTUlJCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYnVpbHQtaW4gRXRoZXJuZXQgcG9ydHMKIAkgIG9uIHc5MHA5MTAgcHJvY2Vzc29yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggOWU1NjAxNC4uOWZkOGU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0yNzUsNiArMjc1LDcgQEAKIAl1MzIgdHhfZmM7CQkvKiBUeCBmbG93IGNvbnRyb2wgKi8KIAlpbnQgbGlua19zcGVlZDsKIAl1OCBwb3J0X3R5cGU7CisJdTggdHJhbnNjZWl2ZXI7CiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IDFiNjhiZDkuLjEwMmFkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKQEAgLTE0NzksNiArMTQ3OSw0MSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBiZV9jbWRfc2V0X2xvb3BiYWNrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0X251bSwKKwkJCXU4IGxvb3BiYWNrX3R5cGUsIHU4IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBiZV9jbWRfcmVxX3NldF9sbW9kZSAqcmVxOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKworCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJaWYgKCF3cmIpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDAsCisJCQkJT1BDT0RFX0xPV0xFVkVMX1NFVF9MT09QQkFDS19NT0RFKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fTE9XTEVWRUwsCisJCQlPUENPREVfTE9XTEVWRUxfU0VUX0xPT1BCQUNLX01PREUsCisJCQlzaXplb2YoKnJlcSkpOworCisJcmVxLT5zcmNfcG9ydCA9IHBvcnRfbnVtOworCXJlcS0+ZGVzdF9wb3J0ID0gcG9ydF9udW07CisJcmVxLT5sb29wYmFja190eXBlID0gbG9vcGJhY2tfdHlwZTsKKwlyZXEtPmxvb3BiYWNrX3N0YXRlID0gZW5hYmxlOworCisJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOworZXJyOgorCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwogaW50IGJlX2NtZF9sb29wYmFja190ZXN0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgcG9ydF9udW0sCiAJCXUzMiBsb29wYmFja190eXBlLCB1MzIgcGt0X3NpemUsIHUzMiBudW1fcGt0cywgdTY0IHBhdHRlcm4pCiB7CkBAIC0xNTAxLDYgKzE1MzYsNyBAQAogCiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9MT1dMRVZFTCwKIAkJCU9QQ09ERV9MT1dMRVZFTF9MT09QQkFDS19URVNULCBzaXplb2YoKnJlcSkpOworCXJlcS0+aGRyLnRpbWVvdXQgPSA0OwogCiAJcmVxLT5wYXR0ZXJuID0gY3B1X3RvX2xlNjQocGF0dGVybik7CiAJcmVxLT5zcmNfcG9ydCA9IGNwdV90b19sZTMyKHBvcnRfbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAppbmRleCA5MmI4N2VmLi5jMDAyYjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCkBAIC0xNTUsNiArMTU1LDcgQEAKIAogI2RlZmluZSBPUENPREVfTE9XTEVWRUxfSE9TVF9ERFJfRE1BICAgICAgICAgICAgICAgICAgICAxNwogI2RlZmluZSBPUENPREVfTE9XTEVWRUxfTE9PUEJBQ0tfVEVTVCAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBPUENPREVfTE9XTEVWRUxfU0VUX0xPT1BCQUNLX01PREUJCTE5CiAKIHN0cnVjdCBiZV9jbWRfcmVxX2hkciB7CiAJdTggb3Bjb2RlOwkJLyogZHdvcmQgMCAqLwpAQCAtODIxLDYgKzgyMiwxOSBAQAogCXUzMiAgICB0aWNrc19jb21wbDsKIH07CiAKK3N0cnVjdCBiZV9jbWRfcmVxX3NldF9sbW9kZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCBzcmNfcG9ydDsKKwl1OCBkZXN0X3BvcnQ7CisJdTggbG9vcGJhY2tfdHlwZTsKKwl1OCBsb29wYmFja19zdGF0ZTsKK307CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9zZXRfbG1vZGUgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgcmVzcF9oZHI7CisJdTggcnN2ZDBbNF07Cit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKiBERFIgRE1BIHRlc3QgKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGJlX2NtZF9yZXFfZGRyZG1hX3Rlc3QgewogCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CkBAIC05MTIsMyArOTI2LDUgQEAKIAkJCQl1MzIgbnVtX3BrdHMsIHU2NCBwYXR0ZXJuKTsKIGV4dGVybiBpbnQgYmVfY21kX2Rkcl9kbWFfdGVzdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTY0IHBhdHRlcm4sCiAJCQl1MzIgYnl0ZV9jbnQsIHN0cnVjdCBiZV9kbWFfbWVtICpjbWQpOworZXh0ZXJuIGludCBiZV9jbWRfc2V0X2xvb3BiYWNrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0X251bSwKKwkJCQl1OCBsb29wYmFja190eXBlLCB1OCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCmluZGV4IDI5OGI5MmMuLjVkMDAxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKQEAgLTExOCw2ICsxMTgsNyBAQAogI2RlZmluZSBCRV9NQUNfTE9PUEJBQ0sgMHgwCiAjZGVmaW5lIEJFX1BIWV9MT09QQkFDSyAweDEKICNkZWZpbmUgQkVfT05FX1BPUlRfRVhUX0xPT1BCQUNLIDB4MgorI2RlZmluZSBCRV9OT19MT09QQkFDSyAweGZmCiAKIHN0YXRpYyB2b2lkCiBiZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQpAQCAtMzM5LDI4ICszNDAsNTAgQEAKIAogCQlzdGF0dXMgPSBiZV9jbWRfcmVhZF9wb3J0X3R5cGUoYWRhcHRlciwgYWRhcHRlci0+cG9ydF9udW0sCiAJCQkJCQkmY29ubmVjdG9yKTsKLQkJc3dpdGNoIChjb25uZWN0b3IpIHsKLQkJY2FzZSA3OgotCQkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwotCQkJYnJlYWs7CisJCWlmICghc3RhdHVzKSB7CisJCQlzd2l0Y2ggKGNvbm5lY3RvcikgeworCQkJY2FzZSA3OgorCQkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKKwkJCQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCQkJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX0FVSTsKKwkJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAkJfQogCiAJCS8qIFNhdmUgZm9yIGZ1dHVyZSB1c2UgKi8KIAkJYWRhcHRlci0+bGlua19zcGVlZCA9IGVjbWQtPnNwZWVkOwogCQlhZGFwdGVyLT5wb3J0X3R5cGUgPSBlY21kLT5wb3J0OworCQlhZGFwdGVyLT50cmFuc2NlaXZlciA9IGVjbWQtPnRyYW5zY2VpdmVyOwogCX0gZWxzZSB7CiAJCWVjbWQtPnNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKIAkJZWNtZC0+cG9ydCA9IGFkYXB0ZXItPnBvcnRfdHlwZTsKKwkJZWNtZC0+dHJhbnNjZWl2ZXIgPSBhZGFwdGVyLT50cmFuc2NlaXZlcjsKIAl9CiAKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX1RQKTsKIAllY21kLT5waHlfYWRkcmVzcyA9IGFkYXB0ZXItPnBvcnRfbnVtOwotCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwlzd2l0Y2ggKGVjbWQtPnBvcnQpIHsKKwljYXNlIFBPUlRfRklCUkU6CisJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwkJYnJlYWs7CisJY2FzZSBQT1JUX1RQOgorCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9UUCk7CisJCWJyZWFrOworCWNhc2UgUE9SVF9BVUk6CisJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0FVSSk7CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNDg5LDYgKzUxMiwxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1NjQgYmVfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggbG9vcGJhY2tfdHlwZSwKKwkJCQl1NjQgKnN0YXR1cykKK3sKKwliZV9jbWRfc2V0X2xvb3BiYWNrKGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLAorCQkJCWxvb3BiYWNrX3R5cGUsIDEpOworCSpzdGF0dXMgPSBiZV9jbWRfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwKKwkJCQlsb29wYmFja190eXBlLCAxNTAwLAorCQkJCTIsIDB4YWJjKTsKKwliZV9jbWRfc2V0X2xvb3BiYWNrKGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLAorCQkJCUJFX05PX0xPT1BCQUNLLCAxKTsKKwlyZXR1cm4gKnN0YXR1czsKK30KKwogc3RhdGljIHZvaWQKIGJlX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF90ZXN0ICp0ZXN0LCB1NjQgKmRhdGEpCiB7CkBAIC00OTcsMjMgKzUzMywxOCBAQAogCW1lbXNldChkYXRhLCAwLCBzaXplb2YodTY0KSAqIEVUSFRPT0xfVEVTVFNfTlVNKTsKIAogCWlmICh0ZXN0LT5mbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKLQkJZGF0YVswXSA9IGJlX2NtZF9sb29wYmFja190ZXN0KGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLAotCQkJCQkJQkVfTUFDX0xPT1BCQUNLLCAxNTAwLAotCQkJCQkJMiwgMHhhYmMpOwotCQlpZiAoZGF0YVswXSAhPSAwKQorCQlpZiAoYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBCRV9NQUNfTE9PUEJBQ0ssCisJCQkJCQkmZGF0YVswXSkgIT0gMCkgewogCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCi0JCWRhdGFbMV0gPSBiZV9jbWRfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwKLQkJCQkJCUJFX1BIWV9MT09QQkFDSywgMTUwMCwKLQkJCQkJCTIsIDB4YWJjKTsKLQkJaWYgKGRhdGFbMV0gIT0gMCkKKwkJfQorCQlpZiAoYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBCRV9QSFlfTE9PUEJBQ0ssCisJCQkJCQkmZGF0YVsxXSkgIT0gMCkgewogCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCi0JCWRhdGFbMl0gPSBiZV9jbWRfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwKLQkJCQkJCUJFX09ORV9QT1JUX0VYVF9MT09QQkFDSywKLQkJCQkJCTE1MDAsIDIsIDB4YWJjKTsKLQkJaWYgKGRhdGFbMl0gIT0gMCkKKwkJfQorCQlpZiAoYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBCRV9PTkVfUE9SVF9FWFRfTE9PUEJBQ0ssCisJCQkJCQkmZGF0YVsyXSkgIT0gMCkgewogCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCQl9CiAKIAkJZGF0YVszXSA9IGJlX3Rlc3RfZGRyX2RtYShhZGFwdGVyKTsKIAkJaWYgKGRhdGFbM10gIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCA0YmZjODA4Li42NWRmMWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC02NTMsMTIgKzY1MywyMCBAQAogYm54Ml9uZXRpZl9zdG9wKHN0cnVjdCBibngyICpicCkKIHsKIAlibngyX2NuaWNfc3RvcChicCk7Ci0JYm54Ml9kaXNhYmxlX2ludF9zeW5jKGJwKTsKIAlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgeworCQlpbnQgaTsKKwogCQlibngyX25hcGlfZGlzYWJsZShicCk7CiAJCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7Ci0JCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCisJCS8qIHByZXZlbnQgdHggdGltZW91dCAqLworCQlmb3IgKGkgPSAwOyBpIDwgIGJwLT5kZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCisJCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGJwLT5kZXYsIGkpOworCQkJdHhxLT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCX0KIAl9CisJYm54Ml9kaXNhYmxlX2ludF9zeW5jKGJwKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwppbmRleCA3N2JhMTM1Li4zMDZjMmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCkBAIC03NTkzLDYgKzc1OTMsOCBAQAogCQlpZiAoYnAtPmNuaWNfZXRoX2Rldi5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9SRUdEKSB7CiAJCQlibngyeF9zZXRfaXNjc2lfZXRoX21hY19hZGRyKGJwLCAxKTsKIAkJCWJwLT5jbmljX2ZsYWdzIHw9IEJOWDJYX0NOSUNfRkxBR19NQUNfU0VUOworCQkJYm54MnhfaW5pdF9zYihicCwgYnAtPmNuaWNfc2IsIGJwLT5jbmljX3NiX21hcHBpbmcsCisJCQkJICAgICAgQ05JQ19TQl9JRChicCkpOwogCQl9CiAJCW11dGV4X3VubG9jaygmYnAtPmNuaWNfbXV0ZXgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggMGZiN2E0OS4uODIyZjU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMTU4MCw3ICsxNTgwLDcgQEAKIAkJLy8gY2hlY2sgaWYgYW55IHBhcnRuZXIgcmVwbHlzCiAJCWlmIChiZXN0LT5pc19pbmRpdmlkdWFsKSB7CiAJCQlwcl93YXJuaW5nKCIlczogV2FybmluZzogTm8gODAyLjNhZCByZXNwb25zZSBmcm9tIHRoZSBsaW5rIHBhcnRuZXIgZm9yIGFueSBhZGFwdGVycyBpbiB0aGUgYm9uZFxuIiwKLQkJCQkgICBiZXN0LT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOworCQkJCSAgIGJlc3QtPnNsYXZlID8gYmVzdC0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lIDogIk5VTEwiKTsKIAkJfQogCiAJCWJlc3QtPmlzX2FjdGl2ZSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCmluZGV4IGQwZWMxNzguLjE2NmNjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghcmVzIHx8ICFpcnEpIHsKKwlpZiAoIXJlcyB8fCBpcnEgPD0gMCkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGV4aXRfcHV0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKaW5kZXggOGVkYWM4OS4uMzRlMDMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKQEAgLTIyNzIsNyArMjI3Miw3IEBACiAJdW5zaWduZWQgaW50IGNsa19kaXY7CiAJaW50IG1kaW9fYnVzX2ZyZXEgPSBlbWFjX2J1c19mcmVxdWVuY3k7CiAKLQlpZiAobWRpb19tYXhfZnJlcSAmIG1kaW9fYnVzX2ZyZXEpCisJaWYgKG1kaW9fbWF4X2ZyZXEgJiYgbWRpb19idXNfZnJlcSkKIAkJY2xrX2RpdiA9ICgobWRpb19idXNfZnJlcSAvIG1kaW9fbWF4X2ZyZXEpIC0gMSk7CiAJZWxzZQogCQljbGtfZGl2ID0gMHhGRjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCA5Mjk3MDFjLi44MzlmYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0xODI5LDYgKzE4MjksNyBAQAogCQkJCSAgJm5pYy0+Y2JzX2RtYV9hZGRyKTsKIAlpZiAoIW5pYy0+Y2JzKQogCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobmljLT5jYnMsIDAsIGNvdW50ICogc2l6ZW9mKHN0cnVjdCBjYikpOwogCiAJZm9yIChjYiA9IG5pYy0+Y2JzLCBpID0gMDsgaSA8IGNvdW50OyBjYisrLCBpKyspIHsKIAkJY2ItPm5leHQgPSAoaSArIDEgPCBjb3VudCkgPyBjYiArIDEgOiBuaWMtPmNiczsKQEAgLTE4MzcsNyArMTgzOCw2IEBACiAJCWNiLT5kbWFfYWRkciA9IG5pYy0+Y2JzX2RtYV9hZGRyICsgaSAqIHNpemVvZihzdHJ1Y3QgY2IpOwogCQljYi0+bGluayA9IGNwdV90b19sZTMyKG5pYy0+Y2JzX2RtYV9hZGRyICsKIAkJCSgoaSsxKSAlIGNvdW50KSAqIHNpemVvZihzdHJ1Y3QgY2IpKTsKLQkJY2ItPnNrYiA9IE5VTEw7CiAJfQogCiAJbmljLT5jYl90b191c2UgPSBuaWMtPmNiX3RvX3NlbmQgPSBuaWMtPmNiX3RvX2NsZWFuID0gbmljLT5jYnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCmluZGV4IGMxYTQyY2YuLmI5Nzk0NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC0xMjkwLDcgKzEyOTAsNiBAQAogc3RhdGljIHMzMiBlMTAwMF9zZXR1cF9jb3BwZXJfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXUzMiBjdHJsOwotCXUzMiBsZWRfY3RybDsKIAlzMzIgcmV0X3ZhbDsKIAogCWN0cmwgPSBlcjMyKENUUkwpOwpAQCAtMTMwNSwxMSArMTMwNCw2IEBACiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfcGh5X2lncF8yOgogCQlyZXRfdmFsID0gZTEwMDBlX2NvcHBlcl9saW5rX3NldHVwX2lncChodyk7Ci0JCS8qIFNldHVwIGFjdGl2aXR5IExFRCAqLwotCQlsZWRfY3RybCA9IGVyMzIoTEVEQ1RMKTsKLQkJbGVkX2N0cmwgJj0gSUdQX0FDVElWSVRZX0xFRF9NQVNLOwotCQlsZWRfY3RybCB8PSAoSUdQX0FDVElWSVRZX0xFRF9FTkFCTEUgfCBJR1BfTEVEM19NT0RFKTsKLQkJZXczMihMRURDVEwsIGxlZF9jdHJsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDY4NTBkYzAuLjhiZDNjOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTE0Myw3ICsxNDMsNiBAQAogc3RhdGljIHZvaWQgZ2Zhcl9jbGVhcl9leGFjdF9tYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLCB1OCAqYWRkcik7CiBzdGF0aWMgaW50IGdmYXJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci11MTYgZ2Zhcl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIE1PRFVMRV9BVVRIT1IoIkZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIiKTsKQEAgLTM1Nyw4ICszNTYsMTEgQEAKIAkvKiBDb25maWd1cmUgdGhlIGNvYWxlc2Npbmcgc3VwcG9ydCAqLwogCWdmYXJfY29uZmlndXJlX2NvYWxlc2NpbmcocHJpdiwgMHhGRiwgMHhGRik7CiAKLQlpZiAocHJpdi0+cnhfZmlsZXJfZW5hYmxlKQorCWlmIChwcml2LT5yeF9maWxlcl9lbmFibGUpIHsKIAkJcmN0cmwgfD0gUkNUUkxfRklMUkVOOworCQkvKiBQcm9ncmFtIHRoZSBSSVIwIHJlZyB3aXRoIHRoZSByZXF1aXJlZCBkaXN0cmlidXRpb24gKi8KKwkJZ2Zhcl93cml0ZSgmcmVncy0+cmlyMCwgREVGQVVMVF9SSVIwKTsKKwl9CiAKIAlpZiAocHJpdi0+cnhfY3N1bV9lbmFibGUpCiAJCXJjdHJsIHw9IFJDVFJMX0NIRUNLU1VNTUlORzsKQEAgLTQxNCw2ICs0MTYsMzYgQEAKIAlnZmFyX3dyaXRlKCZyZWdzLT5maWZvX3R4X3N0YXJ2ZV9zaHV0b2ZmLCBwcml2LT5maWZvX3N0YXJ2ZV9vZmYpOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmdmYXJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0cyA9IDAsIHJ4X2J5dGVzID0gMCwgcnhfZHJvcHBlZCA9IDA7CisJdW5zaWduZWQgbG9uZyB0eF9wYWNrZXRzID0gMCwgdHhfYnl0ZXMgPSAwOworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJcnhfcGFja2V0cyArPSBwcml2LT5yeF9xdWV1ZVtpXS0+c3RhdHMucnhfcGFja2V0czsKKwkJcnhfYnl0ZXMgKz0gcHJpdi0+cnhfcXVldWVbaV0tPnN0YXRzLnJ4X2J5dGVzOworCQlyeF9kcm9wcGVkICs9IHByaXYtPnJ4X3F1ZXVlW2ldLT5zdGF0cy5yeF9kcm9wcGVkOworCX0KKworCWRldi0+c3RhdHMucnhfcGFja2V0cyA9IHJ4X3BhY2tldHM7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyA9IHJ4X2J5dGVzOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCA9IHJ4X2Ryb3BwZWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKKwkJdHhfYnl0ZXMgKz0gdHhxLT50eF9ieXRlczsKKwkJdHhfcGFja2V0cyArPSB0eHEtPnR4X3BhY2tldHM7CisJfQorCisJZGV2LT5zdGF0cy50eF9ieXRlcyA9IHR4X2J5dGVzOworCWRldi0+c3RhdHMudHhfcGFja2V0cyA9IHR4X3BhY2tldHM7CisKKwlyZXR1cm4gJmRldi0+c3RhdHM7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbiA9IGdmYXJfZW5ldF9vcGVuLAogCS5uZG9fc3RhcnRfeG1pdCA9IGdmYXJfc3RhcnRfeG1pdCwKQEAgLTQyMiw3ICs0NTQsNyBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2Zhcl9zZXRfbXVsdGksCiAJLm5kb190eF90aW1lb3V0ID0gZ2Zhcl90aW1lb3V0LAogCS5uZG9fZG9faW9jdGwgPSBnZmFyX2lvY3RsLAotCS5uZG9fc2VsZWN0X3F1ZXVlID0gZ2Zhcl9zZWxlY3RfcXVldWUsCisJLm5kb19nZXRfc3RhdHMgPSBnZmFyX2dldF9zdGF0cywKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgPSBnZmFyX3ZsYW5fcnhfcmVnaXN0ZXIsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyID0gZXRoX3ZhbGlkYXRlX2FkZHIsCkBAIC00NzIsMTAgKzUwNCw2IEBACiAJcmV0dXJuIHByaXYtPnZsZ3JwIHx8IHByaXYtPnJ4X2NzdW1fZW5hYmxlOwogfQogCi11MTYgZ2Zhcl9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci19CiBzdGF0aWMgdm9pZCBmcmVlX3R4X3BvaW50ZXJzKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IGkgPSAwOwpAQCAtMTAyMiw2ICsxMDUwLDkgQEAKIAkJcHJpdi0+cnhfcXVldWVbaV0tPnJ4aWMgPSBERUZBVUxUX1JYSUM7CiAJfQogCisJLyogZW5hYmxlIGZpbGVyIGlmIHVzaW5nIG11bHRpcGxlIFJYIHF1ZXVlcyovCisJaWYocHJpdi0+bnVtX3J4X3F1ZXVlcyA+IDEpCisJCXByaXYtPnJ4X2ZpbGVyX2VuYWJsZSA9IDE7CiAJLyogRW5hYmxlIG1vc3QgbWVzc2FnZXMgYnkgZGVmYXVsdCAqLwogCXByaXYtPm1zZ19lbmFibGUgPSAoTkVUSUZfTVNHX0lGVVAgPDwgMSApIC0gMTsKIApAQCAtMTkzNyw3ICsxOTY4LDggQEAKIAl9CiAKIAkvKiBVcGRhdGUgdHJhbnNtaXQgc3RhdHMgKi8KLQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCXR4cS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJdHhxLT50eF9wYWNrZXRzICsrOwogCiAJdHhiZHAgPSB0eGJkcF9zdGFydCA9IHR4X3F1ZXVlLT5jdXJfdHg7CiAKQEAgLTIyOTUsOCArMjMyNyw2IEBACiAJdHhfcXVldWUtPnNrYl9kaXJ0eXR4ID0gc2tiX2RpcnR5dHg7CiAJdHhfcXVldWUtPmRpcnR5X3R4ID0gYmRwOwogCi0JZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IGhvd21hbnk7Ci0KIAlyZXR1cm4gaG93bWFueTsKIH0KIApAQCAtMjQzNCwxMCArMjQ2NCwxMSBAQAogCWZjYiA9IChzdHJ1Y3QgcnhmY2IgKilza2ItPmRhdGE7CiAKIAkvKiBSZW1vdmUgdGhlIEZDQiBmcm9tIHRoZSBza2IgKi8KLQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBmY2ItPnJxKTsKIAkvKiBSZW1vdmUgdGhlIHBhZGRlZCBieXRlcywgaWYgdGhlcmUgYXJlIGFueSAqLwotCWlmIChhbW91bnRfcHVsbCkKKwlpZiAoYW1vdW50X3B1bGwpIHsKKwkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGZjYi0+cnEpOwogCQlza2JfcHVsbChza2IsIGFtb3VudF9wdWxsKTsKKwl9CiAKIAlpZiAocHJpdi0+cnhfY3N1bV9lbmFibGUpCiAJCWdmYXJfcnhfY2hlY2tzdW0oc2tiLCBmY2IpOwpAQCAtMjUxMCwyMiArMjU0MSwyMiBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJLyogSW5jcmVtZW50IHRoZSBudW1iZXIgb2YgcGFja2V0cyAqLwotCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlyeF9xdWV1ZS0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJaG93bWFueSsrOwogCiAJCQlpZiAobGlrZWx5KHNrYikpIHsKIAkJCQlwa3RfbGVuID0gYmRwLT5sZW5ndGggLSBFVEhfRkNTX0xFTjsKIAkJCQkvKiBSZW1vdmUgdGhlIEZDUyBmcm9tIHRoZSBwYWNrZXQgbGVuZ3RoICovCiAJCQkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwotCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKLQorCQkJCXJ4X3F1ZXVlLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9xdWV1ZS0+cWluZGV4KTsKIAkJCQlnZmFyX3Byb2Nlc3NfZnJhbWUoZGV2LCBza2IsIGFtb3VudF9wdWxsKTsKIAogCQkJfSBlbHNlIHsKIAkJCQlpZiAobmV0aWZfbXNnX3J4X2Vycihwcml2KSkKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCQkgICAgICAgIiVzOiBNaXNzaW5nIHNrYiFcbiIsIGRldi0+bmFtZSk7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJcnhfcXVldWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQlwcml2LT5leHRyYV9zdGF0cy5yeF9za2JtaXNzaW5nKys7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCBjYmI0NTEwLi4zZDcyZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC0zMzMsNyArMzMzLDcgQEAKICNkZWZpbmUgSU1BU0tfQlNZICAgICAgICAgICAgICAgMHgyMDAwMDAwMAogI2RlZmluZSBJTUFTS19FQkVSUiAgICAgICAgICAgICAweDEwMDAwMDAwCiAjZGVmaW5lIElNQVNLX01TUk8JCTB4MDQwMDAwMDAKLSNkZWZpbmUgSU1BU0tfR1JTQyAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBJTUFTS19HVFNDICAgICAgICAgICAgICAweDAyMDAwMDAwCiAjZGVmaW5lIElNQVNLX0JBQlQJCTB4MDEwMDAwMDAKICNkZWZpbmUgSU1BU0tfVFhDICAgICAgICAgICAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBJTUFTS19UWEVFTgkJMHgwMDQwMDAwMApAQCAtMzQ0LDcgKzM0NCw3IEBACiAjZGVmaW5lIElNQVNLX1hGVU4JCTB4MDAwMTAwMDAKICNkZWZpbmUgSU1BU0tfUlhCMCAgICAgICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBJTUFTS19NQUcJCTB4MDAwMDA4MDAKLSNkZWZpbmUgSU1BU0tfR1RTQyAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJTUFTS19HUlNDICAgICAgICAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lIElNQVNLX1JYRkVOMAkJMHgwMDAwMDA4MAogI2RlZmluZSBJTUFTS19GSVIJCTB4MDAwMDAwMDgKICNkZWZpbmUgSU1BU0tfRklRCQkweDAwMDAwMDA0CkBAIC00MDEsNiArNDAxLDEwIEBACiAjZGVmaW5lIEZQUl9GSUxFUl9NQVNLCTB4RkZGRkZGRkYKICNkZWZpbmUgTUFYX0ZJTEVSX0lEWAkweEZGCiAKKy8qIFRoaXMgZGVmYXVsdCBSSVIgdmFsdWUgZGlyZWN0bHkgY29ycmVzcG9uZHMKKyAqIHRvIHRoZSAzLWJpdCBoYXNoIHZhbHVlIGdlbmVyYXRlZCAqLworI2RlZmluZSBERUZBVUxUX1JJUjAJMHgwNTM5NzcwMAorCiAvKiBSUUZDUiByZWdpc3RlciBiaXRzICovCiAjZGVmaW5lIFJRRkNSX0dQSQkJMHg4MDAwMDAwMAogI2RlZmluZSBSUUZDUl9IQVNIVEJMX1EJCTB4MDAwMDAwMDAKQEAgLTkzNiw2ICs5NDAsMTUgQEAKIAl1bnNpZ25lZCBzaG9ydCB0eHRpbWU7CiB9OwogCisvKgorICogUGVyIFJYIHF1ZXVlIHN0YXRzCisgKi8KK3N0cnVjdCByeF9xX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIHJ4X3BhY2tldHM7CisJdW5zaWduZWQgbG9uZyByeF9ieXRlczsKKwl1bnNpZ25lZCBsb25nIHJ4X2Ryb3BwZWQ7Cit9OworCiAvKioKICAqCXN0cnVjdCBnZmFyX3ByaXZfcnhfcSAtIHBlciByeCBxdWV1ZSBzdHJ1Y3R1cmUKICAqCUByeGxvY2s6IHBlciBxdWV1ZSByeCBzcGluIGxvY2sKQEAgLTk1OCw2ICs5NzEsNyBAQAogCXN0cnVjdAlyeGJkOCAqY3VyX3J4OwogCXN0cnVjdAluZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGdmYXJfcHJpdl9ncnAgKmdycDsKKwlzdHJ1Y3QgcnhfcV9zdGF0cyBzdGF0czsKIAl1MTYJc2tiX2N1cnJ4OwogCXUxNglxaW5kZXg7CiAJdW5zaWduZWQgaW50CXJ4X3Jpbmdfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libWxhbmEuYyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwppbmRleCAwOTBhNmQzLi4wNTJjNzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCkBAIC04Nyw2ICs4Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCkBAIC05ODgsNyArOTg5LDcgQEAKIAogCS8qIGNvcHkgb3V0IE1BQyBhZGRyZXNzICovCiAKLQlmb3IgKHogPSAwOyB6IDwgc2l6ZW9mKGRldi0+ZGV2X2FkZHIpOyB6KyspCisJZm9yICh6ID0gMDsgeiA8IEVUSF9BTEVOOyB6KyspCiAJCWRldi0+ZGV2X2FkZHJbel0gPSBpbmIoZGV2LT5iYXNlX2FkZHIgKyBNQUNBRERSUFJPTSArIHopOwogCiAJLyogcHJpbnQgY29uZmlnICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCmluZGV4IGU4ZTllOTEuLmM1MDViNTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtMTA5Niw5ICsxMDk2LDcgQEAKIAkJaHdfZGJnKCJDb25maWd1cmluZyBBdXRvbmVnOlBDU19MQ1RMPTB4JTA4WFxuIiwgcmVnKTsKIAl9IGVsc2UgewogCQkvKiBTZXQgUENTIHJlZ2lzdGVyIGZvciBmb3JjZWQgbGluayAqLwotCQlyZWcgfD0gRTEwMDBfUENTX0xDVExfRlNEIHwgICAgICAgIC8qIEZvcmNlIFNwZWVkICovCi0JCSAgICAgICBFMTAwMF9QQ1NfTENUTF9GT1JDRV9MSU5LIHwgLyogRm9yY2UgTGluayAqLwotCQkgICAgICAgRTEwMDBfUENTX0xDVExfRkxWX0xJTktfVVA7IC8qIEZvcmNlIGxpbmsgdmFsdWUgdXAgKi8KKwkJcmVnIHw9IEUxMDAwX1BDU19MQ1RMX0ZTRDsgICAgICAgIC8qIEZvcmNlIFNwZWVkICovCiAKIAkJaHdfZGJnKCJDb25maWd1cmluZyBGb3JjZWQgTGluazpQQ1NfTENUTD0weCUwOFhcbiIsIHJlZyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IDVjOWQ3M2UuLjM2NzBhNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTQ1NywxNSArNDU3LDYgQEAKIAlwaHlfZGF0YSB8PSBJODI1ODBfQ0ZHX0VOQUJMRV9ET1dOU0hJRlQ7CiAKIAlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJODI1ODBfQ0ZHX1JFRywgcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQotCS8qIFNldCBudW1iZXIgb2YgbGluayBhdHRlbXB0cyBiZWZvcmUgZG93bnNoaWZ0ICovCi0JcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJODI1ODBfQ1RSTF9SRUcsICZwaHlfZGF0YSk7Ci0JaWYgKHJldF92YWwpCi0JCWdvdG8gb3V0OwotCXBoeV9kYXRhICY9IH5JODI1ODBfQ1RSTF9ET1dOU0hJRlRfTUFTSzsKLQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJODI1ODBfQ1RSTF9SRUcsIHBoeV9kYXRhKTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBhYzlkNTI3Li5mNzcxYTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMTc5NSw3ICsxNzk1LDcgQEAKIAkJLyogZHVhbCBwb3J0IGNhcmRzIG9ubHkgc3VwcG9ydCBXb0wgb24gcG9ydCBBIGZyb20gbm93IG9uCiAJCSAqIHVubGVzcyBpdCB3YXMgZW5hYmxlZCBpbiB0aGUgZWVwcm9tIGZvciBwb3J0IEIKIAkJICogc28gZXhjbHVkZSBGVU5DXzEgcG9ydHMgZnJvbSBoYXZpbmcgV29MIGVuYWJsZWQgKi8KLQkJaWYgKHJkMzIoRTEwMDBfU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEgJiYKKwkJaWYgKChyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ19NQVNLKSAmJgogCQkgICAgIWFkYXB0ZXItPmVlcHJvbV93b2wpIHsKIAkJCXdvbC0+c3VwcG9ydGVkID0gMDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCA3ODk2M2EwLi45MzNjNjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMTMwNiwxMyArMTMwNiw4IEBACiAJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCiAJCQkoKHBiYSA8PCAxMCkgLSAyICogYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKTsKIAotCWlmIChtYWMtPnR5cGUgPCBlMTAwMF84MjU3NikgewotCQlmYy0+aGlnaF93YXRlciA9IGh3bSAmIDB4RkZGODsJLyogOC1ieXRlIGdyYW51bGFyaXR5ICovCi0JCWZjLT5sb3dfd2F0ZXIgPSBmYy0+aGlnaF93YXRlciAtIDg7Ci0JfSBlbHNlIHsKLQkJZmMtPmhpZ2hfd2F0ZXIgPSBod20gJiAweEZGRjA7CS8qIDE2LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KLQkJZmMtPmxvd193YXRlciA9IGZjLT5oaWdoX3dhdGVyIC0gMTY7Ci0JfQorCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgMHhGRkYwOwkvKiAxNi1ieXRlIGdyYW51bGFyaXR5ICovCisJZmMtPmxvd193YXRlciA9IGZjLT5oaWdoX3dhdGVyIC0gMTY7CiAJZmMtPnBhdXNlX3RpbWUgPSAweEZGRkY7CiAJZmMtPnNlbmRfeG9uID0gMTsKIAlmYy0+Y3VycmVudF9tb2RlID0gZmMtPnJlcXVlc3RlZF9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwppbmRleCBlOWRkOTVmLi4wZGJkMDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwpAQCAtMjc2Myw3ICsyNzYzLDggQEAKIAllcnIgPSBody0+bWFjLm9wcy5yZXNldF9odyhodyk7CiAJaWYgKGVycikgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LAotCQkgICAgICAgICAiUEYgc3RpbGwgaW4gcmVzZXQgc3RhdGUsIGFzc2lnbmluZyBuZXcgYWRkcmVzc1xuIik7CisJCQkgIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLCBhc3NpZ25pbmcgbmV3IGFkZHJlc3MuIgorCQkJICIgSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cbiIpOwogCQlyYW5kb21fZXRoZXJfYWRkcihody0+bWFjLmFkZHIpOwogCX0gZWxzZSB7CiAJCWVyciA9IGh3LT5tYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGJkNjQzODcuLjFhMmVhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTQzNzMsNiArNDM3MywxMSBAQAogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCS8qCisJICogcGNpX3Jlc3RvcmVfc3RhdGUgY2xlYXJzIGRldi0+c3RhdGVfc2F2ZWQgc28gY2FsbAorCSAqIHBjaV9zYXZlX3N0YXRlIHRvIHJlc3RvcmUgaXQuCisJICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IGY0OTk2ODQuLjZjYWUyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTU3LDcgKzU3LDkgQEAKIAogc3RhdGljIGludCB1c2VfbXNpX3ggPSAxOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhdXRvX2Z3X3Jlc2V0ID0gQVVUT19GV19SRVNFVF9FTkFCTEVEOworc3RhdGljIGludCBhdXRvX2Z3X3Jlc2V0ID0gQVVUT19GV19SRVNFVF9FTkFCTEVEOworbW9kdWxlX3BhcmFtKGF1dG9fZndfcmVzZXQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9fZndfcmVzZXQsIkF1dG8gZmlybXdhcmUgcmVzZXQgKDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCIpOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuZXR4ZW5fbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKQEAgLTI1MzQsNDIgKzI1MzYsNiBAQAogCS53cml0ZSA9IG5ldHhlbl9zeXNmc193cml0ZV9tZW0sCiB9OwogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKLXN0YXRpYyBzc2l6ZV90Ci1uZXR4ZW5fc3RvcmVfYXV0b19md19yZXNldChzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsCi0JCXN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi0KLXsKLQl1bnNpZ25lZCBsb25nIG5ldzsKLQotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDE2LCAmbmV3KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKG5ldyA9PSBBVVRPX0ZXX1JFU0VUX0VOQUJMRUQpIHx8IChuZXcgPT0gQVVUT19GV19SRVNFVF9ESVNBQkxFRCkpIHsKLQkJYXV0b19md19yZXNldCA9IG5ldzsKLQkJcmV0dXJuIGNvdW50OwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3NpemVfdAotbmV0eGVuX3Nob3dfYXV0b19md19yZXNldChzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsCi0JCXN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqYnVmKQotCi17Ci0JaWYgKGF1dG9fZndfcmVzZXQgPT0gQVVUT19GV19SRVNFVF9FTkFCTEVEKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICJlbmFibGVkXG4iKTsKLQllbHNlCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImRpc2FibGVkXG4iKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlIG1vZF9hdHRyX2Z3X3Jlc2V0ID0gewotCS5hdHRyID0gey5uYW1lID0gImF1dG9fZndfcmVzZXQiLCAubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUil9LAotCS5zaG93ID0gbmV0eGVuX3Nob3dfYXV0b19md19yZXNldCwKLQkuc3RvcmUgPSBuZXR4ZW5fc3RvcmVfYXV0b19md19yZXNldCwKLX07Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQKIG5ldHhlbl9jcmVhdGVfc3lzZnNfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yNzc1LDIzICsyNzQxLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHhlbl9pbml0X21vZHVsZSh2b2lkKQogewotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0Jc3RydWN0IG1vZHVsZSAqbW9kID0gVEhJU19NT0RVTEU7Ci0jZW5kaWYKLQogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmcpOwogCiAjaWZkZWYgQ09ORklHX0lORVQKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5ldHhlbl9uZXRkZXZfY2IpOwogCXJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZuZXR4ZW5faW5ldGFkZHJfY2IpOwogI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCWlmIChzeXNmc19jcmVhdGVfZmlsZSgmbW9kLT5ta29iai5rb2JqLCAmbW9kX2F0dHJfZndfcmVzZXQuYXR0cikpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBjcmVhdGUgYXV0b19md19yZXNldCAiCi0JCQkJInN5c2ZzIGVudHJ5LiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotI2VuZGlmCi0KIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmV0eGVuX2RyaXZlcik7CiB9CiAKQEAgLTI3OTksMTIgKzI3NTQsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmV0eGVuX2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX01PRFVMRVMKLQlzdHJ1Y3QgbW9kdWxlICptb2QgPSBUSElTX01PRFVMRTsKLQotCXN5c2ZzX3JlbW92ZV9maWxlKCZtb2QtPm1rb2JqLmtvYmosICZtb2RfYXR0cl9md19yZXNldC5hdHRyKTsKLSNlbmRpZgotCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuZXR4ZW5fZHJpdmVyKTsKIAogI2lmZGVmIENPTkZJR19JTkVUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY25ldDMyLmMgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKaW5kZXggZGNjNjdhMy4uZTE1NDY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTE3NjUsNyArMTc2Niw3IEBACiAKIAkvKiBpZiB0aGUgZXRoZXJuZXQgYWRkcmVzcyBpcyBub3QgdmFsaWQsIGZvcmNlIHRvIDAwOjAwOjAwOjAwOjAwOjAwICovCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+cGVybV9hZGRyKSkKLQkJbWVtc2V0KGRldi0+ZGV2X2FkZHIsIDAsIHNpemVvZihkZXYtPmRldl9hZGRyKSk7CisJCW1lbXNldChkZXYtPmRldl9hZGRyLCAwLCBFVEhfQUxFTik7CiAKIAlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkgewogCQlwcmludGsoIiAlcE0iLCBkZXYtPmRldl9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jIGIvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKaW5kZXggZjYzYzk2YS4uYzEzY2Y2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKQEAgLTMyNiw3ICszMjYsOCBAQAogCiBzdGF0aWMgdm9pZCBiY201NHh4X2FkanVzdF9yeHJlZmNsayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCXUzMiB2YWwsIG9yaWc7CisJdTMyIG9yaWc7CisJaW50IHZhbDsKIAlib29sIGNsazEyNWVuID0gdHJ1ZTsKIAogCS8qIEFib3J0IGlmIHdlIGFyZSB1c2luZyBhbiB1bnRlc3RlZCBwaHkuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKaW5kZXggZjk4M2UzYi4uMTAzZThiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwpAQCAtNzQxLDE0ICs3NDEsMTQgQEAKIAogCUVGWF9MT0coZWZ4LCAiY3JlYXRlIHBvcnRcbiIpOwogCisJaWYgKHBoeV9mbGFzaF9jZmcpCisJCWVmeC0+cGh5X21vZGUgPSBQSFlfTU9ERV9TUEVDSUFMOworCiAJLyogQ29ubmVjdCB1cCBNQUMvUEhZIG9wZXJhdGlvbnMgdGFibGUgKi8KIAlyYyA9IGVmeC0+dHlwZS0+cHJvYmVfcG9ydChlZngpOwogCWlmIChyYykKIAkJZ290byBlcnI7CiAKLQlpZiAocGh5X2ZsYXNoX2NmZykKLQkJZWZ4LT5waHlfbW9kZSA9IFBIWV9NT0RFX1NQRUNJQUw7Ci0KIAkvKiBTYW5pdHkgY2hlY2sgTUFDIGFkZHJlc3MgKi8KIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihlZngtPm1hY19hZGRyZXNzKSkgewogCQltZW1jcHkoZWZ4LT5uZXRfZGV2LT5kZXZfYWRkciwgZWZ4LT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IDE3YWZjZDIuLjlkMDA5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTkyNSw2ICs5MjUsNyBAQAogCiBzdGF0aWMgdm9pZCBmYWxjb25fcmVtb3ZlX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwllZngtPnBoeV9vcC0+cmVtb3ZlKGVmeCk7CiAJZWZ4X25pY19mcmVlX2J1ZmZlcihlZngsICZlZngtPnN0YXRzX2J1ZmZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKaW5kZXggM2RhOTMzZi4uOGNjYWIyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKQEAgLTExMSwxNiArMTExLDEyIEBACiAJZWZ4X3dyaXRlbyhlZngsICZyZWcsIEZSX0FCX1hNX01HVF9JTlRfTUFTSyk7CiB9CiAKLS8qIEdldCBzdGF0dXMgb2YgWEFVSSBsaW5rICovCi1zdGF0aWMgYm9vbCBmYWxjb25feGF1aV9saW5rX29rKHN0cnVjdCBlZnhfbmljICplZngpCitzdGF0aWMgYm9vbCBmYWxjb25feGd4c19saW5rX29rKHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJZWZ4X293b3JkX3QgcmVnOwogCWJvb2wgYWxpZ25fZG9uZSwgbGlua19vayA9IGZhbHNlOwogCWludCBzeW5jX3N0YXR1czsKIAotCWlmIChMT09QQkFDS19JTlRFUk5BTChlZngpKQotCQlyZXR1cm4gdHJ1ZTsKLQogCS8qIFJlYWQgbGluayBzdGF0dXMgKi8KIAllZnhfcmVhZG8oZWZ4LCAmcmVnLCBGUl9BQl9YWF9DT1JFX1NUQVQpOwogCkBAIC0xMzUsMTQgKzEzMSwyNCBAQAogCUVGWF9TRVRfT1dPUkRfRklFTEQocmVnLCBGUkZfQUJfWFhfRElTUEVSUiwgRkZFX0FCX1hYX1NUQVRfQUxMX0xBTkVTKTsKIAllZnhfd3JpdGVvKGVmeCwgJnJlZywgRlJfQUJfWFhfQ09SRV9TVEFUKTsKIAotCS8qIElmIHRoZSBsaW5rIGlzIHVwLCB0aGVuIGNoZWNrIHRoZSBwaHkgc2lkZSBvZiB0aGUgeGF1aSBsaW5rICovCi0JaWYgKGVmeC0+bGlua19zdGF0ZS51cCAmJiBsaW5rX29rKQotCQlpZiAoZWZ4LT5tZGlvLm1tZHMgJiAoMSA8PCBNRElPX01NRF9QSFlYUykpCi0JCQlsaW5rX29rID0gZWZ4X21kaW9fcGh5eGd4c19sYW5lX3N5bmMoZWZ4KTsKLQogCXJldHVybiBsaW5rX29rOwogfQogCitzdGF0aWMgYm9vbCBmYWxjb25feG1hY19saW5rX29rKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJLyoKKwkgKiBDaGVjayBNQUMncyBYR1hTIGxpbmsgc3RhdHVzIGV4Y2VwdCB3aGVuIHVzaW5nIFhHTUlJIGxvb3BiYWNrCisJICogd2hpY2ggYnlwYXNzZXMgdGhlIFhHWFMgYmxvY2suCisJICogSWYgcG9zc2libGUsIGNoZWNrIFBIWSdzIFhHWFMgbGluayBzdGF0dXMgZXhjZXB0IHdoZW4gdXNpbmcKKwkgKiBNQUMgbG9vcGJhY2suCisJICovCisJcmV0dXJuIChlZngtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfWEdNSUkgfHwKKwkJZmFsY29uX3hneHNfbGlua19vayhlZngpKSAmJgorCQkoIShlZngtPm1kaW8ubW1kcyAmICgxIDw8IE1ESU9fTU1EX1BIWVhTKSkgfHwKKwkJIExPT1BCQUNLX0lOVEVSTkFMKGVmeCkgfHwgCisJCSBlZnhfbWRpb19waHl4Z3hzX2xhbmVfc3luYyhlZngpKTsKK30KKwogdm9pZCBmYWxjb25fcmVjb25maWd1cmVfeG1hY19jb3JlKHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJdW5zaWduZWQgaW50IG1heF9mcmFtZV9sZW47CkBAIC0yNDUsOSArMjUxLDkgQEAKIAogCiAvKiBUcnkgdG8gYnJpbmcgdXAgdGhlIEZhbGNvbiBzaWRlIG9mIHRoZSBGYWxjb24tUGh5IFhBVUkgbGluayAqLwotc3RhdGljIGJvb2wgZmFsY29uX2NoZWNrX3hhdWlfbGlua191cChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHJpZXMpCitzdGF0aWMgYm9vbCBmYWxjb25feG1hY19saW5rX29rX3JldHJ5KHN0cnVjdCBlZnhfbmljICplZngsIGludCB0cmllcykKIHsKLQlib29sIG1hY191cCA9IGZhbGNvbl94YXVpX2xpbmtfb2soZWZ4KTsKKwlib29sIG1hY191cCA9IGZhbGNvbl94bWFjX2xpbmtfb2soZWZ4KTsKIAogCWlmIChMT09QQkFDS19NQVNLKGVmeCkgJiBMT09QQkFDS1NfRVhURVJOQUwoZWZ4KSAmIExPT1BCQUNLU19XUyB8fAogCSAgICBlZnhfcGh5X21vZGVfZGlzYWJsZWQoZWZ4LT5waHlfbW9kZSkpCkBAIC0yNjEsNyArMjY3LDcgQEAKIAkJZmFsY29uX3Jlc2V0X3hhdWkoZWZ4KTsKIAkJdWRlbGF5KDIwMCk7CiAKLQkJbWFjX3VwID0gZmFsY29uX3hhdWlfbGlua19vayhlZngpOworCQltYWNfdXAgPSBmYWxjb25feG1hY19saW5rX29rKGVmeCk7CiAJCS0tdHJpZXM7CiAJfQogCkBAIC0yNzIsNyArMjc4LDcgQEAKIAogc3RhdGljIGJvb2wgZmFsY29uX3htYWNfY2hlY2tfZmF1bHQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlyZXR1cm4gIWZhbGNvbl9jaGVja194YXVpX2xpbmtfdXAoZWZ4LCA1KTsKKwlyZXR1cm4gIWZhbGNvbl94bWFjX2xpbmtfb2tfcmV0cnkoZWZ4LCA1KTsKIH0KIAogc3RhdGljIGludCBmYWxjb25fcmVjb25maWd1cmVfeG1hYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtMjg0LDcgKzI5MCw3IEBACiAKIAlmYWxjb25fcmVjb25maWd1cmVfbWFjX3dyYXBwZXIoZWZ4KTsKIAotCWVmeC0+eG1hY19wb2xsX3JlcXVpcmVkID0gIWZhbGNvbl9jaGVja194YXVpX2xpbmtfdXAoZWZ4LCA1KTsKKwllZngtPnhtYWNfcG9sbF9yZXF1aXJlZCA9ICFmYWxjb25feG1hY19saW5rX29rX3JldHJ5KGVmeCwgNSk7CiAJZmFsY29uX21hc2tfc3RhdHVzX2ludHIoZWZ4LCB0cnVlKTsKIAogCXJldHVybiAwOwpAQCAtMzU3LDcgKzM2Myw3IEBACiAJCXJldHVybjsKIAogCWZhbGNvbl9tYXNrX3N0YXR1c19pbnRyKGVmeCwgZmFsc2UpOwotCWVmeC0+eG1hY19wb2xsX3JlcXVpcmVkID0gIWZhbGNvbl9jaGVja194YXVpX2xpbmtfdXAoZWZ4LCAxKTsKKwllZngtPnhtYWNfcG9sbF9yZXF1aXJlZCA9ICFmYWxjb25feG1hY19saW5rX29rX3JldHJ5KGVmeCwgMSk7CiAJZmFsY29uX21hc2tfc3RhdHVzX2ludHIoZWZ4LCB0cnVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwppbmRleCAwZTFiY2M1Li5lYjY5NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwpAQCAtMzA0LDMxICszMDQsNDcgQEAKIAogc3RhdGljIGludCBlZnhfbWNkaV9waHlfcHJvYmUoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2NmZyAqcGh5X2NmZzsKKwlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2NmZyAqcGh5X2RhdGE7CisJdTggb3V0YnVmW01DX0NNRF9HRVRfTElOS19PVVRfTEVOXTsKKwl1MzIgY2FwczsKIAlpbnQgcmM7CiAKLQkvKiBUT0RPOiBNb3ZlIHBoeV9kYXRhIGluaXRpYWxpc2F0aW9uIHRvCi0JICogcGh5X29wLT5wcm9iZS9yZW1vdmUsIHJhdGhlciB0aGFuIGluaXQvZmluaSAqLwotCXBoeV9jZmcgPSBremFsbG9jKHNpemVvZigqcGh5X2NmZyksIEdGUF9LRVJORUwpOwotCWlmIChwaHlfY2ZnID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfYWxsb2M7Ci0JfQotCXJjID0gZWZ4X21jZGlfZ2V0X3BoeV9jZmcoZWZ4LCBwaHlfY2ZnKTsKKwkvKiBJbml0aWFsaXNlIGFuZCBwb3B1bGF0ZSBwaHlfZGF0YSAqLworCXBoeV9kYXRhID0ga3phbGxvYyhzaXplb2YoKnBoeV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBoeV9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmMgPSBlZnhfbWNkaV9nZXRfcGh5X2NmZyhlZngsIHBoeV9kYXRhKTsKIAlpZiAocmMgIT0gMCkKIAkJZ290byBmYWlsOwogCi0JZWZ4LT5waHlfdHlwZSA9IHBoeV9jZmctPnR5cGU7CisJLyogUmVhZCBpbml0aWFsIGxpbmsgYWR2ZXJ0aXNlbWVudCAqLworCUJVSUxEX0JVR19PTihNQ19DTURfR0VUX0xJTktfSU5fTEVOICE9IDApOworCXJjID0gZWZ4X21jZGlfcnBjKGVmeCwgTUNfQ01EX0dFVF9MSU5LLCBOVUxMLCAwLAorCQkJICBvdXRidWYsIHNpemVvZihvdXRidWYpLCBOVUxMKTsKKwlpZiAocmMpCisJCWdvdG8gZmFpbDsKIAotCWVmeC0+bWRpb19idXMgPSBwaHlfY2ZnLT5jaGFubmVsOwotCWVmeC0+bWRpby5wcnRhZCA9IHBoeV9jZmctPnBvcnQ7Ci0JZWZ4LT5tZGlvLm1tZHMgPSBwaHlfY2ZnLT5tbWRfbWFzayAmIH4oMSA8PCBNQ19DTURfTU1EX0NMQVVTRTIyKTsKKwkvKiBGaWxsIG91dCBuaWMgc3RhdGUgKi8KKwllZngtPnBoeV9kYXRhID0gcGh5X2RhdGE7CisJZWZ4LT5waHlfdHlwZSA9IHBoeV9kYXRhLT50eXBlOworCisJZWZ4LT5tZGlvX2J1cyA9IHBoeV9kYXRhLT5jaGFubmVsOworCWVmeC0+bWRpby5wcnRhZCA9IHBoeV9kYXRhLT5wb3J0OworCWVmeC0+bWRpby5tbWRzID0gcGh5X2RhdGEtPm1tZF9tYXNrICYgfigxIDw8IE1DX0NNRF9NTURfQ0xBVVNFMjIpOwogCWVmeC0+bWRpby5tb2RlX3N1cHBvcnQgPSAwOwotCWlmIChwaHlfY2ZnLT5tbWRfbWFzayAmICgxIDw8IE1DX0NNRF9NTURfQ0xBVVNFMjIpKQorCWlmIChwaHlfZGF0YS0+bW1kX21hc2sgJiAoMSA8PCBNQ19DTURfTU1EX0NMQVVTRTIyKSkKIAkJZWZ4LT5tZGlvLm1vZGVfc3VwcG9ydCB8PSBNRElPX1NVUFBPUlRTX0MyMjsKLQlpZiAocGh5X2NmZy0+bW1kX21hc2sgJiB+KDEgPDwgTUNfQ01EX01NRF9DTEFVU0UyMikpCisJaWYgKHBoeV9kYXRhLT5tbWRfbWFzayAmIH4oMSA8PCBNQ19DTURfTU1EX0NMQVVTRTIyKSkKIAkJZWZ4LT5tZGlvLm1vZGVfc3VwcG9ydCB8PSBNRElPX1NVUFBPUlRTX0M0NSB8IE1ESU9fRU1VTEFURV9DMjI7CiAKKwljYXBzID0gTUNESV9EV09SRChvdXRidWYsIEdFVF9MSU5LX09VVF9DQVApOworCWlmIChjYXBzICYgKDEgPDwgTUNfQ01EX1BIWV9DQVBfQU5fTEJOKSkKKwkJZWZ4LT5saW5rX2FkdmVydGlzaW5nID0KKwkJCW1jZGlfdG9fZXRodG9vbF9jYXAocGh5X2RhdGEtPm1lZGlhLCBjYXBzKTsKKwllbHNlCisJCXBoeV9kYXRhLT5mb3JjZWRfY2FwID0gY2FwczsKKwogCS8qIEFzc2VydCB0aGF0IHdlIGNhbiBtYXAgZWZ4IC0+IG1jZGkgbG9vcGJhY2sgbW9kZXMgKi8KIAlCVUlMRF9CVUdfT04oTE9PUEJBQ0tfTk9ORSAhPSBNQ19DTURfTE9PUEJBQ0tfTk9ORSk7CiAJQlVJTERfQlVHX09OKExPT1BCQUNLX0RBVEEgIT0gTUNfQ01EX0xPT1BCQUNLX0RBVEEpOwpAQCAtMzY1LDQ2ICszODEsNiBAQAogCSAqIGJ1dCBieSBjb252ZW50aW9uIHdlIGRvbid0ICovCiAJZWZ4LT5sb29wYmFja19tb2RlcyAmPSB+KDEgPDwgTE9PUEJBQ0tfTk9ORSk7CiAKLQlrZnJlZShwaHlfY2ZnKTsKLQotCXJldHVybiAwOwotCi1mYWlsOgotCWtmcmVlKHBoeV9jZmcpOwotZmFpbF9hbGxvYzoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZWZ4X21jZGlfcGh5X2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKLXsKLQlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2NmZyAqcGh5X2RhdGE7Ci0JdTggb3V0YnVmW01DX0NNRF9HRVRfTElOS19PVVRfTEVOXTsKLQl1MzIgY2FwczsKLQlpbnQgcmM7Ci0KLQlwaHlfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwaHlfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChwaHlfZGF0YSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJjID0gZWZ4X21jZGlfZ2V0X3BoeV9jZmcoZWZ4LCBwaHlfZGF0YSk7Ci0JaWYgKHJjICE9IDApCi0JCWdvdG8gZmFpbDsKLQotCWVmeC0+cGh5X2RhdGEgPSBwaHlfZGF0YTsKLQotCUJVSUxEX0JVR19PTihNQ19DTURfR0VUX0xJTktfSU5fTEVOICE9IDApOwotCXJjID0gZWZ4X21jZGlfcnBjKGVmeCwgTUNfQ01EX0dFVF9MSU5LLCBOVUxMLCAwLAotCQkJICBvdXRidWYsIHNpemVvZihvdXRidWYpLCBOVUxMKTsKLQlpZiAocmMpCi0JCWdvdG8gZmFpbDsKLQotCWNhcHMgPSBNQ0RJX0RXT1JEKG91dGJ1ZiwgR0VUX0xJTktfT1VUX0NBUCk7Ci0JaWYgKGNhcHMgJiAoMSA8PCBNQ19DTURfUEhZX0NBUF9BTl9MQk4pKQotCQllZngtPmxpbmtfYWR2ZXJ0aXNpbmcgPQotCQkJbWNkaV90b19ldGh0b29sX2NhcChwaHlfZGF0YS0+bWVkaWEsIGNhcHMpOwotCWVsc2UKLQkJcGh5X2RhdGEtPmZvcmNlZF9jYXAgPSBjYXBzOwotCiAJcmV0dXJuIDA7CiAKIGZhaWw6CkBAIC01MDQsNyArNDgwLDcgQEAKIAlyZXR1cm4gIWVmeF9saW5rX3N0YXRlX2VxdWFsKCZlZngtPmxpbmtfc3RhdGUsICZvbGRfc3RhdGUpOwogfQogCi1zdGF0aWMgdm9pZCBlZnhfbWNkaV9waHlfZmluaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorc3RhdGljIHZvaWQgZWZ4X21jZGlfcGh5X3JlbW92ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCXN0cnVjdCBlZnhfbWNkaV9waHlfZGF0YSAqcGh5X2RhdGEgPSBlZngtPnBoeV9kYXRhOwogCkBAIC01ODYsMTAgKzU2MiwxMSBAQAogCiBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9tY2RpX3BoeV9vcHMgPSB7CiAJLnByb2JlCQk9IGVmeF9tY2RpX3BoeV9wcm9iZSwKLQkuaW5pdCAJIAk9IGVmeF9tY2RpX3BoeV9pbml0LAorCS5pbml0IAkgCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAogCS5yZWNvbmZpZ3VyZQk9IGVmeF9tY2RpX3BoeV9yZWNvbmZpZ3VyZSwKIAkucG9sbAkJPSBlZnhfbWNkaV9waHlfcG9sbCwKLQkuZmluaQkJPSBlZnhfbWNkaV9waHlfZmluaSwKKwkuZmluaQkJPSBlZnhfcG9ydF9kdW1teV9vcF92b2lkLAorCS5yZW1vdmUJCT0gZWZ4X21jZGlfcGh5X3JlbW92ZSwKIAkuZ2V0X3NldHRpbmdzCT0gZWZ4X21jZGlfcGh5X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCT0gZWZ4X21jZGlfcGh5X3NldF9zZXR0aW5ncywKIAkucnVuX3Rlc3RzCT0gTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmggYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCmluZGV4IDM0YzM4MWYuLmQ1YWFiNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtNTI0LDYgKzUyNCw3IEBACiAJaW50ICgqcHJvYmUpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAlpbnQgKCppbml0KSAoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAJdm9pZCAoKmZpbmkpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKKwl2b2lkICgqcmVtb3ZlKSAoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAJaW50ICgqcmVjb25maWd1cmUpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAlib29sICgqcG9sbCkgKHN0cnVjdCBlZnhfbmljICplZngpOwogCXZvaWQgKCpnZXRfc2V0dGluZ3MpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25pYy5jIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5jCmluZGV4IGE1NzdiZTIuLmRiNDQyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbmljLmMKQEAgLTE1NzYsNiArMTU3Niw4IEBACiAJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQVpfVFhfU09GVF9FVlRfRU4sIDEpOwogCS8qIFByZWZldGNoIHRocmVzaG9sZCAyID0+IGZldGNoIHdoZW4gZGVzY3JpcHRvciBjYWNoZSBoYWxmIGVtcHR5ICovCiAJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQVpfVFhfUFJFRl9USFJFU0hPTEQsIDIpOworCS8qIERpc2FibGUgaGFyZHdhcmUgd2F0Y2hkb2cgd2hpY2ggY2FuIG1pc2ZpcmUgKi8KKwlFRlhfU0VUX09XT1JEX0ZJRUxEKHRlbXAsIEZSRl9BWl9UWF9QUkVGX1dEX1RNUiwgMHgzZmZmZmYpOwogCS8qIFNxdWFzaCBUWCBvZiBwYWNrZXRzIG9mIDE2IGJ5dGVzIG9yIGxlc3MgKi8KIAlpZiAoZWZ4X25pY19yZXYoZWZ4KSA+PSBFRlhfUkVWX0ZBTENPTl9CMCkKIAkJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQlpfVFhfRkxVU0hfTUlOX0xFTl9FTiwgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYwppbmRleCAzODAwZmM3Li5mZjhmMGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKQEAgLTMzLDYgKzMzLDkgQEAKICNkZWZpbmUgUENTX0ZXX0hFQVJUQkVBVF9SRUcJMHhkN2VlCiAjZGVmaW5lIFBDU19GV19IRUFSVEJfTEJOCTAKICNkZWZpbmUgUENTX0ZXX0hFQVJUQl9XSURUSAk4CisjZGVmaW5lIFBDU19GV19QUk9EVUNUX0NPREVfMQkweGQ3ZjAKKyNkZWZpbmUgUENTX0ZXX1ZFUlNJT05fMQkweGQ3ZjMKKyNkZWZpbmUgUENTX0ZXX0JVSUxEXzEJCTB4ZDdmNgogI2RlZmluZSBQQ1NfVUM4MDUxX1NUQVRVU19SRUcJMHhkN2ZkCiAjZGVmaW5lIFBDU19VQ19TVEFUVVNfTEJOCTAKICNkZWZpbmUgUENTX1VDX1NUQVRVU19XSURUSAk4CkBAIC01MiwxNCArNTUsMjQgQEAKIAogc3RydWN0IHF0MjAyeF9waHlfZGF0YSB7CiAJZW51bSBlZnhfcGh5X21vZGUgcGh5X21vZGU7CisJYm9vbCBidWcxNzE5MF9pbl9iYWRfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBidWcxNzE5MF90aW1lcjsKKwl1MzIgZmlybXdhcmVfdmVyOwogfTsKIAogI2RlZmluZSBRVDIwMjJDMl9NQVhfUkVTRVRfVElNRSA1MDAKICNkZWZpbmUgUVQyMDIyQzJfUkVTRVRfV0FJVCAxMAogCi1zdGF0aWMgaW50IHF0MjAyNWNfd2FpdF9yZXNldChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorI2RlZmluZSBRVDIwMjVDX01BWF9IRUFSVEJfVElNRSAoNSAqIEhaKQorI2RlZmluZSBRVDIwMjVDX0hFQVJUQl9XQUlUIDEwMAorI2RlZmluZSBRVDIwMjVDX01BWF9GV1NUQVJUX1RJTUUgKDI1ICogSFogLyAxMCkKKyNkZWZpbmUgUVQyMDI1Q19GV1NUQVJUX1dBSVQgMTAwCisKKyNkZWZpbmUgQlVHMTcxOTBfSU5URVJWQUwgKDIgKiBIWikKKworc3RhdGljIGludCBxdDIwMjVjX3dhaXRfaGVhcnRiZWF0KHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFo7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIFFUMjAyNUNfTUFYX0hFQVJUQl9USU1FOwogCWludCByZWcsIG9sZF9jb3VudGVyID0gMDsKIAogCS8qIFdhaXQgZm9yIGZpcm13YXJlIGhlYXJ0YmVhdCB0byBzdGFydCAqLwpAQCAtNzQsMTEgKzg3LDI1IEBACiAJCQlvbGRfY291bnRlciA9IGNvdW50ZXI7CiAJCWVsc2UgaWYgKGNvdW50ZXIgIT0gb2xkX2NvdW50ZXIpCiAJCQlicmVhazsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQkvKiBTb21lIGNhYmxlcyBoYXZlIEVFUFJPTXMgdGhhdCBjb25mbGljdCB3aXRoIHRoZQorCQkJICogUEhZJ3Mgb24tYm9hcmQgRUVQUk9NIHNvIGl0IGNhbm5vdCBsb2FkIGZpcm13YXJlICovCisJCQlFRlhfRVJSKGVmeCwgIklmIGFuIFNGUCsgZGlyZWN0IGF0dGFjaCBjYWJsZSBpcyIKKwkJCQkiIGNvbm5lY3RlZCwgcGxlYXNlIGNoZWNrIHRoYXQgaXQgY29tcGxpZXMiCisJCQkJIiB3aXRoIHRoZSBTRlArIHNwZWNpZmljYXRpb25cbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JCW1zbGVlcCgxMCk7CisJCX0KKwkJbXNsZWVwKFFUMjAyNUNfSEVBUlRCX1dBSVQpOwogCX0KIAorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF0MjAyNWNfd2FpdF9md19zdGF0dXNfZ29vZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBRVDIwMjVDX01BWF9GV1NUQVJUX1RJTUU7CisJaW50IHJlZzsKKwogCS8qIFdhaXQgZm9yIGZpcm13YXJlIHN0YXR1cyB0byBsb29rIGdvb2QgKi8KIAlmb3IgKDs7KSB7CiAJCXJlZyA9IGVmeF9tZGlvX3JlYWQoZWZ4LCBNRElPX01NRF9QQ1MsIFBDU19VQzgwNTFfU1RBVFVTX1JFRyk7CkBAIC05MCw3ICsxMTcsMTc4IEBACiAJCQlicmVhazsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJbXNsZWVwKFFUMjAyNUNfRldTVEFSVF9XQUlUKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcXQyMDI1Y19yZXN0YXJ0X2Zpcm13YXJlKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJLyogUmVzdGFydCBtaWNyb2NvbnRyb2xsZXIgZXhlY3V0aW9uIG9mIGZpcm13YXJlIGZyb20gUkFNICovCisJZWZ4X21kaW9fd3JpdGUoZWZ4LCAzLCAweGU4NTQsIDB4MDBjMCk7CisJZWZ4X21kaW9fd3JpdGUoZWZ4LCAzLCAweGU4NTQsIDB4MDA0MCk7CisJbXNsZWVwKDUwKTsKK30KKworc3RhdGljIGludCBxdDIwMjVjX3dhaXRfcmVzZXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHF0MjAyNWNfd2FpdF9oZWFydGJlYXQoZWZ4KTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBxdDIwMjVjX3dhaXRfZndfc3RhdHVzX2dvb2QoZWZ4KTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQkvKiBCdWcgMTc2ODk6IG9jY2FzaW9uYWxseSBoZWFydGJlYXQgc3RhcnRzIGJ1dCBmaXJtd2FyZSBzdGF0dXMKKwkJICogY29kZSBuZXZlciBwcm9ncmVzc2VzIGJleW9uZCAweDAwLiAgVHJ5IGFnYWluLCBvbmNlLCBhZnRlcgorCQkgKiByZXN0YXJ0aW5nIGV4ZWN1dGlvbiBvZiB0aGUgZmlybXdhcmUgaW1hZ2UuICovCisJCUVGWF9MT0coZWZ4LCAiYmFzaGluZyBRVDIwMjVDIG1pY3JvY29udHJvbGxlclxuIik7CisJCXF0MjAyNWNfcmVzdGFydF9maXJtd2FyZShlZngpOworCQlyYyA9IHF0MjAyNWNfd2FpdF9oZWFydGJlYXQoZWZ4KTsKKwkJaWYgKHJjICE9IDApCisJCQlyZXR1cm4gcmM7CisJCXJjID0gcXQyMDI1Y193YWl0X2Z3X3N0YXR1c19nb29kKGVmeCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBxdDIwMjVjX2Zpcm13YXJlX2lkKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJc3RydWN0IHF0MjAyeF9waHlfZGF0YSAqcGh5X2RhdGEgPSBlZngtPnBoeV9kYXRhOworCXU4IGZpcm13YXJlX2lkWzldOworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihmaXJtd2FyZV9pZCk7IGkrKykKKwkJZmlybXdhcmVfaWRbaV0gPSBlZnhfbWRpb19yZWFkKGVmeCwgTURJT19NTURfUENTLAorCQkJCQkgICAgICAgUENTX0ZXX1BST0RVQ1RfQ09ERV8xICsgaSk7CisJRUZYX0lORk8oZWZ4LCAiUVQyMDI1QyBmaXJtd2FyZSAleHIlZCB2JWQuJWQuJWQuJWQgWzIwJTAyZC0lMDJkLSUwMmRdXG4iLAorCQkgKGZpcm13YXJlX2lkWzBdIDw8IDgpIHwgZmlybXdhcmVfaWRbMV0sIGZpcm13YXJlX2lkWzJdLAorCQkgZmlybXdhcmVfaWRbM10gPj4gNCwgZmlybXdhcmVfaWRbM10gJiAweGYsCisJCSBmaXJtd2FyZV9pZFs0XSwgZmlybXdhcmVfaWRbNV0sCisJCSBmaXJtd2FyZV9pZFs2XSwgZmlybXdhcmVfaWRbN10sIGZpcm13YXJlX2lkWzhdKTsKKwlwaHlfZGF0YS0+ZmlybXdhcmVfdmVyID0gKChmaXJtd2FyZV9pZFszXSAmIDB4ZjApIDw8IDIwKSB8CisJCQkJICgoZmlybXdhcmVfaWRbM10gJiAweDBmKSA8PCAxNikgfAorCQkJCSAoZmlybXdhcmVfaWRbNF0gPDwgOCkgfCBmaXJtd2FyZV9pZFs1XTsKK30KKworc3RhdGljIHZvaWQgcXQyMDI1Y19idWcxNzE5MF93b3JrYXJvdW5kKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJc3RydWN0IHF0MjAyeF9waHlfZGF0YSAqcGh5X2RhdGEgPSBlZngtPnBoeV9kYXRhOworCisJLyogVGhlIFBIWSBjYW4gZ2V0IHN0dWNrIGluIGEgc3RhdGUgd2hlcmUgaXQgcmVwb3J0cyBQSFlfWFMgYW5kIFBNQS9QTUQKKwkgKiBsYXllcnMgdXAsIGJ1dCBQQ1MgZG93biAobm8gYmxvY2tfbG9jaykuICBJZiB3ZSBub3RpY2UgdGhpcyBzdGF0ZQorCSAqIHBlcnNpc3RpbmcgZm9yIGEgY291cGxlIG9mIHNlY29uZHMsIHdlIHN3aXRjaCBQTUEvUE1EIGxvb3BiYWNrCisJICogYnJpZWZseSBvbiBhbmQgdGhlbiBvZmYgYWdhaW4sIHdoaWNoIGlzIG5vcm1hbGx5IHN1ZmZpY2llbnQgdG8KKwkgKiByZWNvdmVyIGl0LgorCSAqLworCWlmIChlZngtPmxpbmtfc3RhdGUudXAgfHwKKwkgICAgIWVmeF9tZGlvX2xpbmtzX29rKGVmeCwgTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19QSFlYUykpIHsKKwkJcGh5X2RhdGEtPmJ1ZzE3MTkwX2luX2JhZF9zdGF0ZSA9IGZhbHNlOworCQlyZXR1cm47CisJfQorCisJaWYgKCFwaHlfZGF0YS0+YnVnMTcxOTBfaW5fYmFkX3N0YXRlKSB7CisJCXBoeV9kYXRhLT5idWcxNzE5MF9pbl9iYWRfc3RhdGUgPSB0cnVlOworCQlwaHlfZGF0YS0+YnVnMTcxOTBfdGltZXIgPSBqaWZmaWVzICsgQlVHMTcxOTBfSU5URVJWQUw7CisJCXJldHVybjsKKwl9CisKKwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBwaHlfZGF0YS0+YnVnMTcxOTBfdGltZXIpKSB7CisJCUVGWF9MT0coZWZ4LCAiYmFzaGluZyBRVDIwMjVDIFBNQS9QTURcbiIpOworCQllZnhfbWRpb19zZXRfZmxhZyhlZngsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSwKKwkJCQkgIE1ESU9fUE1BX0NUUkwxX0xPT1BCQUNLLCB0cnVlKTsKIAkJbXNsZWVwKDEwMCk7CisJCWVmeF9tZGlvX3NldF9mbGFnKGVmeCwgTURJT19NTURfUE1BUE1ELCBNRElPX0NUUkwxLAorCQkJCSAgTURJT19QTUFfQ1RSTDFfTE9PUEJBQ0ssIGZhbHNlKTsKKwkJcGh5X2RhdGEtPmJ1ZzE3MTkwX3RpbWVyID0gamlmZmllcyArIEJVRzE3MTkwX0lOVEVSVkFMOworCX0KK30KKworc3RhdGljIGludCBxdDIwMjVjX3NlbGVjdF9waHlfbW9kZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXN0cnVjdCBxdDIwMnhfcGh5X2RhdGEgKnBoeV9kYXRhID0gZWZ4LT5waHlfZGF0YTsKKwlzdHJ1Y3QgZmFsY29uX2JvYXJkICpib2FyZCA9IGZhbGNvbl9ib2FyZChlZngpOworCWludCByZWcsIHJjLCBpOworCXVpbnQxNl90IHBoeV9vcF9tb2RlOworCisJLyogT25seSAyLjAuMS4wKyBQSFkgZmlybXdhcmUgc3VwcG9ydHMgdGhlIG1vcmUgb3B0aW1hbCBTRlArCisJICogU2VsZi1Db25maWd1cmUgbW9kZS4gIERvbid0IGF0dGVtcHQgYW55IHN3aXRjaGluZyBpZiB3ZSBlbmNvdW50ZXIKKwkgKiBvbGRlciBmaXJtd2FyZS4gKi8KKwlpZiAocGh5X2RhdGEtPmZpcm13YXJlX3ZlciA8IDB4MDIwMDAxMDApCisJCXJldHVybiAwOworCisJLyogSW4gZ2VuZXJhbCB3ZSB3aWxsIGdldCBvcHRpbWFsIGJlaGF2aW91ciBpbiAiU0ZQKyBTZWxmLUNvbmZpZ3VyZSIKKwkgKiBtb2RlOyBob3dldmVyLCB0aGF0IHBvd2VycyBkb3duIG1vc3Qgb2YgdGhlIFBIWSB3aGVuIG5vIG1vZHVsZSBpcworCSAqIHByZXNlbnQsIHNvIHdlIG11c3QgdXNlIGEgZGlmZmVyZW50IG1vZGUgKGFueSBmaXhlZCBtb2RlIHdpbGwgZG8pCisJICogdG8gYmUgc3VyZSB0aGF0IGxvb3BiYWNrcyB3aWxsIHdvcmsuICovCisJcGh5X29wX21vZGUgPSAoZWZ4LT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX05PTkUpID8gMHgwMDM4IDogMHgwMDIwOworCisJLyogT25seSBjaGFuZ2UgbW9kZSBpZiByZWFsbHkgbmVjZXNzYXJ5ICovCisJcmVnID0gZWZ4X21kaW9fcmVhZChlZngsIDEsIDB4YzMxOSk7CisJaWYgKChyZWcgJiAweDAwMzgpID09IHBoeV9vcF9tb2RlKQorCQlyZXR1cm4gMDsKKwlFRlhfTE9HKGVmeCwgIlN3aXRjaGluZyBQSFkgdG8gbW9kZSAweCUwNHhcbiIsIHBoeV9vcF9tb2RlKTsKKworCS8qIFRoaXMgc2VxdWVuY2UgcmVwbGljYXRlcyB0aGUgcmVnaXN0ZXIgd3JpdGVzIGNvbmZpZ3VyZWQgaW4gdGhlIGJvb3QKKwkgKiBFRVBST00gKGluY2x1ZGluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBib2FyZCByZXZpc2lvbnMpLCBleGNlcHQKKwkgKiB0aGF0IHRoZSBvcGVyYXRpbmcgbW9kZSBpcyBjaGFuZ2VkLCBhbmQgdGhlIFBIWSBpcyBwcmV2ZW50ZWQgZnJvbQorCSAqIHVubmVjZXNzYXJpbHkgcmVsb2FkaW5nIHRoZSBtYWluIGZpcm13YXJlIGltYWdlIGFnYWluLiAqLworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzAwLCAweDAwMDApOworCS8qIChOb3RlOiB0aGlzIHBvcnRpb24gb2YgdGhlIGJvb3QgRUVQUk9NIHNlcXVlbmNlLCB3aGljaCBiaXQtYmFzaGVzIDkKKwkgKiBTVE9QcyBvbnRvIHRoZSBmaXJtd2FyZS9tb2R1bGUgSTJDIGJ1cyB0byByZXNldCBpdCwgdmFyaWVzIGFjcm9zcworCSAqIGJvYXJkIHJldmlzaW9ucywgYXMgdGhlIGJ1cyBpcyBjb25uZWN0ZWQgdG8gZGlmZmVyZW50IEdQSU8vTEVECisJICogb3V0cHV0cyBvbiB0aGUgUEhZLikgKi8KKwlpZiAoYm9hcmQtPm1ham9yID09IDAgJiYgYm9hcmQtPm1pbm9yIDwgMikgeworCQllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMywgMHg0NDk4KTsKKwkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQkJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDMsIDB4NDQ4OCk7CisJCQllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMywgMHg0NDgwKTsKKwkJCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzAzLCAweDQ0OTApOworCQkJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDMsIDB4NDQ5OCk7CisJCX0KKwl9IGVsc2UgeworCQllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMywgMHgwOTIwKTsKKwkJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGQwMDgsIDB4MDAwNCk7CisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzAzLCAweDA5MDApOworCQkJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGQwMDgsIDB4MDAwNSk7CisJCQllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMywgMHgwOTIwKTsKKwkJCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhkMDA4LCAweDAwMDQpOworCQl9CisJCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzAzLCAweDQ5MDApOworCX0KKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMywgMHg0OTAwKTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMiwgMHgwMDA0KTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMxNiwgMHgwMDEzKTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMxOCwgMHgwMDU0KTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMxOSwgcGh5X29wX21vZGUpOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzFhLCAweDAwOTgpOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMywgMHgwMDI2LCAweDBlMDApOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMywgMHgwMDI3LCAweDAwMTMpOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMywgMHgwMDI4LCAweGE1MjgpOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhkMDA2LCAweDAwMGEpOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhkMDA3LCAweDAwMDkpOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhkMDA4LCAweDAwMDQpOworCS8qIFRoaXMgYWRkaXRpb25hbCB3cml0ZSBpcyBub3QgcHJlc2VudCBpbiB0aGUgYm9vdCBFRVBST00uICBJdAorCSAqIHByZXZlbnRzIHRoZSBQSFkncyBpbnRlcm5hbCBib290IFJPTSBkb2luZyBhbm90aGVyIHBvaW50bGVzcyAoYW5kCisJICogc2xvdykgcmVsb2FkIG9mIHRoZSBmaXJtd2FyZSBpbWFnZSAodGhlIG1pY3JvY29udHJvbGxlcidzIGNvZGUKKwkgKiBtZW1vcnkgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBtaWNyb2NvbnRyb2xsZXIgcmVzZXQpLiAqLworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzE3LCAweDAwZmYpOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzAwLCAweDAwMDIpOworCW1zbGVlcCgyMCk7CisKKwkvKiBSZXN0YXJ0IG1pY3JvY29udHJvbGxlciBleGVjdXRpb24gb2YgZmlybXdhcmUgZnJvbSBSQU0gKi8KKwlxdDIwMjVjX3Jlc3RhcnRfZmlybXdhcmUoZWZ4KTsKKworCS8qIFdhaXQgZm9yIHRoZSBtaWNyb2NvbnRyb2xsZXIgdG8gYmUgcmVhZHkgYWdhaW4gKi8KKwlyYyA9IHF0MjAyNWNfd2FpdF9yZXNldChlZngpOworCWlmIChyYyA8IDApIHsKKwkJRUZYX0VSUihlZngsICJQSFkgbWljcm9jb250cm9sbGVyIHJlc2V0IGR1cmluZyBtb2RlIHN3aXRjaCAiCisJCQkJInRpbWVkIG91dFxuIik7CisJCXJldHVybiByYzsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEzNyw2ICszMzUsMTYgQEAKIAogc3RhdGljIGludCBxdDIwMnhfcGh5X3Byb2JlKHN0cnVjdCBlZnhfbmljICplZngpCiB7CisJc3RydWN0IHF0MjAyeF9waHlfZGF0YSAqcGh5X2RhdGE7CisKKwlwaHlfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxdDIwMnhfcGh5X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoeV9kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwllZngtPnBoeV9kYXRhID0gcGh5X2RhdGE7CisJcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKKwlwaHlfZGF0YS0+YnVnMTcxOTBfaW5fYmFkX3N0YXRlID0gZmFsc2U7CisJcGh5X2RhdGEtPmJ1ZzE3MTkwX3RpbWVyID0gMDsKKwogCWVmeC0+bWRpby5tbWRzID0gUVQyMDJYX1JFUVVJUkVEX0RFVlM7CiAJZWZ4LT5tZGlvLm1vZGVfc3VwcG9ydCA9IE1ESU9fU1VQUE9SVFNfQzQ1IHwgTURJT19FTVVMQVRFX0MyMjsKIAllZngtPmxvb3BiYWNrX21vZGVzID0gUVQyMDJYX0xPT1BCQUNLUyB8IEZBTENPTl9YTUFDX0xPT1BCQUNLUzsKQEAgLTE0NSw3ICszNTMsNiBAQAogCiBzdGF0aWMgaW50IHF0MjAyeF9waHlfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXN0cnVjdCBxdDIwMnhfcGh5X2RhdGEgKnBoeV9kYXRhOwogCXUzMiBkZXZpZDsKIAlpbnQgcmM7CiAKQEAgLTE1NSwxNyArMzYyLDE0IEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlwaHlfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxdDIwMnhfcGh5X2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBoeV9kYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQllZngtPnBoeV9kYXRhID0gcGh5X2RhdGE7Ci0KIAlkZXZpZCA9IGVmeF9tZGlvX3JlYWRfaWQoZWZ4LCBNRElPX01NRF9QSFlYUyk7CiAJRUZYX0lORk8oZWZ4LCAiUEhZIElEIHJlZyAleCAoT1VJICUwNnggbW9kZWwgJTAyeCByZXZpc2lvbiAleClcbiIsCiAJCSBkZXZpZCwgZWZ4X21kaW9faWRfb3VpKGRldmlkKSwgZWZ4X21kaW9faWRfbW9kZWwoZGV2aWQpLAogCQkgZWZ4X21kaW9faWRfcmV2KGRldmlkKSk7CiAKLQlwaHlfZGF0YS0+cGh5X21vZGUgPSBlZngtPnBoeV9tb2RlOworCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpCisJCXF0MjAyNWNfZmlybXdhcmVfaWQoZWZ4KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODMsNiArMzg3LDkgQEAKIAllZngtPmxpbmtfc3RhdGUuZmQgPSB0cnVlOwogCWVmeC0+bGlua19zdGF0ZS5mYyA9IGVmeC0+d2FudGVkX2ZjOwogCisJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfUVQyMDI1QykKKwkJcXQyMDI1Y19idWcxNzE5MF93b3JrYXJvdW5kKGVmeCk7CisKIAlyZXR1cm4gZWZ4LT5saW5rX3N0YXRlLnVwICE9IHdhc191cDsKIH0KIApAQCAtMTkxLDYgKzM5OCwxMCBAQAogCXN0cnVjdCBxdDIwMnhfcGh5X2RhdGEgKnBoeV9kYXRhID0gZWZ4LT5waHlfZGF0YTsKIAogCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpIHsKKwkJaW50IHJjID0gcXQyMDI1Y19zZWxlY3RfcGh5X21vZGUoZWZ4KTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCiAJCS8qIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCByZWdpc3RlciBiaXRzIHdoaWNoIGNhbgogCQkgKiBkaXNhYmxlIFRYIChhbmQgc2F2ZSBwb3dlcikgb24gZGlyZWN0LWF0dGFjaCBjYWJsZXMKIAkJICogb3Igb3B0aWNhbCB0cmFuc2NlaXZlcnMsIHZhcnlpbmcgc29tZXdoYXQgYmV0d2VlbgpAQCAtMjI0LDcgKzQzNSw3IEBACiAJbWRpbzQ1X2V0aHRvb2xfZ3NldCgmZWZ4LT5tZGlvLCBlY21kKTsKIH0KIAotc3RhdGljIHZvaWQgcXQyMDJ4X3BoeV9maW5pKHN0cnVjdCBlZnhfbmljICplZngpCitzdGF0aWMgdm9pZCBxdDIwMnhfcGh5X3JlbW92ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCS8qIEZyZWUgdGhlIGNvbnRleHQgYmxvY2sgKi8KIAlrZnJlZShlZngtPnBoeV9kYXRhKTsKQEAgLTIzNiw3ICs0NDcsOCBAQAogCS5pbml0CQkgPSBxdDIwMnhfcGh5X2luaXQsCiAJLnJlY29uZmlndXJlCSA9IHF0MjAyeF9waHlfcmVjb25maWd1cmUsCiAJLnBvbGwJICAgICAJID0gcXQyMDJ4X3BoeV9wb2xsLAotCS5maW5pCSAgCSA9IHF0MjAyeF9waHlfZmluaSwKKwkuZmluaQkJID0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKKwkucmVtb3ZlCSAgCSA9IHF0MjAyeF9waHlfcmVtb3ZlLAogCS5nZXRfc2V0dGluZ3MJID0gcXQyMDJ4X3BoeV9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkgPSBlZnhfbWRpb19zZXRfc2V0dGluZ3MsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMgYi9kcml2ZXJzL25ldC9zZmMvc2llbmEuYwppbmRleCBkZTA3YTRmLi5mOGM2NzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2llbmEuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2llbmEuYwpAQCAtMTMzLDYgKzEzMyw3IEBACiAKIHZvaWQgc2llbmFfcmVtb3ZlX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwllZngtPnBoeV9vcC0+cmVtb3ZlKGVmeCk7CiAJZWZ4X25pY19mcmVlX2J1ZmZlcihlZngsICZlZngtPnN0YXRzX2J1ZmZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwppbmRleCBjYTExNTcyLi4zMDA5YzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCkBAIC0yMDIsMTAgKzIwMiwxNCBAQAogCWludCByYzsKIAogCXJ0bmxfbG9jaygpOwotCWVmeF9tZGlvX3NldF9mbGFnKGVmeCwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9UWFBXUiwKLQkJCSAgTURJT19QTUFfMTBHQlRfVFhQV1JfU0hPUlQsCi0JCQkgIGNvdW50ICE9IDAgJiYgKmJ1ZiAhPSAnMCcpOwotCXJjID0gZWZ4X3JlY29uZmlndXJlX3BvcnQoZWZ4KTsKKwlpZiAoZWZ4LT5zdGF0ZSAhPSBTVEFURV9SVU5OSU5HKSB7CisJCXJjID0gLUVCVVNZOworCX0gZWxzZSB7CisJCWVmeF9tZGlvX3NldF9mbGFnKGVmeCwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9UWFBXUiwKKwkJCQkgIE1ESU9fUE1BXzEwR0JUX1RYUFdSX1NIT1JULAorCQkJCSAgY291bnQgIT0gMCAmJiAqYnVmICE9ICcwJyk7CisJCXJjID0gZWZ4X3JlY29uZmlndXJlX3BvcnQoZWZ4KTsKKwl9CiAJcnRubF91bmxvY2soKTsKIAogCXJldHVybiByYyA8IDAgPyByYyA6IChzc2l6ZV90KWNvdW50OwpAQCAtMjk4LDM2ICszMDIsNjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZng3MTAxX3BoeV9wcm9iZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQotewotCWVmeC0+bWRpby5tbWRzID0gVEVOWFBSRVNTX1JFUVVJUkVEX0RFVlM7Ci0JZWZ4LT5tZGlvLm1vZGVfc3VwcG9ydCA9IE1ESU9fU1VQUE9SVFNfQzQ1IHwgTURJT19FTVVMQVRFX0MyMjsKLQllZngtPmxvb3BiYWNrX21vZGVzID0gU0ZYNzEwMV9MT09QQkFDS1MgfCBGQUxDT05fWE1BQ19MT09QQkFDS1M7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2Z0OTAwMV9waHlfcHJvYmUoc3RydWN0IGVmeF9uaWMgKmVmeCkKLXsKLQllZngtPm1kaW8ubW1kcyA9IFRFTlhQUkVTU19SRVFVSVJFRF9ERVZTOwotCWVmeC0+bWRpby5tb2RlX3N1cHBvcnQgPSBNRElPX1NVUFBPUlRTX0M0NSB8IE1ESU9fRU1VTEFURV9DMjI7Ci0JZWZ4LT5sb29wYmFja19tb2RlcyA9IChTRlQ5MDAxX0xPT1BCQUNLUyB8IEZBTENPTl9YTUFDX0xPT1BCQUNLUyB8Ci0JCQkgICAgICAgRkFMQ09OX0dNQUNfTE9PUEJBQ0tTKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZW54cHJlc3NfcGh5X2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3N0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9wcm9iZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCXN0cnVjdCB0ZW54cHJlc3NfcGh5X2RhdGEgKnBoeV9kYXRhOwotCWludCByYyA9IDA7CisJaW50IHJjOwogCi0JZmFsY29uX2JvYXJkKGVmeCktPnR5cGUtPmluaXRfcGh5KGVmeCk7Ci0KKwkvKiBBbGxvY2F0ZSBwaHkgcHJpdmF0ZSBzdG9yYWdlICovCiAJcGh5X2RhdGEgPSBremFsbG9jKHNpemVvZigqcGh5X2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBoeV9kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAllZngtPnBoeV9kYXRhID0gcGh5X2RhdGE7CiAJcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKIAorCS8qIENyZWF0ZSBhbnkgc3BlY2lhbCBmaWxlcyAqLworCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1NGVDkwMDFCKSB7CisJCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZlZngtPnBjaV9kZXYtPmRldiwKKwkJCQkJJmRldl9hdHRyX3BoeV9zaG9ydF9yZWFjaCk7CisJCWlmIChyYykKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7CisJCWVmeC0+bWRpby5tbWRzID0gVEVOWFBSRVNTX1JFUVVJUkVEX0RFVlM7CisJCWVmeC0+bWRpby5tb2RlX3N1cHBvcnQgPSBNRElPX1NVUFBPUlRTX0M0NTsKKworCQllZngtPmxvb3BiYWNrX21vZGVzID0gU0ZYNzEwMV9MT09QQkFDS1MgfCBGQUxDT05fWE1BQ19MT09QQkFDS1M7CisKKwkJZWZ4LT5saW5rX2FkdmVydGlzaW5nID0gKEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX0F1dG9uZWcgfAorCQkJCQkgQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwpOworCX0gZWxzZSB7CisJCWVmeC0+bWRpby5tbWRzID0gVEVOWFBSRVNTX1JFUVVJUkVEX0RFVlM7CisJCWVmeC0+bWRpby5tb2RlX3N1cHBvcnQgPSBNRElPX1NVUFBPUlRTX0M0NSB8IE1ESU9fRU1VTEFURV9DMjI7CisKKwkJZWZ4LT5sb29wYmFja19tb2RlcyA9IChTRlQ5MDAxX0xPT1BCQUNLUyB8CisJCQkJICAgICAgIEZBTENPTl9YTUFDX0xPT1BCQUNLUyB8IAorCQkJCSAgICAgICBGQUxDT05fR01BQ19MT09QQkFDS1MpOworCisJCWVmeC0+bGlua19hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEX1RQIHwgQURWRVJUSVNFRF9BdXRvbmVnIHwKKwkJCQkJIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlrZnJlZShlZngtPnBoeV9kYXRhKTsKKwllZngtPnBoeV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJaW50IHJjOworCisJZmFsY29uX2JvYXJkKGVmeCktPnR5cGUtPmluaXRfcGh5KGVmeCk7CisKIAlpZiAoIShlZngtPnBoeV9tb2RlICYgUEhZX01PREVfU1BFQ0lBTCkpIHsKIAkJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZUOTAwMUEpIHsKIAkJCWludCByZWc7CkBAIC0zNDEsNDQgKzM3MSwyNyBAQAogCiAJCXJjID0gZWZ4X21kaW9fd2FpdF9yZXNldF9tbWRzKGVmeCwgVEVOWFBSRVNTX1JFUVVJUkVEX0RFVlMpOwogCQlpZiAocmMgPCAwKQotCQkJZ290byBmYWlsOworCQkJcmV0dXJuIHJjOwogCiAJCXJjID0gZWZ4X21kaW9fY2hlY2tfbW1kcyhlZngsIFRFTlhQUkVTU19SRVFVSVJFRF9ERVZTLCAwKTsKIAkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gZmFpbDsKKwkJCXJldHVybiByYzsKIAl9CiAKIAlyYyA9IHRlbnhwcmVzc19pbml0KGVmeCk7CiAJaWYgKHJjIDwgMCkKLQkJZ290byBmYWlsOworCQlyZXR1cm4gcmM7CiAKLQkvKiBJbml0aWFsaXNlIGFkdmVydGlzaW5nIGZsYWdzICovCi0JZWZ4LT5saW5rX2FkdmVydGlzaW5nID0gKEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX0F1dG9uZWcgfAotCQkJCSAgQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwpOwotCWlmIChlZngtPnBoeV90eXBlICE9IFBIWV9UWVBFX1NGWDcxMDEpCi0JCWVmeC0+bGlua19hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCk7CisJLyogUmVpbml0aWFsaXNlIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwogCWVmeF9saW5rX3NldF93YW50ZWRfZmMoZWZ4LCBlZngtPndhbnRlZF9mYyk7CiAJZWZ4X21kaW9fYW5fcmVjb25maWd1cmUoZWZ4KTsKIAotCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1NGVDkwMDFCKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZlZngtPnBjaV9kZXYtPmRldiwKLQkJCQkJJmRldl9hdHRyX3BoeV9zaG9ydF9yZWFjaCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZmFpbDsKLQl9Ci0KIAlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiAvIDUpOyAvKiAyMDBtcyAqLwogCiAJLyogTGV0IFhHWFMgYW5kIFNlckRlcyBvdXQgb2YgcmVzZXQgKi8KIAlmYWxjb25fcmVzZXRfeGF1aShlZngpOwogCiAJcmV0dXJuIDA7Ci0KLSBmYWlsOgotCWtmcmVlKGVmeC0+cGh5X2RhdGEpOwotCWVmeC0+cGh5X2RhdGEgPSBOVUxMOwotCXJldHVybiByYzsKIH0KIAogLyogUGVyZm9ybSBhICJzcGVjaWFsIHNvZnR3YXJlIHJlc2V0IiBvbiB0aGUgUEhZLiBUaGUgY2FsbGVyIGlzCkBAIC01ODksMjUgKzYwMiwyNiBAQAogCXJldHVybiAhZWZ4X2xpbmtfc3RhdGVfZXF1YWwoJmVmeC0+bGlua19zdGF0ZSwgJm9sZF9zdGF0ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlbnhwcmVzc19waHlfZmluaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorc3RhdGljIHZvaWQgc2Z4NzEwMV9waHlfZmluaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCWludCByZWc7CiAKKwkvKiBQb3dlciBkb3duIHRoZSBMTlBHQSAqLworCXJlZyA9ICgxIDw8IFBNQV9QTURfTE5QR0FfUE9XRVJET1dOX0xCTik7CisJZWZ4X21kaW9fd3JpdGUoZWZ4LCBNRElPX01NRF9QTUFQTUQsIFBNQV9QTURfWENPTlRST0xfUkVHLCByZWcpOworCisJLyogV2FpdGluZyBoZXJlIGVuc3VyZXMgdGhhdCB0aGUgYm9hcmQgZmluaSwgd2hpY2ggY2FuIHR1cm4KKwkgKiBvZmYgdGhlIHBvd2VyIHRvIHRoZSBQSFksIHdvbid0IGdldCBydW4gdW50aWwgdGhlIExOUEdBCisJICogcG93ZXJkb3duIGhhcyBiZWVuIGdpdmVuIGxvbmcgZW5vdWdoIHRvIGNvbXBsZXRlLiAqLworCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKExOUEdBX1BET1dOX1dBSVQpOyAvKiAyMDAgbXMgKi8KK30KKworc3RhdGljIHZvaWQgdGVueHByZXNzX3BoeV9yZW1vdmUoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlQ5MDAxQikKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZlZngtPnBjaV9kZXYtPmRldiwKIAkJCQkgICAmZGV2X2F0dHJfcGh5X3Nob3J0X3JlYWNoKTsKIAotCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1NGWDcxMDEpIHsKLQkJLyogUG93ZXIgZG93biB0aGUgTE5QR0EgKi8KLQkJcmVnID0gKDEgPDwgUE1BX1BNRF9MTlBHQV9QT1dFUkRPV05fTEJOKTsKLQkJZWZ4X21kaW9fd3JpdGUoZWZ4LCBNRElPX01NRF9QTUFQTUQsIFBNQV9QTURfWENPTlRST0xfUkVHLCByZWcpOwotCi0JCS8qIFdhaXRpbmcgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGJvYXJkIGZpbmksIHdoaWNoIGNhbiB0dXJuCi0JCSAqIG9mZiB0aGUgcG93ZXIgdG8gdGhlIFBIWSwgd29uJ3QgZ2V0IHJ1biB1bnRpbCB0aGUgTE5QR0EKLQkJICogcG93ZXJkb3duIGhhcyBiZWVuIGdpdmVuIGxvbmcgZW5vdWdoIHRvIGNvbXBsZXRlLiAqLwotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShMTlBHQV9QRE9XTl9XQUlUKTsgLyogMjAwIG1zICovCi0JfQotCiAJa2ZyZWUoZWZ4LT5waHlfZGF0YSk7CiAJZWZ4LT5waHlfZGF0YSA9IE5VTEw7CiB9CkBAIC04MTksMTEgKzgzMywxMiBAQAogfQogCiBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9zZng3MTAxX3BoeV9vcHMgPSB7Ci0JLnByb2JlCQkgID0gc2Z4NzEwMV9waHlfcHJvYmUsCisJLnByb2JlCQkgID0gdGVueHByZXNzX3BoeV9wcm9iZSwKIAkuaW5pdCAgICAgICAgICAgICA9IHRlbnhwcmVzc19waHlfaW5pdCwKIAkucmVjb25maWd1cmUgICAgICA9IHRlbnhwcmVzc19waHlfcmVjb25maWd1cmUsCiAJLnBvbGwgICAgICAgICAgICAgPSB0ZW54cHJlc3NfcGh5X3BvbGwsCi0JLmZpbmkgICAgICAgICAgICAgPSB0ZW54cHJlc3NfcGh5X2ZpbmksCisJLmZpbmkgICAgICAgICAgICAgPSBzZng3MTAxX3BoeV9maW5pLAorCS5yZW1vdmUJCSAgPSB0ZW54cHJlc3NfcGh5X3JlbW92ZSwKIAkuZ2V0X3NldHRpbmdzCSAgPSB0ZW54cHJlc3NfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJICA9IHRlbnhwcmVzc19zZXRfc2V0dGluZ3MsCiAJLnNldF9ucGFnZV9hZHYgICAgPSBzZng3MTAxX3NldF9ucGFnZV9hZHYsCkBAIC04MzIsMTEgKzg0NywxMiBAQAogfTsKIAogc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fc2Z0OTAwMV9waHlfb3BzID0gewotCS5wcm9iZQkJICA9IHNmdDkwMDFfcGh5X3Byb2JlLAorCS5wcm9iZQkJICA9IHRlbnhwcmVzc19waHlfcHJvYmUsCiAJLmluaXQgICAgICAgICAgICAgPSB0ZW54cHJlc3NfcGh5X2luaXQsCiAJLnJlY29uZmlndXJlICAgICAgPSB0ZW54cHJlc3NfcGh5X3JlY29uZmlndXJlLAogCS5wb2xsICAgICAgICAgICAgID0gdGVueHByZXNzX3BoeV9wb2xsLAotCS5maW5pICAgICAgICAgICAgID0gdGVueHByZXNzX3BoeV9maW5pLAorCS5maW5pICAgICAgICAgICAgID0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKKwkucmVtb3ZlCQkgID0gdGVueHByZXNzX3BoeV9yZW1vdmUsCiAJLmdldF9zZXR0aW5ncwkgID0gdGVueHByZXNzX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCSAgPSB0ZW54cHJlc3Nfc2V0X3NldHRpbmdzLAogCS5zZXRfbnBhZ2VfYWR2ICAgID0gc2Z0OTAwMV9zZXRfbnBhZ2VfYWR2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCBlNjY5Zjk0Li5hOGI3MGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtODIxLDggKzgyMSw2IEBACiAJCQkJCSAgIEVGWF9UWFFfTUFTS107CiAJCWVmeF90c29oX2ZyZWUodHhfcXVldWUsIGJ1ZmZlcik7CiAJCUVGWF9CVUdfT05fUEFSQU5PSUQoYnVmZmVyLT5za2IpOwotCQlidWZmZXItPmxlbiA9IDA7Ci0JCWJ1ZmZlci0+Y29udGludWF0aW9uID0gdHJ1ZTsKIAkJaWYgKGJ1ZmZlci0+dW5tYXBfbGVuKSB7CiAJCQl1bm1hcF9hZGRyID0gKGJ1ZmZlci0+ZG1hX2FkZHIgKyBidWZmZXItPmxlbiAtCiAJCQkJICAgICAgYnVmZmVyLT51bm1hcF9sZW4pOwpAQCAtODM2LDYgKzgzNCw4IEBACiAJCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWJ1ZmZlci0+dW5tYXBfbGVuID0gMDsKIAkJfQorCQlidWZmZXItPmxlbiA9IDA7CisJCWJ1ZmZlci0+Y29udGludWF0aW9uID0gdHJ1ZTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCAxYzAxYjk2Li4yZDI4ZDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC00Njg0LDYgKzQ2ODQsNyBAQAogCUlOSVRfV09SSygmaHctPnJlc3RhcnRfd29yaywgc2t5Ml9yZXN0YXJ0KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisJcGRldi0+ZDNfZGVsYXkgPSAxNTA7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCAwMWU5OWYyLi4yODM0YTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtODQ5LDEzICs4NDksMTMgQEAKIAlpZiAoc2stPnNrX3NsZWVwICYmIHdhaXRxdWV1ZV9hY3RpdmUoc2stPnNrX3NsZWVwKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoc2stPnNrX3NsZWVwKTsKIAotCXR1biA9IGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayktPnR1bjsKKwl0dW4gPSB0dW5fc2soc2spLT50dW47CiAJa2lsbF9mYXN5bmMoJnR1bi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9PVVQpOwogfQogCiBzdGF0aWMgdm9pZCB0dW5fc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JZnJlZV9uZXRkZXYoY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuLT5kZXYpOworCWZyZWVfbmV0ZGV2KHR1bl9zayhzayktPnR1bi0+ZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwcm90byB0dW5fcHJvdG8gPSB7CkBAIC05OTAsNyArOTkwLDcgQEAKIAkJc2stPnNrX3dyaXRlX3NwYWNlID0gdHVuX3NvY2tfd3JpdGVfc3BhY2U7CiAJCXNrLT5za19zbmRidWYgPSBJTlRfTUFYOwogCi0JCWNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayktPnR1biA9IHR1bjsKKwkJdHVuX3NrKHNrKS0+dHVuID0gdHVuOwogCiAJCXNlY3VyaXR5X3R1bl9kZXZfcG9zdF9jcmVhdGUoc2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCBhZmFmMDg4Li40MWFkMmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTE1NjMsNyArMTU2MywxMCBAQAogCiBzdGF0aWMgdm9pZCB1Z2V0aF9xdWllc2NlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKIHsKLQkvKiBXYWl0IGZvciBhbmQgcHJldmVudCBhbnkgZnVydGhlciB4bWl0cy4gKi8KKwkvKiBQcmV2ZW50IGFueSBmdXJ0aGVyIHhtaXRzLCBwbHVzIGRldGFjaCB0aGUgZGV2aWNlLiAqLworCW5ldGlmX2RldmljZV9kZXRhY2godWdldGgtPm5kZXYpOworCisJLyogV2FpdCBmb3IgYW55IGN1cnJlbnQgeG1pdHMgdG8gZmluaXNoLiAqLwogCW5ldGlmX3R4X2Rpc2FibGUodWdldGgtPm5kZXYpOwogCiAJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHRvIGF2b2lkIE5BUEkgcmVzY2hlZHVsaW5nLiAqLwpAQCAtMTU3Nyw3ICsxNTgwLDcgQEAKIHsKIAluYXBpX2VuYWJsZSgmdWdldGgtPm5hcGkpOwogCWVuYWJsZV9pcnEodWdldGgtPnVnX2luZm8tPnVmX2luZm8uaXJxKTsKLQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModWdldGgtPm5kZXYpOworCW5ldGlmX2RldmljZV9hdHRhY2godWdldGgtPm5kZXYpOwogfQogCiAvKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgY29udHJvbGxlciBtaWdodCBuZWVkIHRvIGJlIG1hZGUKQEAgLTE2NDgsMjUgKzE2NTEsMjggQEAKIAkJCXVnZXRoLT5vbGRzcGVlZCA9IHBoeWRldi0+c3BlZWQ7CiAJCX0KIAotCQkvKgotCQkgKiBUbyBjaGFuZ2UgdGhlIE1BQyBjb25maWd1cmF0aW9uIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUKLQkJICogY29udHJvbGxlci4gVG8gZG8gc28sIHdlIGhhdmUgdG8gZWl0aGVyIGdyYWIgdWdldGgtPmxvY2ssCi0JCSAqIHdoaWNoIGlzIGEgYmFkIGlkZWEgc2luY2UgJ2dyYWNlZnVsIHN0b3AnIGNvbW1hbmRzIG1pZ2h0Ci0JCSAqIHRha2UgcXVpdGUgYSB3aGlsZSwgb3Igd2UgY2FuIHF1aWVzY2UgZHJpdmVyJ3MgYWN0aXZpdHkuCi0JCSAqLwotCQl1Z2V0aF9xdWllc2NlKHVnZXRoKTsKLQkJdWdldGhfZGlzYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKLQotCQlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMiwgdGVtcHZhbCk7Ci0JCW91dF9iZTMyKCZ1Zl9yZWdzLT51cHNtciwgdXBzbXIpOwotCi0JCXVnZXRoX2VuYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKLQkJdWdldGhfYWN0aXZhdGUodWdldGgpOwotCiAJCWlmICghdWdldGgtPm9sZGxpbmspIHsKIAkJCW5ld19zdGF0ZSA9IDE7CiAJCQl1Z2V0aC0+b2xkbGluayA9IDE7CiAJCX0KKworCQlpZiAobmV3X3N0YXRlKSB7CisJCQkvKgorCQkJICogVG8gY2hhbmdlIHRoZSBNQUMgY29uZmlndXJhdGlvbiB3ZSBuZWVkIHRvIGRpc2FibGUKKwkJCSAqIHRoZSBjb250cm9sbGVyLiBUbyBkbyBzbywgd2UgaGF2ZSB0byBlaXRoZXIgZ3JhYgorCQkJICogdWdldGgtPmxvY2ssIHdoaWNoIGlzIGEgYmFkIGlkZWEgc2luY2UgJ2dyYWNlZnVsCisJCQkgKiBzdG9wJyBjb21tYW5kcyBtaWdodCB0YWtlIHF1aXRlIGEgd2hpbGUsIG9yIHdlIGNhbgorCQkJICogcXVpZXNjZSBkcml2ZXIncyBhY3Rpdml0eS4KKwkJCSAqLworCQkJdWdldGhfcXVpZXNjZSh1Z2V0aCk7CisJCQl1Z2V0aF9kaXNhYmxlKHVnZXRoLCBDT01NX0RJUl9SWF9BTkRfVFgpOworCisJCQlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMiwgdGVtcHZhbCk7CisJCQlvdXRfYmUzMigmdWZfcmVncy0+dXBzbXIsIHVwc21yKTsKKworCQkJdWdldGhfZW5hYmxlKHVnZXRoLCBDT01NX0RJUl9SWF9BTkRfVFgpOworCQkJdWdldGhfYWN0aXZhdGUodWdldGgpOworCQl9CiAJfSBlbHNlIGlmICh1Z2V0aC0+b2xkbGluaykgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCXVnZXRoLT5vbGRsaW5rID0gMDsKQEAgLTMyNzMsNyArMzI3OSw3IEBACiAJCS8qIEhhbmRsZSB0aGUgdHJhbnNtaXR0ZWQgYnVmZmVyIGFuZCByZWxlYXNlICovCiAJCS8qIHRoZSBCRCB0byBiZSB1c2VkIHdpdGggdGhlIGN1cnJlbnQgZnJhbWUgICovCiAKLQkJaWYgKChiZCA9PSB1Z2V0aC0+dHhCZFt0eFFdKSAmJiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpID09IDApKQorCQlpZiAoYmQgPT0gdWdldGgtPnR4QmRbdHhRXSkgLyogcXVldWUgZW1wdHk/ICovCiAJCQlicmVhazsKIAogCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggNTkzZTAxZi4uNjExYjgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JLyogUHJvY2Vzc29yIHR5cGUgZm9yIGNhY2hlIGFsaWdubWVudC4gKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0zODksNiArMzkwLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKIAogCS8qIEZyZXF1ZW50bHkgdXNlZCB2YWx1ZXM6IGtlZXAgc29tZSBhZGphY2VudCBmb3IgY2FjaGUgZWZmZWN0LiAqLwogCXUzMiBxdWlya3M7CkBAIC00MDcsNiArNDA5LDcgQEAKIHN0YXRpYyBpbnQgIG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWx1ZSk7CiBzdGF0aWMgaW50ICByaGluZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgcmhpbmVfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcmhpbmVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBuZXRkZXZfdHhfdCByaGluZV9zdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC03NzUsNiArNzc4LDggQEAKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCXNwaW5fbG9ja19pbml0KCZycC0+bG9jayk7CisJSU5JVF9XT1JLKCZycC0+cmVzZXRfdGFzaywgcmhpbmVfcmVzZXRfdGFzayk7CisKIAlycC0+bWlpX2lmLmRldiA9IGRldjsKIAlycC0+bWlpX2lmLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKIAlycC0+bWlpX2lmLm1kaW9fd3JpdGUgPSBtZGlvX3dyaXRlOwpAQCAtMTE3OSwyMiArMTE4NCwxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByaGluZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCByaGluZV9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTQuNHgsIFBIWSBzdGF0dXMgIgotCSAgICAgICAiJTQuNHgsIHJlc2V0dGluZy4uLlxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQxNihpb2FkZHIgKyBJbnRyU3RhdHVzKSwKLQkgICAgICAgbWRpb19yZWFkKGRldiwgcnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTVNSKSk7CisJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGluZV9wcml2YXRlLAorCQkJCQkJcmVzZXRfdGFzayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJwLT5kZXY7CiAKIAkvKiBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCByeCBpbnRlcnJ1cHRzICovCiAJZGlzYWJsZV9pcnEocnAtPnBkZXYtPmlycSk7CiAKIAluYXBpX2Rpc2FibGUoJnJwLT5uYXBpKTsKIAotCXNwaW5fbG9jaygmcnAtPmxvY2spOworCXNwaW5fbG9ja19iaCgmcnAtPmxvY2spOwogCiAJLyogY2xlYXIgYWxsIGRlc2NyaXB0b3JzICovCiAJZnJlZV90YnVmcyhkZXYpOwpAQCAtMTIwNiw3ICsxMjA3LDcgQEAKIAlyaGluZV9jaGlwX3Jlc2V0KGRldik7CiAJaW5pdF9yZWdpc3RlcnMoZGV2KTsKIAotCXNwaW5fdW5sb2NrKCZycC0+bG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnJwLT5sb2NrKTsKIAllbmFibGVfaXJxKHJwLT5wZGV2LT5pcnEpOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CkBAIC0xMjE0LDYgKzEyMTUsMTkgQEAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIHJoaW5lX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTQuNHgsIFBIWSBzdGF0dXMgIgorCSAgICAgICAiJTQuNHgsIHJlc2V0dGluZy4uLlxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQxNihpb2FkZHIgKyBJbnRyU3RhdHVzKSwKKwkgICAgICAgbWRpb19yZWFkKGRldiwgcnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTVNSKSk7CisKKwlzY2hlZHVsZV93b3JrKCZycC0+cmVzZXRfdGFzayk7Cit9CisKIHN0YXRpYyBuZXRkZXZfdHhfdCByaGluZV9zdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTE4MzAsMTAgKzE4NDQsMTEgQEAKIAlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CiAKLQlzcGluX2xvY2tfaXJxKCZycC0+bG9jayk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJbmFwaV9kaXNhYmxlKCZycC0+bmFwaSk7CisJY2FuY2VsX3dvcmtfc3luYygmcnAtPnJlc2V0X3Rhc2spOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJnJwLT5sb2NrKTsKIAogCWlmIChkZWJ1ZyA+IDEpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCmluZGV4IGYxYzRiMmEuLjBmZGZkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwpAQCAtNDA4NywyMSArNDA4NywyMSBAQAogCQlnb3RvIF9leGl0MDsKIAl9CiAKLQlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKSkgeworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkgewogCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAogCQkJIiVzIDogdXNpbmcgNjRiaXQgRE1BIiwgX19mdW5jX18pOwogCiAJCWhpZ2hfZG1hID0gMTsKIAogCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsCi0JCQkJCQkweGZmZmZmZmZmZmZmZmZmZmZVTEwpKSB7CisJCQkJCQlETUFfQklUX01BU0soNjQpKSkgewogCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJCSIlcyA6IHVuYWJsZSB0byBvYnRhaW4gNjRiaXQgRE1BIGZvciAiCiAJCQkJImNvbnNpc3RlbnQgYWxsb2NhdGlvbnMiLCBfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBfZXhpdDE7CiAJCX0KLQl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZVTCkpIHsKKwl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CiAJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCiAJCQkiJXMgOiB1c2luZyAzMmJpdCBETUEiLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IGE0YzA4NmYuLmU2M2I3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtMTkwMywxNyArMTkwMyw2IEBACiAJCXJ4cy0+bm9pc2UgPSBzYy0+YWgtPmFoX25vaXNlX2Zsb29yOwogCQlyeHMtPnNpZ25hbCA9IHJ4cy0+bm9pc2UgKyBycy5yc19yc3NpOwogCi0JCS8qIEFuIHJzc2kgb2YgMzUgaW5kaWNhdGVzIHlvdSBzaG91bGQgYmUgYWJsZSB1c2UKLQkJICogNTQgTWJwcyByZWxpYWJseS4gQSBtb3JlIGVsYWJvcmF0ZSBzY2hlbWUgY2FuIGJlIHVzZWQKLQkJICogaGVyZSBidXQgaXQgcmVxdWlyZXMgYSBtYXAgb2YgU05SL3Rocm91Z2hwdXQgZm9yIGVhY2gKLQkJICogcG9zc2libGUgbW9kZSB1c2VkICovCi0JCXJ4cy0+cXVhbCA9IHJzLnJzX3Jzc2kgKiAxMDAgLyAzNTsKLQotCQkvKiByc3NpIGNhbiBiZSBtb3JlIHRoYW4gMzUgdGhvdWdoLCBhbnl0aGluZyBhYm92ZSB0aGF0Ci0JCSAqIHNob3VsZCBiZSBjb25zaWRlcmVkIGF0IDEwMCUgKi8KLQkJaWYgKHJ4cy0+cXVhbCA+IDEwMCkKLQkJCXJ4cy0+cXVhbCA9IDEwMDsKLQogCQlyeHMtPmFudGVubmEgPSBycy5yc19hbnRlbm5hOwogCQlyeHMtPnJhdGVfaWR4ID0gYXRoNWtfaHdfdG9fZHJpdmVyX3JpeChzYywgcnMucnNfcmF0ZSk7CiAJCXJ4cy0+ZmxhZyB8PSBhdGg1a19yeF9kZWNyeXB0ZWQoc2MsIGRzLCBza2IsICZycyk7CkBAIC0yMzgxLDYgKzIzNzAsOSBAQAogCSAqLwogCWF0aDVrX3N0b3BfbG9ja2VkKHNjKTsKIAorCS8qIFNldCBQSFkgY2FsaWJyYXRpb24gaW50ZXJ2YWwgKi8KKwlhaC0+YWhfY2FsX2ludHZhbCA9IGF0aDVrX2NhbGludGVydmFsOworCiAJLyoKIAkgKiBUaGUgYmFzaWMgaW50ZXJmYWNlIHRvIHNldHRpbmcgdGhlIGhhcmR3YXJlIGluIGEgZ29vZAogCSAqIHN0YXRlIGlzIGBgcmVzZXQnJy4gIE9uIHJldHVybiB0aGUgaGFyZHdhcmUgaXMga25vd24gdG8KQEAgLTI0MDgsMTAgKzI0MDAsNiBAQAogCiAJLyogU2V0IGFjayB0byBiZSBzZW50IGF0IGxvdyBiaXQtcmF0ZXMgKi8KIAlhdGg1a19od19zZXRfYWNrX2JpdHJhdGVfaGlnaChhaCwgZmFsc2UpOwotCi0JLyogU2V0IFBIWSBjYWxpYnJhdGlvbiBpbnRldmFsICovCi0JYWgtPmFoX2NhbF9pbnR2YWwgPSBhdGg1a19jYWxpbnRlcnZhbDsKLQogCXJldCA9IDA7CiBkb25lOgogCW1taW93YigpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCmluZGV4IDcxYjg0ZDkuLmVmYzQyMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCQl3YWl0ID0gd2FpdF90aW1lOwogCQl3aGlsZSAoYXRoOWtfaHdfbnVtdHhwZW5kaW5nKGFoLCBxKSkgewogCQkJaWYgKCgtLXdhaXQpID09IDApIHsKLQkJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1FVRVVFLAorCQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCiAJCQkJCSAgIkZhaWxlZCB0byBzdG9wIFRYIERNQSBpbiAxMDAgIgogCQkJCQkgICJtc2VjIGFmdGVyIGtpbGxpbmcgbGFzdCBmcmFtZVxuIik7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKaW5kZXggMGM4Nzc3MS4uZTE4NTQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaApAQCAtNzcsNiArNzcsOSBAQAogI2RlZmluZSBBVEg5S19UWEVSUl9YVFhPUCAgICAgICAgICAweDA4CiAjZGVmaW5lIEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQgIDB4MTAKICNkZWZpbmUgQVRIOUtfVFhfQUNLRUQJCSAgIDB4MjAKKyNkZWZpbmUgQVRIOUtfVFhFUlJfTUFTSwkJCQkJCVwKKwkoQVRIOUtfVFhFUlJfWFJFVFJZIHwgQVRIOUtfVFhFUlJfRklMVCB8IEFUSDlLX1RYRVJSX0ZJRk8gfAlcCisJIEFUSDlLX1RYRVJSX1hUWE9QIHwgQVRIOUtfVFhFUlJfVElNRVJfRVhQSVJFRCkKIAogI2RlZmluZSBBVEg5S19UWF9CQSAgICAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUSDlLX1RYX1BXUk1HTVQgICAgICAgICAgIDB4MDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IGM0ODc0MzQuLjk5NmViOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMTk3Myw2ICsxOTczLDkgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKIAlpbnQgcjsKIAorCS8qIFN0b3AgQU5JICovCisJZGVsX3RpbWVyX3N5bmMoJmNvbW1vbi0+YW5pLnRpbWVyKTsKKwogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKIAlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CkBAIC0yMDE0LDYgKzIwMTcsOSBAQAogCQl9CiAJfQogCisJLyogU3RhcnQgQU5JICovCisJYXRoX3N0YXJ0X2FuaShjb21tb24pOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTI1MDgsNiArMjUxNCw5IEBACiAJCXJldHVybjsgLyogYW5vdGhlciB3aXBoeSBzdGlsbCBpbiB1c2UgKi8KIAl9CiAKKwkvKiBFbnN1cmUgSFcgaXMgYXdha2Ugd2hlbiB3ZSB0cnkgdG8gc2h1dCBpdCBkb3duLiAqLworCWF0aDlrX3BzX3dha2V1cChzYyk7CisKIAlpZiAoYWgtPmJ0Y29leF9ody5lbmFibGVkKSB7CiAJCWF0aDlrX2h3X2J0Y29leF9kaXNhYmxlKGFoKTsKIAkJaWYgKGFoLT5idGNvZXhfaHcuc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQpAQCAtMjUyOCw2ICsyNTM3LDkgQEAKIAkvKiBkaXNhYmxlIEhBTCBhbmQgcHV0IGgvdyB0byBzbGVlcCAqLwogCWF0aDlrX2h3X2Rpc2FibGUoYWgpOwogCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMSwgMSk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisKKwkvKiBGaW5hbGx5LCBwdXQgdGhlIGNoaXAgaW4gRlVMTCBTTEVFUCBtb2RlICovCiAJYXRoOWtfc2V0cG93ZXIoc2MsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwogCiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0lOVkFMSUQ7CkBAIC0yNjQxLDggKzI2NTMsMTAgQEAKIAlpZiAoKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fAogCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CiAJICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlhdGg5a19od19zdG9wdHhkbWEoc2MtPnNjX2FoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCQlhdGhfYmVhY29uX3JldHVybihzYywgYXZwKTsKKwkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJfQogCiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TOwpAQCAtMzA5MSwxNSArMzEwNSwyMSBAQAogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgorCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlhdGhfdHhfYWdncl9zdGFydChzYywgc3RhLCB0aWQsIHNzbik7CiAJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDoKKwkJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAkJYXRoX3R4X2FnZ3Jfc3RvcChzYywgc3RhLCB0aWQpOwogCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF90eF9hZ2dyX3Jlc3VtZShzYywgc3RhLCB0aWQpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0ZBVEFMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCmluZGV4IDUzMjFmNzMuLmY3YWY1ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgQVRIX1BDSUVfQ0FQX0xJTktfQ1RSTCwgYXNwbSk7CiB9CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgYXRoX2J1c19vcHMgYXRoX3BjaV9idXNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfcGNpX2J1c19vcHMgPSB7CiAJLnJlYWRfY2FjaGVzaXplID0gYXRoX3BjaV9yZWFkX2NhY2hlc2l6ZSwKIAkuY2xlYW51cCA9IGF0aF9wY2lfY2xlYW51cCwKIAkuZWVwcm9tX3JlYWQgPSBhdGhfcGNpX2VlcHJvbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKaW5kZXggMmExMWNjNS4uZmExMmI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCkBAIC0xMTA4LDExICsxMTA4LDExIEBACiAJaWYgKG5wZW5kKSB7CiAJCWludCByOwogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCSAgIlVuYWJsZSB0byBzdG9wIFR4RE1BLiBSZXNldCBIQUwhXG4iKTsKIAogCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+Y3VyY2hhbiwgdHJ1ZSk7CisJCXIgPSBhdGg5a19od19yZXNldChhaCwgc2MtPnNjX2FoLT5jdXJjaGFuLCBmYWxzZSk7CiAJCWlmIChyKQogCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCQkgICJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZFxuIiwKQEAgLTE0MTQsMTcgKzE0MTQsOSBAQAogCSAqIEZvciBIVCBjYXBhYmxlIHN0YXRpb25zLCB3ZSBzYXZlIHRpZG5vIGZvciBsYXRlciB1c2UuCiAJICogV2UgYWxzbyBvdmVycmlkZSBzZXFubyBzZXQgYnkgdXBwZXIgbGF5ZXIgd2l0aCB0aGUgb25lCiAJICogaW4gdHggYWdncmVnYXRpb24gc3RhdGUuCi0JICoKLQkgKiBJZiBmcmFnbWVudGF0aW9uIGlzIG9uLCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzCi0JICogbm90IG92ZXJyaWRkZW4sIHNpbmNlIGl0IGhhcyBiZWVuCi0JICogaW5jcmVtZW50ZWQgYnkgdGhlIGZyYWdtZW50YXRpb24gcm91dGluZS4KLQkgKgotCSAqIEZJWE1FOiBjaGVjayBpZiB0aGUgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgZXhjZWVkcwotCSAqIElFRUU4MDIxMSBtYXguCiAJICovCiAJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOwotCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNih0aWQtPnNlcV9uZXh0IDw8Ci0JCQlJRUVFODAyMTFfU0VRX1NFUV9TSElGVCk7CisJaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHRpZC0+c2VxX25leHQgPDwgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOwogCWJmLT5iZl9zZXFubyA9IHRpZC0+c2VxX25leHQ7CiAJSU5DUih0aWQtPnNlcV9uZXh0LCBJRUVFODAyMTFfU0VRX01BWCk7CiB9CkBAIC0xNjM2LDcgKzE2MjgsOCBAQAogCQliZi0+YmZfa2V5aXggPSBBVEg5S19UWEtFWUlYX0lOVkFMSUQ7CiAJfQogCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikpCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgJiYgYmZfaXNodChiZikgJiYKKwkgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikpCiAJCWFzc2lnbl9hZ2dyX3RpZF9zZXFubyhza2IsIGJmKTsKIAogCWJmLT5iZl9tcGR1ID0gc2tiOwpAQCAtMTc4MCw3ICsxNzczLDggQEAKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7Ci0JaW50IGhkcmxlbiwgcGFkc2l6ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlpbnQgcGFkcG9zLCBwYWRzaXplOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgdHhjdGw7CiAKQEAgLTE3OTIsNyArMTc4Niw2IEBACiAJICogQlNTZXMuCiAJICovCiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKQogCQkJc2MtPnR4LnNlcV9ubyArPSAweDEwOwogCQloZHItPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOwpAQCAtMTgwMCw5ICsxNzkzLDkgQEAKIAl9CiAKIAkvKiBBZGQgdGhlIHBhZGRpbmcgYWZ0ZXIgdGhlIGhlYWRlciBpZiB0aGlzIGlzIG5vdCBhbHJlYWR5IGRvbmUgKi8KLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCWlmIChoZHJsZW4gJiAzKSB7Ci0JCXBhZHNpemUgPSBoZHJsZW4gJSA0OworCXBhZHBvcyA9IGF0aDlrX2Ntbl9wYWRwb3MoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlwYWRzaXplID0gcGFkcG9zICYgMzsKKwlpZiAocGFkc2l6ZSAmJiBza2ItPmxlbj5wYWRwb3MpIHsKIAkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgcGFkc2l6ZSkgewogCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19YTUlULAogCQkJCSAgIlRYIENBQlEgcGFkZGluZyBmYWlsZWRcbiIpOwpAQCAtMTgxMCw3ICsxODAzLDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQlza2JfcHVzaChza2IsIHBhZHNpemUpOwotCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgcGFkc2l6ZSwgaGRybGVuKTsKKwkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIHBhZHNpemUsIHBhZHBvcyk7CiAJfQogCiAJdHhjdGwudHhxID0gc2MtPmJlYWNvbi5jYWJxOwpAQCAtMTgzOCw3ICsxODMxLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwotCWludCBoZHJsZW4sIHBhZHNpemU7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKiBoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaW50IHBhZHBvcywgcGFkc2l6ZTsKIAogCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYIGNvbXBsZXRlOiBza2I6ICVwXG4iLCBza2IpOwogCkBAIC0xODUzLDE0ICsxODQ3LDE0IEBACiAJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAl9CiAKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCXBhZHNpemUgPSBoZHJsZW4gJiAzOwotCWlmIChwYWRzaXplICYmIGhkcmxlbiA+PSAyNCkgeworCXBhZHBvcyA9IGF0aDlrX2Ntbl9wYWRwb3MoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlwYWRzaXplID0gcGFkcG9zICYgMzsKKwlpZiAocGFkc2l6ZSAmJiBza2ItPmxlbj5wYWRwb3MrcGFkc2l6ZSkgewogCQkvKgogCQkgKiBSZW1vdmUgTUFDIGhlYWRlciBwYWRkaW5nIGJlZm9yZSBnaXZpbmcgdGhlIGZyYW1lIGJhY2sgdG8KIAkJICogbWFjODAyMTEuCiAJCSAqLwotCQltZW1tb3ZlKHNrYi0+ZGF0YSArIHBhZHNpemUsIHNrYi0+ZGF0YSwgaGRybGVuKTsKKwkJbWVtbW92ZShza2ItPmRhdGEgKyBwYWRzaXplLCBza2ItPmRhdGEsIHBhZHBvcyk7CiAJCXNrYl9wdWxsKHNrYiwgcGFkc2l6ZSk7CiAJfQogCkBAIC0yMDc4LDcgKzIwNzIsNyBAQAogCQkJCSZ0eHEtPmF4cV9xLCBsYXN0YmYtPmxpc3QucHJldik7CiAKIAkJdHhxLT5heHFfZGVwdGgtLTsKLQkJdHhvayA9ICEoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKTsKKwkJdHhvayA9ICEoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9NQVNLKTsKIAkJdHhxLT5heHFfdHhfaW5wcm9ncmVzcyA9IGZhbHNlOwogCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwppbmRleCAwMjdiZTI3Li44OGQxZmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCkBAIC0zODMsMTYwICszODMsNDQgQEAKIAl9CiB9CiAKLS8qIENoZWNrIGlmIGEgRE1BIHJlZ2lvbiBmaXRzIHRoZSBkZXZpY2UgY29uc3RyYWludHMuCi0gKiBSZXR1cm5zIHRydWUsIGlmIHRoZSByZWdpb24gaXMgT0sgZm9yIHVzYWdlIHdpdGggdGhpcyBkZXZpY2UuICovCi1zdGF0aWMgaW5saW5lIGJvb2wgYjQzX2RtYV9hZGRyZXNzX29rKHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZywKLQkJCQkgICAgICBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplKQotewotCXN3aXRjaCAocmluZy0+dHlwZSkgewotCWNhc2UgQjQzX0RNQV8zMEJJVDoKLQkJaWYgKCh1NjQpYWRkciArIHNpemUgPiAoMVVMTCA8PCAzMCkpCi0JCQlyZXR1cm4gMDsKLQkJYnJlYWs7Ci0JY2FzZSBCNDNfRE1BXzMyQklUOgotCQlpZiAoKHU2NClhZGRyICsgc2l6ZSA+ICgxVUxMIDw8IDMyKSkKLQkJCXJldHVybiAwOwotCQlicmVhazsKLQljYXNlIEI0M19ETUFfNjRCSVQ6Ci0JCS8qIEN1cnJlbnRseSB3ZSBjYW4ndCBoYXZlIGFkZHJlc3NlcyBiZXlvbmQKLQkJICogNjRiaXQgaW4gdGhlIGtlcm5lbC4gKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybiAxOwotfQotCi0jZGVmaW5lIGlzXzRrX2FsaWduZWQoYWRkcikJKCgodTY0KShhZGRyKSAmIDB4MEZGRnVsbCkgPT0gMCkKLSNkZWZpbmUgaXNfOGtfYWxpZ25lZChhZGRyKQkoKCh1NjQpKGFkZHIpICYgMHgxRkZGdWxsKSA9PSAwKQotCi1zdGF0aWMgdm9pZCBiNDNfdW5tYXBfYW5kX2ZyZWVfcmluZ21lbShzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcsIHZvaWQgKmJhc2UsCi0JCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hYWRkciwgc2l6ZV90IHNpemUpCi17Ci0Jc3NiX2RtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsIGRtYWFkZHIsIHNpemUsIERNQV9UT19ERVZJQ0UpOwotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYmFzZSwgZ2V0X29yZGVyKHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQgKiBfX2I0M19nZXRfYW5kX21hcF9yaW5nbWVtKHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZywKLQkJCQkJZG1hX2FkZHJfdCAqZG1hYWRkciwgc2l6ZV90IHNpemUsCi0JCQkJCWdmcF90IGdmcF9mbGFncykKLXsKLQl2b2lkICpiYXNlOwotCi0JYmFzZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhnZnBfZmxhZ3MsIGdldF9vcmRlcihzaXplKSk7Ci0JaWYgKCFiYXNlKQotCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoYmFzZSwgMCwgc2l6ZSk7Ci0JKmRtYWFkZHIgPSBzc2JfZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsIGJhc2UsIHNpemUsCi0JCQkJICAgICAgRE1BX1RPX0RFVklDRSk7Ci0JaWYgKHNzYl9kbWFfbWFwcGluZ19lcnJvcihyaW5nLT5kZXYtPmRldiwgKmRtYWFkZHIpKSB7Ci0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYmFzZSwgZ2V0X29yZGVyKHNpemUpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGJhc2U7Ci19Ci0KLXN0YXRpYyB2b2lkICogYjQzX2dldF9hbmRfbWFwX3JpbmdtZW0oc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLAotCQkJCSAgICAgIGRtYV9hZGRyX3QgKmRtYWFkZHIsIHNpemVfdCBzaXplKQotewotCXZvaWQgKmJhc2U7Ci0KLQliYXNlID0gX19iNDNfZ2V0X2FuZF9tYXBfcmluZ21lbShyaW5nLCBkbWFhZGRyLCBzaXplLAotCQkJCQkgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiYXNlKSB7Ci0JCWI0M2VycihyaW5nLT5kZXYtPndsLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG9yIG1hcCBwYWdlcyAiCi0JCSAgICAgICAiZm9yIERNQSByaW5nbWVtb3J5XG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmICghYjQzX2RtYV9hZGRyZXNzX29rKHJpbmcsICpkbWFhZGRyLCBzaXplKSkgewotCQkvKiBUaGUgbWVtb3J5IGRvZXMgbm90IGZpdCBvdXIgZGV2aWNlIGNvbnN0cmFpbnRzLgotCQkgKiBSZXRyeSB3aXRoIEdGUF9ETUEgc2V0IHRvIGdldCBsb3dlciBtZW1vcnkuICovCi0JCWI0M191bm1hcF9hbmRfZnJlZV9yaW5nbWVtKHJpbmcsIGJhc2UsICpkbWFhZGRyLCBzaXplKTsKLQkJYmFzZSA9IF9fYjQzX2dldF9hbmRfbWFwX3JpbmdtZW0ocmluZywgZG1hYWRkciwgc2l6ZSwKLQkJCQkJCSBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JCWlmICghYmFzZSkgewotCQkJYjQzZXJyKHJpbmctPmRldi0+d2wsICJGYWlsZWQgdG8gYWxsb2NhdGUgb3IgbWFwIHBhZ2VzICIKLQkJCSAgICAgICAiaW4gdGhlIEdGUF9ETUEgcmVnaW9uIGZvciBETUEgcmluZ21lbW9yeVxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoIWI0M19kbWFfYWRkcmVzc19vayhyaW5nLCAqZG1hYWRkciwgc2l6ZSkpIHsKLQkJCWI0M191bm1hcF9hbmRfZnJlZV9yaW5nbWVtKHJpbmcsIGJhc2UsICpkbWFhZGRyLCBzaXplKTsKLQkJCWI0M2VycihyaW5nLT5kZXYtPndsLCAiRmFpbGVkIHRvIGFsbG9jYXRlIERNQSAiCi0JCQkgICAgICAgInJpbmdtZW1vcnkgdGhhdCBmaXRzIGRldmljZSBjb25zdHJhaW50c1xuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQkvKiBXZSBleHBlY3QgdGhlIG1lbW9yeSB0byBiZSA0ayBhbGlnbmVkLCBhdCBsZWFzdC4gKi8KLQlpZiAoQjQzX1dBUk5fT04oIWlzXzRrX2FsaWduZWQoKmRtYWFkZHIpKSkgewotCQliNDNfdW5tYXBfYW5kX2ZyZWVfcmluZ21lbShyaW5nLCBiYXNlLCAqZG1hYWRkciwgc2l6ZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBiYXNlOwotfQotCiBzdGF0aWMgaW50IGFsbG9jX3JpbmdtZW1vcnkoc3RydWN0IGI0M19kbWFyaW5nICpyaW5nKQogewotCXVuc2lnbmVkIGludCByZXF1aXJlZDsKLQl2b2lkICpiYXNlOwotCWRtYV9hZGRyX3QgZG1hYWRkcjsKKwlnZnBfdCBmbGFncyA9IEdGUF9LRVJORUw7CiAKLQkvKiBUaGVyZSBhcmUgc2V2ZXJhbCByZXF1aXJlbWVudHMgdG8gdGhlIGRlc2NyaXB0b3IgcmluZyBtZW1vcnk6Ci0JICogLSBUaGUgbWVtb3J5IHJlZ2lvbiBuZWVkcyB0byBmaXQgdGhlIGFkZHJlc3MgY29uc3RyYWludHMgZm9yIHRoZQotCSAqICAgZGV2aWNlIChzYW1lIGFzIGZvciBmcmFtZSBidWZmZXJzKS4KLQkgKiAtIEZvciAzMC8zMmJpdCBETUEgZGV2aWNlcywgdGhlIGRlc2NyaXB0b3IgcmluZyBtdXN0IGJlIDRrIGFsaWduZWQuCi0JICogLSBGb3IgNjRiaXQgRE1BIGRldmljZXMsIHRoZSBkZXNjcmlwdG9yIHJpbmcgbXVzdCBiZSA4ayBhbGlnbmVkLgorCS8qIFRoZSBzcGVjcyBjYWxsIGZvciA0SyBidWZmZXJzIGZvciAzMC0gYW5kIDMyLWJpdCBETUEgd2l0aCA0SworCSAqIGFsaWdubWVudCBhbmQgOEsgYnVmZmVycyBmb3IgNjQtYml0IERNQSB3aXRoIDhLIGFsaWdubWVudC4gVGVzdGluZworCSAqIGhhcyBzaG93biB0aGF0IDRLIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBsYXR0ZXIgYXMgbG9uZyBhcyB0aGUgYnVmZmVyCisJICogZG9lcyBub3QgY3Jvc3MgYW4gOEsgYm91bmRhcnkuCisJICoKKwkgKiBGb3IgdW5rbm93biByZWFzb25zIC0gcG9zc2libHkgYSBoYXJkd2FyZSBlcnJvciAtIHRoZSBCQ000MzExIHJldgorCSAqIDAyLCB3aGljaCB1c2VzIDY0LWJpdCBETUEsIG5lZWRzIHRoZSByaW5nIGJ1ZmZlciBpbiB2ZXJ5IGxvdyBtZW1vcnksCisJICogd2hpY2ggYWNjb3VudHMgZm9yIHRoZSBHRlBfRE1BIGZsYWcgYmVsb3cuCisJICoKKwkgKiBUaGUgZmxhZ3MgaGVyZSBtdXN0IG1hdGNoIHRoZSBmbGFncyBpbiBmcmVlX3JpbmdtZW1vcnkgYmVsb3chCiAJICovCi0KIAlpZiAocmluZy0+dHlwZSA9PSBCNDNfRE1BXzY0QklUKQotCQlyZXF1aXJlZCA9IHJpbmctPm5yX3Nsb3RzICogc2l6ZW9mKHN0cnVjdCBiNDNfZG1hZGVzYzY0KTsKLQllbHNlCi0JCXJlcXVpcmVkID0gcmluZy0+bnJfc2xvdHMgKiBzaXplb2Yoc3RydWN0IGI0M19kbWFkZXNjMzIpOwotCWlmIChCNDNfV0FSTl9PTihyZXF1aXJlZCA+IDB4MTAwMCkpCisJCWZsYWdzIHw9IEdGUF9ETUE7CisJcmluZy0+ZGVzY2Jhc2UgPSBzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQocmluZy0+ZGV2LT5kZXYsCisJCQkJCQkgIEI0M19ETUFfUklOR01FTVNJWkUsCisJCQkJCQkgICYocmluZy0+ZG1hYmFzZSksIGZsYWdzKTsKKwlpZiAoIXJpbmctPmRlc2NiYXNlKSB7CisJCWI0M2VycihyaW5nLT5kZXYtPndsLCAiRE1BIHJpbmdtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKLQotCXJpbmctPmFsbG9jX2Rlc2NzaXplID0gMHgxMDAwOwotCWJhc2UgPSBiNDNfZ2V0X2FuZF9tYXBfcmluZ21lbShyaW5nLCAmZG1hYWRkciwgcmluZy0+YWxsb2NfZGVzY3NpemUpOwotCWlmICghYmFzZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmluZy0+YWxsb2NfZGVzY2Jhc2UgPSBiYXNlOwotCXJpbmctPmFsbG9jX2RtYWJhc2UgPSBkbWFhZGRyOwotCi0JaWYgKChyaW5nLT50eXBlICE9IEI0M19ETUFfNjRCSVQpIHx8IGlzXzhrX2FsaWduZWQoZG1hYWRkcikpIHsKLQkJLyogV2UncmUgb24gPD0zMmJpdCBETUEsIG9yIHdlIGFscmVhZHkgZ290IDhrIGFsaWduZWQgbWVtb3J5LgotCQkgKiBUaGF0J3MgYWxsIHdlIG5lZWQsIHNvIHdlJ3JlIGZpbmUuICovCi0JCXJpbmctPmRlc2NiYXNlID0gYmFzZTsKLQkJcmluZy0+ZG1hYmFzZSA9IGRtYWFkZHI7Ci0JCXJldHVybiAwOwogCX0KLQliNDNfdW5tYXBfYW5kX2ZyZWVfcmluZ21lbShyaW5nLCBiYXNlLCBkbWFhZGRyLCByaW5nLT5hbGxvY19kZXNjc2l6ZSk7Ci0KLQkvKiBPaywgd2UgZmFpbGVkIGF0IHRoZSA4ayBhbGlnbm1lbnQgcmVxdWlyZW1lbnQuCi0JICogVHJ5IHRvIGZvcmNlLWFsaWduIHRoZSBtZW1vcnkgcmVnaW9uIG5vdy4gKi8KLQlyaW5nLT5hbGxvY19kZXNjc2l6ZSA9IDB4MjAwMDsKLQliYXNlID0gYjQzX2dldF9hbmRfbWFwX3JpbmdtZW0ocmluZywgJmRtYWFkZHIsIHJpbmctPmFsbG9jX2Rlc2NzaXplKTsKLQlpZiAoIWJhc2UpCi0JCXJldHVybiAtRU5PTUVNOwotCXJpbmctPmFsbG9jX2Rlc2NiYXNlID0gYmFzZTsKLQlyaW5nLT5hbGxvY19kbWFiYXNlID0gZG1hYWRkcjsKLQotCWlmIChpc184a19hbGlnbmVkKGRtYWFkZHIpKSB7Ci0JCS8qIFdlJ3JlIGFscmVhZHkgOGsgYWxpZ25lZC4gVGhhdCBPaywgdG9vLiAqLwotCQlyaW5nLT5kZXNjYmFzZSA9IGJhc2U7Ci0JCXJpbmctPmRtYWJhc2UgPSBkbWFhZGRyOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogRm9yY2UtYWxpZ24gaXQgdG8gOGsgKi8KLQlyaW5nLT5kZXNjYmFzZSA9ICh2b2lkICopKCh1OCAqKWJhc2UgKyAweDEwMDApOwotCXJpbmctPmRtYWJhc2UgPSBkbWFhZGRyICsgMHgxMDAwOwotCUI0M19XQVJOX09OKCFpc184a19hbGlnbmVkKHJpbmctPmRtYWJhc2UpKTsKKwltZW1zZXQocmluZy0+ZGVzY2Jhc2UsIDAsIEI0M19ETUFfUklOR01FTVNJWkUpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfcmluZ21lbW9yeShzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcpCiB7Ci0JYjQzX3VubWFwX2FuZF9mcmVlX3JpbmdtZW0ocmluZywgcmluZy0+YWxsb2NfZGVzY2Jhc2UsCi0JCQkJICAgcmluZy0+YWxsb2NfZG1hYmFzZSwgcmluZy0+YWxsb2NfZGVzY3NpemUpOworCWdmcF90IGZsYWdzID0gR0ZQX0tFUk5FTDsKKworCWlmIChyaW5nLT50eXBlID09IEI0M19ETUFfNjRCSVQpCisJCWZsYWdzIHw9IEdGUF9ETUE7CisKKwlzc2JfZG1hX2ZyZWVfY29uc2lzdGVudChyaW5nLT5kZXYtPmRldiwgQjQzX0RNQV9SSU5HTUVNU0laRSwKKwkJCQlyaW5nLT5kZXNjYmFzZSwgcmluZy0+ZG1hYmFzZSwgZmxhZ3MpOwogfQogCiAvKiBSZXNldCB0aGUgUlggRE1BIGNoYW5uZWwgKi8KQEAgLTY0NiwxNCArNTMwLDI5IEBACiAJaWYgKHVubGlrZWx5KHNzYl9kbWFfbWFwcGluZ19lcnJvcihyaW5nLT5kZXYtPmRldiwgYWRkcikpKQogCQlyZXR1cm4gMTsKIAotCWlmICghYjQzX2RtYV9hZGRyZXNzX29rKHJpbmcsIGFkZHIsIGJ1ZmZlcnNpemUpKSB7Ci0JCS8qIFdlIGNhbid0IHN1cHBvcnQgdGhpcyBhZGRyZXNzLiBVbm1hcCBpdCBhZ2Fpbi4gKi8KLQkJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBhZGRyLCBidWZmZXJzaXplLCBkbWFfdG9fZGV2aWNlKTsKLQkJcmV0dXJuIDE7CisJc3dpdGNoIChyaW5nLT50eXBlKSB7CisJY2FzZSBCNDNfRE1BXzMwQklUOgorCQlpZiAoKHU2NClhZGRyICsgYnVmZmVyc2l6ZSA+ICgxVUxMIDw8IDMwKSkKKwkJCWdvdG8gYWRkcmVzc19lcnJvcjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfRE1BXzMyQklUOgorCQlpZiAoKHU2NClhZGRyICsgYnVmZmVyc2l6ZSA+ICgxVUxMIDw8IDMyKSkKKwkJCWdvdG8gYWRkcmVzc19lcnJvcjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfRE1BXzY0QklUOgorCQkvKiBDdXJyZW50bHkgd2UgY2FuJ3QgaGF2ZSBhZGRyZXNzZXMgYmV5b25kCisJCSAqIDY0Yml0IGluIHRoZSBrZXJuZWwuICovCisJCWJyZWFrOwogCX0KIAogCS8qIFRoZSBhZGRyZXNzIGlzIE9LLiAqLwogCXJldHVybiAwOworCithZGRyZXNzX2Vycm9yOgorCS8qIFdlIGNhbid0IHN1cHBvcnQgdGhpcyBhZGRyZXNzLiBVbm1hcCBpdCBhZ2Fpbi4gKi8KKwl1bm1hcF9kZXNjYnVmZmVyKHJpbmcsIGFkZHIsIGJ1ZmZlcnNpemUsIGRtYV90b19kZXZpY2UpOworCisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBib29sIGI0M19yeF9idWZmZXJfaXNfcG9pc29uZWQoc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNzE1LDkgKzYxNCw2IEBACiAJbWV0YS0+ZG1hYWRkciA9IGRtYWFkZHI7CiAJcmluZy0+b3BzLT5maWxsX2Rlc2NyaXB0b3IocmluZywgZGVzYywgZG1hYWRkciwKIAkJCQkgICByaW5nLT5yeF9idWZmZXJzaXplLCAwLCAwLCAwKTsKLQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYsCi0JCQkJICAgICAgIHJpbmctPmFsbG9jX2RtYWJhc2UsCi0JCQkJICAgICAgIHJpbmctPmFsbG9jX2Rlc2NzaXplLCBETUFfVE9fREVWSUNFKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM1NCw5ICsxMjUwLDYgQEAKIAl9CiAJLyogTm93IHRyYW5zZmVyIHRoZSB3aG9sZSBmcmFtZS4gKi8KIAl3bWIoKTsKLQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYsCi0JCQkJICAgICAgIHJpbmctPmFsbG9jX2RtYWJhc2UsCi0JCQkJICAgICAgIHJpbmctPmFsbG9jX2Rlc2NzaXplLCBETUFfVE9fREVWSUNFKTsKIAlvcHMtPnBva2VfdHgocmluZywgbmV4dF9zbG90KHJpbmcsIHNsb3QpKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IGU2MDdiMzkuLmY3YWIzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTE1Nyw2ICsxNTcsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiAvKiBNaXNjIERNQSBjb25zdGFudHMgKi8KKyNkZWZpbmUgQjQzX0RNQV9SSU5HTUVNU0laRQkJUEFHRV9TSVpFCiAjZGVmaW5lIEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUCQkzMAogCiAvKiBETUEgZW5naW5lIHR1bmluZyBrbm9icyAqLwpAQCAtMjQ2LDEyICsyNDcsNiBAQAogCS8qIFRoZSBRT1MgcHJpb3JpdHkgYXNzaWduZWQgdG8gdGhpcyByaW5nLiBPbmx5IHVzZWQgZm9yIFRYIHJpbmdzLgogCSAqIFRoaXMgaXMgdGhlIG1hYzgwMjExICJxdWV1ZSIgdmFsdWUuICovCiAJdTggcXVldWVfcHJpbzsKLQkvKiBQb2ludGVycyBhbmQgc2l6ZSBvZiB0aGUgb3JpZ2luYWxseSBhbGxvY2F0ZWQgYW5kIG1hcHBlZCBtZW1vcnkKLQkgKiByZWdpb24gZm9yIHRoZSBkZXNjcmlwdG9yIHJpbmcuICovCi0Jdm9pZCAqYWxsb2NfZGVzY2Jhc2U7Ci0JZG1hX2FkZHJfdCBhbGxvY19kbWFiYXNlOwotCXVuc2lnbmVkIGludCBhbGxvY19kZXNjc2l6ZTsKLQkvKiBQb2ludGVyIHRvIG91ciB3aXJlbGVzcyBkZXZpY2UuICovCiAJc3RydWN0IGI0M193bGRldiAqZGV2OwogI2lmZGVmIENPTkZJR19CNDNfREVCVUcKIAkvKiBNYXhpbXVtIG51bWJlciBvZiB1c2VkIHNsb3RzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDdkYTFkYWIuLjIzNDg5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTY4MSwxOSArNjgxLDEzIEBACiAJCXNuciA9IHJ4X3N0YXRzX3NpZ19hdmcgLyByeF9zdGF0c19ub2lzZV9kaWZmOwogCQlyeF9zdGF0dXMubm9pc2UgPSByeF9zdGF0dXMuc2lnbmFsIC0KIAkJCQkJaXdsMzk0NV9jYWxjX2RiX2Zyb21fcmF0aW8oc25yKTsKLQkJcnhfc3RhdHVzLnF1YWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwKLQkJCQkJCQkgcnhfc3RhdHVzLm5vaXNlKTsKLQotCS8qIElmIG5vaXNlIGluZm8gbm90IGF2YWlsYWJsZSwgY2FsY3VsYXRlIHNpZ25hbCBxdWFsaXR5IGluZGljYXRvciAoJSkKLQkgKiAgIHVzaW5nIGp1c3QgdGhlIGRCbSBzaWduYWwgbGV2ZWwuICovCiAJfSBlbHNlIHsKIAkJcnhfc3RhdHVzLm5vaXNlID0gcHJpdi0+bGFzdF9yeF9ub2lzZTsKLQkJcnhfc3RhdHVzLnF1YWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwgMCk7CiAJfQogCiAKLQlJV0xfREVCVUdfU1RBVFMocHJpdiwgIlJzc2kgJWQgbm9pc2UgJWQgcXVhbCAlZCBzaWdfYXZnICVkIG5vaXNlX2RpZmYgJWRcbiIsCi0JCQlyeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMubm9pc2UsIHJ4X3N0YXR1cy5xdWFsLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSAlZCBub2lzZSAlZCBzaWdfYXZnICVkIG5vaXNlX2RpZmYgJWRcbiIsCisJCQlyeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMubm9pc2UsCiAJCQlyeF9zdGF0c19zaWdfYXZnLCByeF9zdGF0c19ub2lzZV9kaWZmKTsKIAogCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7CkBAIC0xODM1LDggKzE4MjksNyBAQAogCQlyYyA9IC1FSU87CiAJfQogCi0JcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKLQlmcmVlX3BhZ2VzKGNtZC5yZXBseV9wYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLnJlcGx5X3BhZ2UpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMjgzNiw2ICsyODI5LDcgQEAKIAkudXNlX2lzcl9sZWdhY3kgPSB0cnVlLAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSBmYWxzZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDY0LAorCS5icm9rZW5fcG93ZXJzYXZlID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CkBAIC0yODUyLDYgKzI4NDYsNyBAQAogCS51c2VfaXNyX2xlZ2FjeSA9IHRydWUsCiAJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IGZhbHNlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNjQsCisJLmJyb2tlbl9wb3dlcnNhdmUgPSB0cnVlLAogfTsKIAogc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCmluZGV4IGVjYzIzZWMuLjUzMWZhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKQEAgLTIyMiw3ICsyMjIsNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGV4dGVybiBpbnQgaXdsMzk0NV9jYWxjX2RiX2Zyb21fcmF0aW8oaW50IHNpZ19yYXRpbyk7Ci1leHRlcm4gaW50IGl3bDM5NDVfY2FsY19zaWdfcXVhbChpbnQgcnNzaV9kYm0sIGludCBub2lzZV9kYm0pOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSk7CiBleHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggMzg2NTEzYi4uNDg0YzVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAlpd2w0OTY1X2ludGVycG9sYXRlX2NoYW4ocHJpdiwgY2hhbm5lbCwgJmNoX2VlcHJvbV9pbmZvKTsKIAogCS8qIGNhbGN1bGF0ZSB0eCBnYWluIGFkanVzdG1lbnQgYmFzZWQgb24gcG93ZXIgc3VwcGx5IHZvbHRhZ2UgKi8KLQl2b2x0YWdlID0gcHJpdi0+Y2FsaWJfaW5mby0+dm9sdGFnZTsKKwl2b2x0YWdlID0gbGUxNl90b19jcHUocHJpdi0+Y2FsaWJfaW5mby0+dm9sdGFnZSk7CiAJaW5pdF92b2x0YWdlID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudm9sdGFnZSk7CiAJdm9sdGFnZV9jb21wZW5zYXRpb24gPQogCSAgICBpd2w0OTY1X2dldF92b2x0YWdlX2NvbXBlbnNhdGlvbih2b2x0YWdlLCBpbml0X3ZvbHRhZ2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCmluZGV4IDRlZjY4MDQuLmJjMDU2ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKQEAgLTkyLDExICs5MiwxNSBAQAogCiBzdGF0aWMgaW5saW5lIHMzMiBpd2xfdGVtcF9jYWxpYl90b19vZmZzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXUxNiAqdGVtcF9jYWxpYiA9ICh1MTYgKilpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwKLQkJCQkJCSAgICAgICBFRVBST01fNTAwMF9URU1QRVJBVFVSRSk7Ci0JLyogb2Zmc2V0ID0gIHRlbXBlcmF0dXJlIC0gIHZvbHRhZ2UgLyBjb2VmICovCi0JczMyIG9mZnNldCA9IChzMzIpKHRlbXBfY2FsaWJbMF0gLSB0ZW1wX2NhbGliWzFdIC8gSVdMXzUxNTBfVk9MVEFHRV9UT19URU1QRVJBVFVSRV9DT0VGRik7Ci0JcmV0dXJuIG9mZnNldDsKKwl1MTYgdGVtcGVyYXR1cmUsIHZvbHRhZ2U7CisJX19sZTE2ICp0ZW1wX2NhbGliID0KKwkJKF9fbGUxNiAqKWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBFRVBST01fNTAwMF9URU1QRVJBVFVSRSk7CisKKwl0ZW1wZXJhdHVyZSA9IGxlMTZfdG9fY3B1KHRlbXBfY2FsaWJbMF0pOworCXZvbHRhZ2UgPSBsZTE2X3RvX2NwdSh0ZW1wX2NhbGliWzFdKTsKKworCS8qIG9mZnNldCA9IHRlbXAgLSB2b2x0IC8gY29lZmYgKi8KKwlyZXR1cm4gKHMzMikodGVtcGVyYXR1cmUgLSB2b2x0YWdlIC8gSVdMXzUxNTBfVk9MVEFHRV9UT19URU1QRVJBVFVSRV9DT0VGRik7CiB9CiAKIC8qIEZpeGVkIChub24tY29uZmlndXJhYmxlKSByeCBkYXRhIGZyb20gcGh5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggZTJmODYxNS4uMzNhNTg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMzMzLDE0ICszMzMsMTUgQEAKIHN0YXRpYyBpbnQgaXdsNTAwMF9zZXRfWHRhbF9jYWxpYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9jYWxpYl94dGFsX2ZyZXFfY21kIGNtZDsKLQl1MTYgKnh0YWxfY2FsaWIgPSAodTE2ICopaXdsX2VlcHJvbV9xdWVyeV9hZGRyKHByaXYsIEVFUFJPTV81MDAwX1hUQUwpOworCV9fbGUxNiAqeHRhbF9jYWxpYiA9CisJCShfX2xlMTYgKilpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwgRUVQUk9NXzUwMDBfWFRBTCk7CiAKIAljbWQuaGRyLm9wX2NvZGUgPSBJV0xfUEhZX0NBTElCUkFURV9DUllTVEFMX0ZSUV9DTUQ7CiAJY21kLmhkci5maXJzdF9ncm91cCA9IDA7CiAJY21kLmhkci5ncm91cHNfbnVtID0gMTsKIAljbWQuaGRyLmRhdGFfdmFsaWQgPSAxOwotCWNtZC5jYXBfcGluMSA9ICh1OCl4dGFsX2NhbGliWzBdOwotCWNtZC5jYXBfcGluMiA9ICh1OCl4dGFsX2NhbGliWzFdOworCWNtZC5jYXBfcGluMSA9IGxlMTZfdG9fY3B1KHh0YWxfY2FsaWJbMF0pOworCWNtZC5jYXBfcGluMiA9IGxlMTZfdG9fY3B1KHh0YWxfY2FsaWJbMV0pOwogCXJldHVybiBpd2xfY2FsaWJfc2V0KCZwcml2LT5jYWxpYl9yZXN1bHRzW0lXTF9DQUxJQl9YVEFMXSwKIAkJCSAgICAgKHU4ICopJmNtZCwgc2l6ZW9mKGNtZCkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCBmZTUxMWNiLi5iOTNlNDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiB9OwogCiAvKiBtYnBzLCBtY3MgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgaXdsX3JhdGVfbWNzX2luZm8gaXdsX3JhdGVfbWNzW0lXTF9SQVRFX0NPVU5UXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3JhdGVfbWNzX2luZm8gaXdsX3JhdGVfbWNzW0lXTF9SQVRFX0NPVU5UXSA9IHsKIAl7ICAiMSIsICJCUFNLIERTU1MifSwKIAl7ICAiMiIsICJRUFNLIERTU1MifSwKIAl7IjUuNSIsICJCUFNLIENDSyJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCBiODM3N2VmLi4xYzk4NjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMTg0Miw3ICsxODQyLDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmICghKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfRldfRVJST1JTKSkKKwlpZiAoIShpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgJiYgIWZ1bGxfbG9nKQogCQlzaXplID0gKHNpemUgPiBERUZBVUxUX0RVTVBfRVZFTlRfTE9HX0VOVFJJRVMpCiAJCQk/IERFRkFVTFRfRFVNUF9FVkVOVF9MT0dfRU5UUklFUyA6IHNpemU7CiAjZWxzZQpAQCAtMzE3Myw3ICszMTczLDYgQEAKIAogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5oY21kX2xvY2spOwogCkBAIC0zMzYxLDEwICszMzYwLDExIEBACiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJwY2lfcmVzb3VyY2VfYmFzZSA9ICVwXG4iLCBwcml2LT5od19iYXNlKTsKIAotCS8qIHRoaXMgc3BpbiBsb2NrIHdpbGwgYmUgdXNlZCBpbiBhcG1fb3BzLmluaXQgYW5kIEVFUFJPTSBhY2Nlc3MKKwkvKiB0aGVzZSBzcGluIGxvY2tzIHdpbGwgYmUgdXNlZCBpbiBhcG1fb3BzLmluaXQgYW5kIEVFUFJPTSBhY2Nlc3MKIAkgKiB3ZSBzaG91bGQgaW5pdCBub3cKIAkgKi8KIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cmVnX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAlpd2xfaHdfZGV0ZWN0KHByaXYpOwogCUlXTF9JTkZPKHByaXYsICJEZXRlY3RlZCBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgJXMgUkVWPTB4JVhcbiIsCiAJCXByaXYtPmNmZy0+bmFtZSwgcHJpdi0+aHdfcmV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKaW5kZXggYTdiZmFlMC4uMWVjOGNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKQEAgLTc3LDggKzc3LDcgQEAKICAqIFRoZSBNQUMgKHVDb2RlIHByb2Nlc3NvciwgZXRjLikgZG9lcyBub3QgbmVlZCB0byBiZSBwb3dlcmVkIHVwIGZvciBhY2Nlc3NpbmcKICAqIHRoZSBDU1IgcmVnaXN0ZXJzLgogICoKLSAqIE5PVEU6ICBOZXdlciBkZXZpY2VzIHVzaW5nIG9uZS10aW1lLXByb2dyYW1tYWJsZSAoT1RQKSBtZW1vcnkKLSAqICAgICAgICByZXF1aXJlIGRldmljZSB0byBiZSBhd2FrZSBpbiBvcmRlciB0byByZWFkIHRoaXMgbWVtb3J5CisgKiBOT1RFOiAgRGV2aWNlIGRvZXMgbmVlZCB0byBiZSBhd2FrZSBpbiBvcmRlciB0byByZWFkIHRoaXMgbWVtb3J5CiAgKiAgICAgICAgdmlhIENTUl9FRVBST00gYW5kIENTUl9PVFAgcmVnaXN0ZXJzCiAgKi8KICNkZWZpbmUgQ1NSX0JBU0UgICAgKDB4MDAwKQpAQCAtMTExLDkgKzExMCw4IEBACiAvKgogICogRUVQUk9NIGFuZCBPVFAgKG9uZS10aW1lLXByb2dyYW1tYWJsZSkgbWVtb3J5IHJlYWRzCiAgKgotICogTk9URTogIEZvciAobmV3ZXIpIGRldmljZXMgdXNpbmcgT1RQLCBkZXZpY2UgbXVzdCBiZSBhd2FrZSwgaW5pdGlhbGl6ZWQgdmlhCi0gKiAgICAgICAgYXBtX29wcy5pbml0KCkgaW4gb3JkZXIgdG8gcmVhZC4gIE9sZGVyIGRldmljZXMgKDM5NDUvNDk2NS81MDAwKQotICogICAgICAgIHVzZSBFRVBST00gYW5kIGRvIG5vdCByZXF1aXJlIHRoaXMuCisgKiBOT1RFOiAgRGV2aWNlIG11c3QgYmUgYXdha2UsIGluaXRpYWxpemVkIHZpYSBhcG1fb3BzLmluaXQoKSwKKyAqICAgICAgICBpbiBvcmRlciB0byByZWFkLgogICovCiAjZGVmaW5lIENTUl9FRVBST01fUkVHICAgICAgICAgIChDU1JfQkFTRSsweDAyYykKICNkZWZpbmUgQ1NSX0VFUFJPTV9HUCAgICAgICAgICAgKENTUl9CQVNFKzB4MDMwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAppbmRleCAyNjczZTlhLi4xNjVkMWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApAQCAtMTE2OCw3ICsxMTY4LDcgQEAKIAl1MzIgbGFzdF9iZWFjb25fdGltZTsKIAl1NjQgbGFzdF90c2Y7CiAKLQkvKiBlZXByb20gKi8KKwkvKiBlZXByb20gLS0gdGhpcyBpcyBpbiB0aGUgY2FyZCdzIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlciAqLwogCXU4ICplZXByb207CiAJaW50ICAgIG52bV9kZXZpY2VfdHlwZTsKIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9pbmZvICpjYWxpYl9pbmZvOwpAQCAtMTM1Myw0ICsxMzUzLDE1IEBACiAJcmV0dXJuICgoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpID8gMSA6IDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bF9mcmVlX3BhZ2VzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19mcmVlX3BhZ2VzKHBhZ2UsIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwlwcml2LT5hbGxvY19yeGJfcGFnZS0tOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2ZyZWVfcGFnZXMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJZnJlZV9wYWdlcyhwYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKK30KICNlbmRpZgkJCQkvKiBfX2l3bF9kZXZfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IDM5NDZlNWMuLjRhMzA5NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC0zNzAsNyArMzcwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bF9yZWFkX290cF93b3JkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGFkZHIsIHUxNiAqZWVwcm9tX2RhdGEpCitzdGF0aWMgaW50IGl3bF9yZWFkX290cF93b3JkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGFkZHIsIF9fbGUxNiAqZWVwcm9tX2RhdGEpCiB7CiAJaW50IHJldCA9IDA7CiAJdTMyIHI7CkBAIC00MDQsNyArNDA0LDcgQEAKIAkJCQlDU1JfT1RQX0dQX1JFR19FQ0NfQ09SUl9TVEFUVVNfTVNLKTsKIAkJSVdMX0VSUihwcml2LCAiQ29ycmVjdGFibGUgT1RQIEVDQyBlcnJvciwgY29udGludWUgcmVhZFxuIik7CiAJfQotCSplZXByb21fZGF0YSA9IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNikociA+PiAxNikpOworCSplZXByb21fZGF0YSA9IGNwdV90b19sZTE2KHIgPj4gMTYpOwogCXJldHVybiAwOwogfQogCkBAIC00MTMsNyArNDEzLDggQEAKICAqLwogc3RhdGljIGJvb2wgaXdsX2lzX290cF9lbXB0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JdTE2IG5leHRfbGlua19hZGRyID0gMCwgbGlua192YWx1ZTsKKwl1MTYgbmV4dF9saW5rX2FkZHIgPSAwOworCV9fbGUxNiBsaW5rX3ZhbHVlOwogCWJvb2wgaXNfZW1wdHkgPSBmYWxzZTsKIAogCS8qIGxvY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIE9UUCBsaW5rIGxpc3QgKi8KQEAgLTQ0Myw3ICs0NDQsOCBAQAogc3RhdGljIGludCBpd2xfZmluZF9vdHBfaW1hZ2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQl1MTYgKnZhbGlkYmxvY2thZGRyKQogewotCXUxNiBuZXh0X2xpbmtfYWRkciA9IDAsIGxpbmtfdmFsdWUgPSAwLCB2YWxpZF9hZGRyOworCXUxNiBuZXh0X2xpbmtfYWRkciA9IDAsIHZhbGlkX2FkZHI7CisJX19sZTE2IGxpbmtfdmFsdWUgPSAwOwogCWludCB1c2VkYmxvY2tzID0gMDsKIAogCS8qIHNldCBhZGRyZXNzaW5nIG1vZGUgdG8gYWJzb2x1dGUgdG8gdHJhdmVyc2UgdGhlIGxpbmsgbGlzdCAqLwpAQCAtNDYzLDcgKzQ2NSw3IEBACiAJCSAqIGNoZWNrIGZvciBtb3JlIGJsb2NrIG9uIHRoZSBsaW5rIGxpc3QKIAkJICovCiAJCXZhbGlkX2FkZHIgPSBuZXh0X2xpbmtfYWRkcjsKLQkJbmV4dF9saW5rX2FkZHIgPSBsaW5rX3ZhbHVlICogc2l6ZW9mKHUxNik7CisJCW5leHRfbGlua19hZGRyID0gbGUxNl90b19jcHUobGlua192YWx1ZSkgKiBzaXplb2YodTE2KTsKIAkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk9UUCBibG9ja3MgJWQgYWRkciAweCV4XG4iLAogCQkJICAgICAgIHVzZWRibG9ja3MsIG5leHRfbGlua19hZGRyKTsKIAkJaWYgKGl3bF9yZWFkX290cF93b3JkKHByaXYsIG5leHRfbGlua19hZGRyLCAmbGlua192YWx1ZSkpCkBAIC00OTcsNyArNDk5LDcgQEAKICAqLwogaW50IGl3bF9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JdTE2ICplOworCV9fbGUxNiAqZTsKIAl1MzIgZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApOwogCWludCBzejsKIAlpbnQgcmV0OwpAQCAtNTE2LDEyICs1MTgsOSBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGFsbG9jX2VycjsKIAl9Ci0JZSA9ICh1MTYgKilwcml2LT5lZXByb207CisJZSA9IChfX2xlMTYgKilwcml2LT5lZXByb207CiAKLQlpZiAocHJpdi0+bnZtX2RldmljZV90eXBlID09IE5WTV9ERVZJQ0VfVFlQRV9PVFApIHsKLQkJLyogT1RQIHJlYWRzIHJlcXVpcmUgcG93ZXJlZC11cCBjaGlwICovCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuaW5pdChwcml2KTsKLQl9CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy52ZXJpZnlfc2lnbmF0dXJlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC01NjIsNyArNTYxLDcgQEAKIAkJfQogCQlmb3IgKGFkZHIgPSB2YWxpZGJsb2NrYWRkcjsgYWRkciA8IHZhbGlkYmxvY2thZGRyICsgc3o7CiAJCSAgICAgYWRkciArPSBzaXplb2YodTE2KSkgewotCQkJdTE2IGVlcHJvbV9kYXRhOworCQkJX19sZTE2IGVlcHJvbV9kYXRhOwogCiAJCQlyZXQgPSBpd2xfcmVhZF9vdHBfd29yZChwcml2LCBhZGRyLCAmZWVwcm9tX2RhdGEpOwogCQkJaWYgKHJldCkKQEAgLTU3MCwxMyArNTY5LDYgQEAKIAkJCWVbY2FjaGVfYWRkciAvIDJdID0gZWVwcm9tX2RhdGE7CiAJCQljYWNoZV9hZGRyICs9IHNpemVvZih1MTYpOwogCQl9Ci0KLQkJLyoKLQkJICogTm93IHRoYXQgT1RQIHJlYWRzIGFyZSBjb21wbGV0ZSwgcmVzZXQgY2hpcCB0byBzYXZlCi0JCSAqICAgcG93ZXIgdW50aWwgd2UgbG9hZCB1Q29kZSBkdXJpbmcgInVwIi4KLQkJICovCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuc3RvcChwcml2KTsKLQogCX0gZWxzZSB7CiAJCS8qIGVlcHJvbSBpcyBhbiBhcnJheSBvZiAxNmJpdCB2YWx1ZXMgKi8KIAkJZm9yIChhZGRyID0gMDsgYWRkciA8IHN6OyBhZGRyICs9IHNpemVvZih1MTYpKSB7CkBAIC01OTQsNyArNTg2LDcgQEAKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKLQkJCWVbYWRkciAvIDJdID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KShyID4+IDE2KSk7CisJCQllW2FkZHIgLyAyXSA9IGNwdV90b19sZTE2KHIgPj4gMTYpOwogCQl9CiAJfQogCXJldCA9IDA7CkBAIC02MDMsNiArNTk1LDggQEAKIGVycjoKIAlpZiAocmV0KQogCQlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CisJLyogUmVzZXQgY2hpcCB0byBzYXZlIHBvd2VyIHVudGlsIHdlIGxvYWQgdUNvZGUgZHVyaW5nICJ1cCIuICovCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5zdG9wKHByaXYpOwogYWxsb2NfZXJyOgogCXJldHVybiByZXQ7CiB9CkBAIC03NTUsNyArNzQ5LDggQEAKIAljaF9pbmZvLT5odDQwX2VlcHJvbSA9ICplZXByb21fY2g7CiAJY2hfaW5mby0+aHQ0MF9tYXhfcG93ZXJfYXZnID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOwogCWNoX2luZm8tPmh0NDBfZmxhZ3MgPSBlZXByb21fY2gtPmZsYWdzOwotCWNoX2luZm8tPmh0NDBfZXh0ZW5zaW9uX2NoYW5uZWwgJj0gfmNsZWFyX2h0NDBfZXh0ZW5zaW9uX2NoYW5uZWw7CisJaWYgKGVlcHJvbV9jaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9WQUxJRCkKKwkJY2hfaW5mby0+aHQ0MF9leHRlbnNpb25fY2hhbm5lbCAmPSB+Y2xlYXJfaHQ0MF9leHRlbnNpb25fY2hhbm5lbDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCA1Y2QyYjY2Li4wY2Q5YzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtMTM3LDcgKzEzNyw3IEBACiAgKgogICovCiBzdHJ1Y3QgaXdsX2VlcHJvbV9lbmhhbmNlZF90eHB3ciB7Ci0JdTE2IGNvbW1vbjsKKwlfX2xlMTYgY29tbW9uOwogCXM4IGNoYWluX2FfbWF4OwogCXM4IGNoYWluX2JfbWF4OwogCXM4IGNoYWluX2NfbWF4OwpAQCAtMzYwLDcgKzM2MCw3IEBACiBzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9pbmZvIHsKIAl1OCBzYXR1cmF0aW9uX3Bvd2VyMjQ7CS8qIGhhbGYtZEJtIChlLmcuICIzNCIgPSAxNyBkQm0pICovCiAJdTggc2F0dXJhdGlvbl9wb3dlcjUyOwkvKiBoYWxmLWRCbSAqLwotCXMxNiB2b2x0YWdlOwkJLyogc2lnbmVkICovCisJX19sZTE2IHZvbHRhZ2U7CQkvKiBzaWduZWQgKi8KIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9zdWJiYW5kX2luZm8KIAkJYmFuZF9pbmZvW0VFUFJPTV9UWF9QT1dFUl9CQU5EU107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwppbmRleCBhMjMxNjU5Li4zMGU5ZWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAl9CiBmYWlsOgogCWlmIChjbWQtPnJlcGx5X3BhZ2UpIHsKLQkJZnJlZV9wYWdlcyhjbWQtPnJlcGx5X3BhZ2UsIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwkJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLT5yZXBseV9wYWdlKTsKIAkJY21kLT5yZXBseV9wYWdlID0gMDsKIAl9CiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCA2MDkwYmMxLi42ZjM2YjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTM0NSwxMCArMzQ1LDggQEAKIAkJCXBjaV91bm1hcF9wYWdlKHByaXYtPnBjaV9kZXYsIHJ4cS0+cG9vbFtpXS5wYWdlX2RtYSwKIAkJCQlQQUdFX1NJWkUgPDwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIsCiAJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCV9fZnJlZV9wYWdlcyhyeHEtPnBvb2xbaV0ucGFnZSwKLQkJCQkgICAgIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwkJCV9faXdsX2ZyZWVfcGFnZXMocHJpdiwgcnhxLT5wb29sW2ldLnBhZ2UpOwogCQkJcnhxLT5wb29sW2ldLnBhZ2UgPSBOVUxMOwotCQkJcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKIAkJfQogCX0KIApAQCAtNDE2LDkgKzQxNCw3IEBACiAJCQlwY2lfdW5tYXBfcGFnZShwcml2LT5wY2lfZGV2LCByeHEtPnBvb2xbaV0ucGFnZV9kbWEsCiAJCQkJUEFHRV9TSVpFIDw8IHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyLAogCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwcml2LT5hbGxvY19yeGJfcGFnZS0tOwotCQkJX19mcmVlX3BhZ2VzKHJ4cS0+cG9vbFtpXS5wYWdlLAotCQkJCSAgICAgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIpOworCQkJX19pd2xfZnJlZV9wYWdlcyhwcml2LCByeHEtPnBvb2xbaV0ucGFnZSk7CiAJCQlyeHEtPnBvb2xbaV0ucGFnZSA9IE5VTEw7CiAJCX0KIAkJbGlzdF9hZGRfdGFpbCgmcnhxLT5wb29sW2ldLmxpc3QsICZyeHEtPnJ4X3VzZWQpOwpAQCAtNjU0LDQ3ICs2NTAsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfcmVwbHlfc3RhdGlzdGljcyk7CiAKLSNkZWZpbmUgUEVSRkVDVF9SU1NJICgtMjApIC8qIGRCbSAqLwotI2RlZmluZSBXT1JTVF9SU1NJICgtOTUpICAgLyogZEJtICovCi0jZGVmaW5lIFJTU0lfUkFOR0UgKFBFUkZFQ1RfUlNTSSAtIFdPUlNUX1JTU0kpCi0KLS8qIENhbGN1bGF0ZSBhbiBpbmRpY2F0aW9uIG9mIHJ4IHNpZ25hbCBxdWFsaXR5IChhIHBlcmNlbnRhZ2UsIG5vdCBkQm0hKS4KLSAqIFNlZSBodHRwOi8vd3d3LmNlcy5jbGVtc29uLmVkdS9saW51eC9zaWduYWxfcXVhbGl0eS5zaHRtbCBmb3IgaW5mbwotICogICBhYm91dCBmb3JtdWxhcyB1c2VkIGJlbG93LiAqLwotc3RhdGljIGludCBpd2xfY2FsY19zaWdfcXVhbChpbnQgcnNzaV9kYm0sIGludCBub2lzZV9kYm0pCi17Ci0JaW50IHNpZ19xdWFsOwotCWludCBkZWdyYWRhdGlvbiA9IFBFUkZFQ1RfUlNTSSAtIHJzc2lfZGJtOwotCi0JLyogSWYgd2UgZ2V0IGEgbm9pc2UgbWVhc3VyZW1lbnQsIHVzZSBzaWduYWwtdG8tbm9pc2UgcmF0aW8gKFNOUikKLQkgKiBhcyBpbmRpY2F0b3I7IGZvcm11bGEgaXMgKHNpZ25hbCBkYm0gLSBub2lzZSBkYm0pLgotCSAqIFNOUiBhdCBvciBhYm92ZSA0MCBpcyBhIGdyZWF0IHNpZ25hbCAoMTAwJSkuCi0JICogQmVsb3cgdGhhdCwgc2NhbGUgdG8gZml0IFNOUiBvZiAwIC0gNDAgZEIgd2l0aGluIDAgLSAxMDAlIGluZGljYXRvci4KLQkgKiBXZWFrZXN0IHVzYWJsZSBzaWduYWwgaXMgdXN1YWxseSAxMCAtIDE1IGRCIFNOUi4gKi8KLQlpZiAobm9pc2VfZGJtKSB7Ci0JCWlmIChyc3NpX2RibSAtIG5vaXNlX2RibSA+PSA0MCkKLQkJCXJldHVybiAxMDA7Ci0JCWVsc2UgaWYgKHJzc2lfZGJtIDwgbm9pc2VfZGJtKQotCQkJcmV0dXJuIDA7Ci0JCXNpZ19xdWFsID0gKChyc3NpX2RibSAtIG5vaXNlX2RibSkgKiA1KSAvIDI7Ci0KLQkvKiBFbHNlIHVzZSBqdXN0IHRoZSBzaWduYWwgbGV2ZWwuCi0JICogVGhpcyBmb3JtdWxhIGlzIGEgbGVhc3Qgc3F1YXJlcyBmaXQgb2YgZGF0YSBwb2ludHMgY29sbGVjdGVkIGFuZAotCSAqICAgY29tcGFyZWQgd2l0aCBhIHJlZmVyZW5jZSBzeXN0ZW0gdGhhdCBoYWQgYSBwZXJjZW50YWdlICglKSBkaXNwbGF5Ci0JICogICBmb3Igc2lnbmFsIHF1YWxpdHkuICovCi0JfSBlbHNlCi0JCXNpZ19xdWFsID0gKDEwMCAqIChSU1NJX1JBTkdFICogUlNTSV9SQU5HRSkgLSBkZWdyYWRhdGlvbiAqCi0JCQkgICAgKDE1ICogUlNTSV9SQU5HRSArIDYyICogZGVncmFkYXRpb24pKSAvCi0JCQkgICAoUlNTSV9SQU5HRSAqIFJTU0lfUkFOR0UpOwotCi0JaWYgKHNpZ19xdWFsID4gMTAwKQotCQlzaWdfcXVhbCA9IDEwMDsKLQllbHNlIGlmIChzaWdfcXVhbCA8IDEpCi0JCXNpZ19xdWFsID0gMDsKLQotCXJldHVybiBzaWdfcXVhbDsKLX0KLQogLyogQ2FsYyBtYXggc2lnbmFsIGxldmVsIChkQm0pIGFtb25nIDMgcG9zc2libGUgcmVjZWl2ZXJzICovCiBzdGF0aWMgaW5saW5lIGludCBpd2xfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnJ4X3Jlc3ApCkBAIC0xMTA1LDExICsxMDYwLDggQEAKIAlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYKIAkgICAgIXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKIAkJcnhfc3RhdHVzLm5vaXNlID0gcHJpdi0+bGFzdF9yeF9ub2lzZTsKLQkJcnhfc3RhdHVzLnF1YWwgPSBpd2xfY2FsY19zaWdfcXVhbChyeF9zdGF0dXMuc2lnbmFsLAotCQkJCQkJCSByeF9zdGF0dXMubm9pc2UpOwogCX0gZWxzZSB7CiAJCXJ4X3N0YXR1cy5ub2lzZSA9IElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEU7Ci0JCXJ4X3N0YXR1cy5xdWFsID0gaXdsX2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwgMCk7CiAJfQogCiAJLyogUmVzZXQgYmVhY29uIG5vaXNlIGxldmVsIGlmIG5vdCBhc3NvY2lhdGVkLiAqLwpAQCAtMTEyMiw4ICsxMDc0LDggQEAKIAkJaXdsX2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGh5X3JlcywgbGVuLCBoZWFkZXIsIDEpOwogI2VuZGlmCiAJaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShwcml2LCBsZW4sIGhlYWRlcik7Ci0JSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHByaXYsICJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCi0JCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnF1YWwsCisJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHByaXYsICJSc3NpICVkLCBub2lzZSAlZCwgVFNGICVsbHVcbiIsCisJCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeF9zdGF0dXMubWFjdGltZSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCmluZGV4IGEyYjJiODMuLmZhMWM4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKQEAgLTE0NCw4ICsxNDQsNyBAQAogCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpOwogCX0KIAotCXByaXYtPmFsbG9jX3J4Yl9wYWdlLS07Ci0JZnJlZV9wYWdlcyhjbWQucmVwbHlfcGFnZSwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIpOworCWl3bF9mcmVlX3BhZ2VzKHByaXYsIGNtZC5yZXBseV9wYWdlKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCmluZGV4IGNkNmE2OTAuLmNkZTA5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCkBAIC0xNjQsOSArMTY0LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCi0JcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKLQlmcmVlX3BhZ2VzKGNtZC5yZXBseV9wYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLnJlcGx5X3BhZ2UpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM5MSw5ICszODksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0KLQlwcml2LT5hbGxvY19yeGJfcGFnZS0tOwotCWZyZWVfcGFnZXMoY21kLnJlcGx5X3BhZ2UsIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwlpd2xfZnJlZV9wYWdlcyhwcml2LCBjbWQucmVwbHlfcGFnZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKaW5kZXggMDBkYTVlMS4uODdjZTJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCkBAIC00MDcsMTMgKzQwNywxNCBAQAogCWludCB0eHFfaWQ7CiAKIAkvKiBUeCBxdWV1ZXMgKi8KLQlpZiAocHJpdi0+dHhxKQorCWlmIChwcml2LT50eHEpIHsKIAkJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07CiAJCSAgICAgdHhxX2lkKyspCiAJCQlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQogCQkJCWl3bF9jbWRfcXVldWVfZnJlZShwcml2KTsKIAkJCWVsc2UKIAkJCQlpd2xfdHhfcXVldWVfZnJlZShwcml2LCB0eHFfaWQpOworCX0KIAlpd2xfZnJlZV9kbWFfcHRyKHByaXYsICZwcml2LT5rdyk7CiAKIAlpd2xfZnJlZV9kbWFfcHRyKHByaXYsICZwcml2LT5zY2RfYmNfdGJscyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCAyYTI4YTFmLi5mOGU0ZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTU0OCw2ICs1NDgsOSBAQAogCXR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAlxID0gJnR4cS0+cTsKIAorCWlmICgoaXdsX3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKSkKKwkJZ290byBkcm9wOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCAwKTsKQEAgLTgxMiw3ICs4MTUsNyBAQAogCQlicmVhazsKIAl9CiAKLQlmcmVlX3BhZ2VzKGNtZC5yZXBseV9wYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLnJlcGx5X3BhZ2UpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTE5OCw5ICsxMjAxLDcgQEAKIAkJCXBjaV91bm1hcF9wYWdlKHByaXYtPnBjaV9kZXYsIHJ4cS0+cG9vbFtpXS5wYWdlX2RtYSwKIAkJCQlQQUdFX1NJWkUgPDwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIsCiAJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXByaXYtPmFsbG9jX3J4Yl9wYWdlLS07Ci0JCQlfX2ZyZWVfcGFnZXMocnhxLT5wb29sW2ldLnBhZ2UsCi0JCQkJICAgICBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJCQlfX2l3bF9mcmVlX3BhZ2VzKHByaXYsIHJ4cS0+cG9vbFtpXS5wYWdlKTsKIAkJCXJ4cS0+cG9vbFtpXS5wYWdlID0gTlVMTDsKIAkJfQogCQlsaXN0X2FkZF90YWlsKCZyeHEtPnBvb2xbaV0ubGlzdCwgJnJ4cS0+cnhfdXNlZCk7CkBAIC0xMjQ3LDEwICsxMjQ4LDggQEAKIAkJCXBjaV91bm1hcF9wYWdlKHByaXYtPnBjaV9kZXYsIHJ4cS0+cG9vbFtpXS5wYWdlX2RtYSwKIAkJCQlQQUdFX1NJWkUgPDwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIsCiAJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCV9fZnJlZV9wYWdlcyhyeHEtPnBvb2xbaV0ucGFnZSwKLQkJCQkgICAgIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwkJCV9faXdsX2ZyZWVfcGFnZXMocHJpdiwgcnhxLT5wb29sW2ldLnBhZ2UpOwogCQkJcnhxLT5wb29sW2ldLnBhZ2UgPSBOVUxMOwotCQkJcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKIAkJfQogCX0KIApAQCAtMTMwMCw0NyArMTI5OSw2IEBACiAJcmV0dXJuIChpbnQpcmF0aW8yZEJbc2lnX3JhdGlvXTsKIH0KIAotI2RlZmluZSBQRVJGRUNUX1JTU0kgKC0yMCkgLyogZEJtICovCi0jZGVmaW5lIFdPUlNUX1JTU0kgKC05NSkgICAvKiBkQm0gKi8KLSNkZWZpbmUgUlNTSV9SQU5HRSAoUEVSRkVDVF9SU1NJIC0gV09SU1RfUlNTSSkKLQotLyogQ2FsY3VsYXRlIGFuIGluZGljYXRpb24gb2Ygcnggc2lnbmFsIHF1YWxpdHkgKGEgcGVyY2VudGFnZSwgbm90IGRCbSEpLgotICogU2VlIGh0dHA6Ly93d3cuY2VzLmNsZW1zb24uZWR1L2xpbnV4L3NpZ25hbF9xdWFsaXR5LnNodG1sIGZvciBpbmZvCi0gKiAgIGFib3V0IGZvcm11bGFzIHVzZWQgYmVsb3cuICovCi1pbnQgaXdsMzk0NV9jYWxjX3NpZ19xdWFsKGludCByc3NpX2RibSwgaW50IG5vaXNlX2RibSkKLXsKLQlpbnQgc2lnX3F1YWw7Ci0JaW50IGRlZ3JhZGF0aW9uID0gUEVSRkVDVF9SU1NJIC0gcnNzaV9kYm07Ci0KLQkvKiBJZiB3ZSBnZXQgYSBub2lzZSBtZWFzdXJlbWVudCwgdXNlIHNpZ25hbC10by1ub2lzZSByYXRpbyAoU05SKQotCSAqIGFzIGluZGljYXRvcjsgZm9ybXVsYSBpcyAoc2lnbmFsIGRibSAtIG5vaXNlIGRibSkuCi0JICogU05SIGF0IG9yIGFib3ZlIDQwIGlzIGEgZ3JlYXQgc2lnbmFsICgxMDAlKS4KLQkgKiBCZWxvdyB0aGF0LCBzY2FsZSB0byBmaXQgU05SIG9mIDAgLSA0MCBkQiB3aXRoaW4gMCAtIDEwMCUgaW5kaWNhdG9yLgotCSAqIFdlYWtlc3QgdXNhYmxlIHNpZ25hbCBpcyB1c3VhbGx5IDEwIC0gMTUgZEIgU05SLiAqLwotCWlmIChub2lzZV9kYm0pIHsKLQkJaWYgKHJzc2lfZGJtIC0gbm9pc2VfZGJtID49IDQwKQotCQkJcmV0dXJuIDEwMDsKLQkJZWxzZSBpZiAocnNzaV9kYm0gPCBub2lzZV9kYm0pCi0JCQlyZXR1cm4gMDsKLQkJc2lnX3F1YWwgPSAoKHJzc2lfZGJtIC0gbm9pc2VfZGJtKSAqIDUpIC8gMjsKLQotCS8qIEVsc2UgdXNlIGp1c3QgdGhlIHNpZ25hbCBsZXZlbC4KLQkgKiBUaGlzIGZvcm11bGEgaXMgYSBsZWFzdCBzcXVhcmVzIGZpdCBvZiBkYXRhIHBvaW50cyBjb2xsZWN0ZWQgYW5kCi0JICogICBjb21wYXJlZCB3aXRoIGEgcmVmZXJlbmNlIHN5c3RlbSB0aGF0IGhhZCBhIHBlcmNlbnRhZ2UgKCUpIGRpc3BsYXkKLQkgKiAgIGZvciBzaWduYWwgcXVhbGl0eS4gKi8KLQl9IGVsc2UKLQkJc2lnX3F1YWwgPSAoMTAwICogKFJTU0lfUkFOR0UgKiBSU1NJX1JBTkdFKSAtIGRlZ3JhZGF0aW9uICoKLQkJCSAgICAoMTUgKiBSU1NJX1JBTkdFICsgNjIgKiBkZWdyYWRhdGlvbikpIC8KLQkJCSAgIChSU1NJX1JBTkdFICogUlNTSV9SQU5HRSk7Ci0KLQlpZiAoc2lnX3F1YWwgPiAxMDApCi0JCXNpZ19xdWFsID0gMTAwOwotCWVsc2UgaWYgKHNpZ19xdWFsIDwgMSkKLQkJc2lnX3F1YWwgPSAwOwotCi0JcmV0dXJuIHNpZ19xdWFsOwotfQotCiAvKioKICAqIGl3bDM5NDVfcnhfaGFuZGxlIC0gTWFpbiBlbnRyeSBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIHJlc3BvbnNlcyBmcm9tIHVDb2RlCiAgKgpAQCAtMTY4OCw3ICsxNjQ2LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmICghKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfRldfRVJST1JTKSkKKwlpZiAoIShpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgJiYgIWZ1bGxfbG9nKQogCQlzaXplID0gKHNpemUgPiBERUZBVUxUX0lXTDM5NDVfRFVNUF9FVkVOVF9MT0dfRU5UUklFUykKIAkJCT8gREVGQVVMVF9JV0wzOTQ1X0RVTVBfRVZFTlRfTE9HX0VOVFJJRVMgOiBzaXplOwogI2Vsc2UKQEAgLTM4NjcsNyArMzgyNSw2IEBACiAJcHJpdi0+cmV0cnlfcmF0ZSA9IDE7CiAJcHJpdi0+aWJzc19iZWFjb24gPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5zdGFfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmhjbWRfbG9jayk7CiAKQEAgLTM5MzYsOSArMzg5MywxMSBAQAogCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gfAotCQkgICAgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQgfAotCQkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKLQkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTOworCQkgICAgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisKKwlpZiAoIXByaXYtPmNmZy0+YnJva2VuX3Bvd2Vyc2F2ZSkKKwkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCQkgICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTOwogCiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQogCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfApAQCAtNDA1NywxMCArNDAxNiwxMSBAQAogCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgMHgwMCk7CiAKLQkvKiB0aGlzIHNwaW4gbG9jayB3aWxsIGJlIHVzZWQgaW4gYXBtX29wcy5pbml0IGFuZCBFRVBST00gYWNjZXNzCisJLyogdGhlc2Ugc3BpbiBsb2NrcyB3aWxsIGJlIHVzZWQgaW4gYXBtX29wcy5pbml0IGFuZCBFRVBST00gYWNjZXNzCiAJICogd2Ugc2hvdWxkIGluaXQgbm93CiAJICovCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJlZ19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA0LiBSZWFkIEVFUFJPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oCmluZGV4IDVhMjZiYjAuLjg0MjgxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaXdtLmgKQEAgLTI2OCw3ICsyNjgsNyBAQAogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgcnhfdGlja2V0czsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3BhY2tldHNbSVdNX1JYX0lEX0hBU0hdOworCXN0cnVjdCBsaXN0X2hlYWQgcnhfcGFja2V0c1tJV01fUlhfSURfSEFTSCArIDFdOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyeF93cTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcnhfd29ya2VyOwogCkBAIC0zNDksNyArMzQ5LDcgQEAKIGludCBpd21fZG93bihzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7CiAKIC8qIFRYIEFQSSAqLwotdTE2IGl3bV90aWRfdG9fcXVldWUodTE2IHRpZCk7CitpbnQgaXdtX3RpZF90b19xdWV1ZSh1MTYgdGlkKTsKIHZvaWQgaXdtX3R4X2NyZWRpdF9pbmMoc3RydWN0IGl3bV9wcml2ICppd20sIGludCBpZCwgaW50IHRvdGFsX2ZyZWVkX3BhZ2VzKTsKIHZvaWQgaXdtX3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogaW50IGl3bV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL25ldGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL25ldGRldi5jCmluZGV4IGU0ZjBmODcuLmM0YzBkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbmV0ZGV2LmMKQEAgLTc2LDcgKzc2LDcgQEAKICAqLwogc3RhdGljIGNvbnN0IHUxNiBpd21fMWRfdG9fcXVldWVbOF0gPSB7IDEsIDAsIDAsIDEsIDIsIDIsIDMsIDMgfTsKIAotdTE2IGl3bV90aWRfdG9fcXVldWUodTE2IHRpZCkKK2ludCBpd21fdGlkX3RvX3F1ZXVlKHUxNiB0aWQpCiB7CiAJaWYgKHRpZCA+IElXTV9VTUFDX1RJRF9OUiAtIDIpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwppbmRleCAxYzU3YzFmLi42ZDZlZDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAogCQlpZiAoIXN0b3ApIHsKIAkJCXN0cnVjdCBpd21fdHhfcXVldWUgKnR4cTsKLQkJCXUxNiBxdWV1ZSA9IGl3bV90aWRfdG9fcXVldWUoYml0KTsKKwkJCWludCBxdWV1ZSA9IGl3bV90aWRfdG9fcXVldWUoYml0KTsKIAogCQkJaWYgKHF1ZXVlIDwgMCkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKaW5kZXggYjliMzcxYi4uNDI2MTFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKQEAgLTEzNjUsNyArMTM2NSw3IEBACiAJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9SRVNfUkVDRUlWRUQ7CiAKIAkvKiBJZiBub3RoaW5nIHRvIGRvLCBnbyBiYWNrIHRvIHNsZWVwICg/KSAqLwotCWlmICghX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykgJiYgIXByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkKKwlpZiAoIWtmaWZvX2xlbigmcHJpdi0+ZXZlbnRfZmlmbykgJiYgIXByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkKIAkJcHJpdi0+cHNzdGF0ZSA9IFBTX1NUQVRFX1NMRUVQOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKQEAgLTE0MzksNyArMTQzOSw3IEBACiAJfQogCiAJLyogUGVuZGluZyBldmVudHMgb3IgY29tbWFuZCByZXNwb25zZXM/ICovCi0JaWYgKF9fa2ZpZm9fbGVuKHByaXYtPmV2ZW50X2ZpZm8pIHx8IHByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkgeworCWlmIChrZmlmb19sZW4oJnByaXYtPmV2ZW50X2ZpZm8pIHx8IHByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkgewogCQlhbGxvd2VkID0gMDsKIAkJbGJzX2RlYl9ob3N0KCJwZW5kaW5nIGV2ZW50cyBvciBjb21tYW5kIHJlc3BvbnNlc1xuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAppbmRleCA2YThkMmIyLi4wNWJiMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaApAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgInNjYW4uaCIKICNpbmNsdWRlICJhc3NvYy5oIgogCi0KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCiAvKiogc2xlZXBfcGFyYW1zICovCiBzdHJ1Y3Qgc2xlZXBfcGFyYW1zIHsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXUzMiByZXNwX2xlblsyXTsKIAogCS8qIEV2ZW50cyBzZW50IGZyb20gaGFyZHdhcmUgdG8gZHJpdmVyICovCi0Jc3RydWN0IGtmaWZvICpldmVudF9maWZvOworCXN0cnVjdCBrZmlmbyBldmVudF9maWZvOwogCiAJLyoqIHRocmVhZCB0byBzZXJ2aWNlIGludGVycnVwdHMgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1haW5fdGhyZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IGRiMzhhNWEuLmMyOTc1YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCQllbHNlIGlmICghbGlzdF9lbXB0eSgmcHJpdi0+Y21kcGVuZGluZ3EpICYmCiAJCQkJCSEocHJpdi0+d2FrZXVwX2Rldl9yZXF1aXJlZCkpCiAJCQlzaG91bGRzbGVlcCA9IDA7CS8qIFdlIGhhdmUgYSBjb21tYW5kIHRvIHNlbmQgKi8KLQkJZWxzZSBpZiAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykpCisJCWVsc2UgaWYgKGtmaWZvX2xlbigmcHJpdi0+ZXZlbnRfZmlmbykpCiAJCQlzaG91bGRzbGVlcCA9IDA7CS8qIFdlIGhhdmUgYW4gZXZlbnQgdG8gcHJvY2VzcyAqLwogCQllbHNlCiAJCQlzaG91bGRzbGVlcCA9IDE7CS8qIE5vIGNvbW1hbmQgKi8KQEAgLTUxMSwxMCArNTExLDEzIEBACiAKIAkJLyogUHJvY2VzcyBoYXJkd2FyZSBldmVudHMsIGUuZy4gY2FyZCByZW1vdmVkLCBsaW5rIGxvc3QgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwotCQl3aGlsZSAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykpIHsKKwkJd2hpbGUgKGtmaWZvX2xlbigmcHJpdi0+ZXZlbnRfZmlmbykpIHsKIAkJCXUzMiBldmVudDsKLQkJCV9fa2ZpZm9fZ2V0KHByaXYtPmV2ZW50X2ZpZm8sICh1bnNpZ25lZCBjaGFyICopICZldmVudCwKLQkJCQlzaXplb2YoZXZlbnQpKTsKKworCQkJaWYgKGtmaWZvX291dCgmcHJpdi0+ZXZlbnRfZmlmbywKKwkJCQkodW5zaWduZWQgY2hhciAqKSAmZXZlbnQsIHNpemVvZihldmVudCkpICE9CisJCQkJc2l6ZW9mKGV2ZW50KSkKKwkJCQkJYnJlYWs7CiAJCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKIAkJCWxic19wcm9jZXNzX2V2ZW50KHByaXYsIGV2ZW50KTsKIAkJCXNwaW5fbG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKQEAgLTg4MywxMCArODg2LDkgQEAKIAlwcml2LT5yZXNwX2xlblswXSA9IHByaXYtPnJlc3BfbGVuWzFdID0gMDsKIAogCS8qIENyZWF0ZSB0aGUgZXZlbnQgRklGTyAqLwotCXByaXYtPmV2ZW50X2ZpZm8gPSBrZmlmb19hbGxvYyhzaXplb2YodTMyKSAqIDE2LCBHRlBfS0VSTkVMLCBOVUxMKTsKLQlpZiAoSVNfRVJSKHByaXYtPmV2ZW50X2ZpZm8pKSB7CisJcmV0ID0ga2ZpZm9fYWxsb2MoJnByaXYtPmV2ZW50X2ZpZm8sIHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKIAkJbGJzX3ByX2VycigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGV2ZW50IEZJRk8gYnVmZmVyXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC05MDEsOCArOTAzLDcgQEAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7CiAKIAlsYnNfZnJlZV9jbWRfYnVmZmVyKHByaXYpOwotCWlmIChwcml2LT5ldmVudF9maWZvKQotCQlrZmlmb19mcmVlKHByaXYtPmV2ZW50X2ZpZm8pOworCWtmaWZvX2ZyZWUoJnByaXYtPmV2ZW50X2ZpZm8pOwogCWRlbF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1lcik7CiAJZGVsX3RpbWVyKCZwcml2LT5hdXRvX2RlZXBzbGVlcF90aW1lcik7CiAJa2ZyZWUocHJpdi0+bmV0d29ya3MpOwpAQCAtMTE3Nyw3ICsxMTc4LDcgQEAKIAlpZiAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9TTEVFUCkKIAkJcHJpdi0+cHNzdGF0ZSA9IFBTX1NUQVRFX0FXQUtFOwogCi0JX19rZmlmb19wdXQocHJpdi0+ZXZlbnRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LCBzaXplb2YodTMyKSk7CisJa2ZpZm9faW4oJnByaXYtPmV2ZW50X2ZpZm8sICh1bnNpZ25lZCBjaGFyICopICZldmVudCwgc2l6ZW9mKHUzMikpOwogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0cSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYwppbmRleCAyZjkxYzliLi45MmI3YTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgpAQCAtMzUxLDggKzM1Miw3IEBACiAKIAltZXNoX2Rldi0+bmV0ZGV2X29wcyA9ICZtZXNoX25ldGRldl9vcHM7CiAJbWVzaF9kZXYtPmV0aHRvb2xfb3BzID0gJmxic19ldGh0b29sX29wczsKLQltZW1jcHkobWVzaF9kZXYtPmRldl9hZGRyLCBwcml2LT5kZXYtPmRldl9hZGRyLAotCQkJc2l6ZW9mKHByaXYtPmRldi0+ZGV2X2FkZHIpKTsKKwltZW1jcHkobWVzaF9kZXYtPmRldl9hZGRyLCBwcml2LT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAKIAlTRVRfTkVUREVWX0RFVihwcml2LT5tZXNoX2RldiwgcHJpdi0+ZGV2LT5kZXYucGFyZW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCmluZGV4IGM2YTZjMDQuLmIwYjFjNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKQEAgLTU2NywxMSArNTY3LDggQEAKIAljaGFuX2NvdW50ID0gbGJzX3NjYW5fY3JlYXRlX2NoYW5uZWxfbGlzdChwcml2LCBjaGFuX2xpc3QpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPmRldik7Ci0JaWYgKHByaXYtPm1lc2hfZGV2KSB7CisJaWYgKHByaXYtPm1lc2hfZGV2KQogCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKLQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bWVzaF9kZXYpOwotCX0KIAogCS8qIFByZXBhcmUgdG8gY29udGludWUgYW4gaW50ZXJydXB0ZWQgc2NhbiAqLwogCWxic19kZWJfc2NhbigiY2hhbl9jb3VudCAlZCwgc2Nhbl9jaGFubmVsICVkXG4iLApAQCAtNjM1LDE2ICs2MzIsMTMgQEAKIAlwcml2LT5zY2FuX2NoYW5uZWwgPSAwOwogCiBvdXQ6Ci0JaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHsKLQkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5kZXYpOwotCQlpZiAoIXByaXYtPnR4X3BlbmRpbmdfbGVuKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwotCX0KLQlpZiAocHJpdi0+bWVzaF9kZXYgJiYgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkpIHsKLQkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5tZXNoX2Rldik7Ci0JCWlmICghcHJpdi0+dHhfcGVuZGluZ19sZW4pCi0JCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKLQl9CisJaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQgJiYgIXByaXYtPnR4X3BlbmRpbmdfbGVuKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CisKKwlpZiAocHJpdi0+bWVzaF9kZXYgJiYgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkgJiYKKwkgICAgIXByaXYtPnR4X3BlbmRpbmdfbGVuKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKKwogCWtmcmVlKGNoYW5fbGlzdCk7CiAKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAicmV0ICVkIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCBhOGViOWUxLi40YjFhYWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCkBAIC0yMDI1LDEwICsyMDI1LDggQEAKIAlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkgewogCQltZW1jcHkoZXh0cmEsIHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkLAogCQkgICAgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuKTsKLQkJZXh0cmFbcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuXSA9ICdcMCc7CiAJfSBlbHNlIHsKIAkJbWVtc2V0KGV4dHJhLCAwLCAzMik7Ci0JCWV4dHJhW3ByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbl0gPSAnXDAnOwogCX0KIAkvKgogCSAqIElmIG5vbmUsIHdlIG1heSB3YW50IHRvIGdldCB0aGUgb25lIHRoYXQgd2FzIHNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCmluZGV4IDAxOTQzMWQuLjI2YTFhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMKQEAgLTQ5NSw3ICs0OTUsNiBAQAogCXN0YXRzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCXN0YXRzLnNpZ25hbCA9IHByeHBkLT5zbnI7CiAJc3RhdHMubm9pc2UgPSBwcnhwZC0+bmY7Ci0Jc3RhdHMucXVhbCA9IHByeHBkLT5zbnIgLSBwcnhwZC0+bmY7CiAJLyogTWFydmVsbCByYXRlIGluZGV4IGhhcyBhIGhvbGUgYXQgdmFsdWUgNCAqLwogCWlmIChwcnhwZC0+cnhfcmF0ZSA+IDQpCiAJCS0tcHJ4cGQtPnJ4X3JhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCmluZGV4IDc2OThmZGQuLjMxY2EyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIE1BWF9SSURfTEVOIDEwMjQKIAogLyogSGVscGVyIHJvdXRpbmUgdG8gcmVjb3JkIGtleXMKLSAqIERvIG5vdCBjYWxsIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKyAqIEl0IGlzIGNhbGxlZCB1bmRlciBvcmlub2NvX2xvY2sgc28gaXQgbWF5IG5vdCBzbGVlcCAqLwogc3RhdGljIGludCBvcmlub2NvX3NldF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGluZGV4LAogCQkJICAgZW51bSBvcmlub2NvX2FsZyBhbGcsIGNvbnN0IHU4ICprZXksIGludCBrZXlfbGVuLAogCQkJICAgY29uc3QgdTggKnNlcSwgaW50IHNlcV9sZW4pCkBAIC0zMiwxNCArMzIsMTQgQEAKIAlremZyZWUocHJpdi0+a2V5c1tpbmRleF0uc2VxKTsKIAogCWlmIChrZXlfbGVuKSB7Ci0JCXByaXYtPmtleXNbaW5kZXhdLmtleSA9IGt6YWxsb2Moa2V5X2xlbiwgR0ZQX0tFUk5FTCk7CisJCXByaXYtPmtleXNbaW5kZXhdLmtleSA9IGt6YWxsb2Moa2V5X2xlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghcHJpdi0+a2V5c1tpbmRleF0ua2V5KQogCQkJZ290byBub21lbTsKIAl9IGVsc2UKIAkJcHJpdi0+a2V5c1tpbmRleF0ua2V5ID0gTlVMTDsKIAogCWlmIChzZXFfbGVuKSB7Ci0JCXByaXYtPmtleXNbaW5kZXhdLnNlcSA9IGt6YWxsb2Moc2VxX2xlbiwgR0ZQX0tFUk5FTCk7CisJCXByaXYtPmtleXNbaW5kZXhdLnNlcSA9IGt6YWxsb2Moc2VxX2xlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghcHJpdi0+a2V5c1tpbmRleF0uc2VxKQogCQkJZ290byBmcmVlX2tleTsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaAppbmRleCBjNWZlODY3Li4xYTdlYWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCkBAIC0xMzIzLDcgKzEzMjMsNyBAQAogI2RlZmluZSBQQUlSV0lTRV9LRVlfRU5UUlkoX19pZHgpIFwKIAkoIFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICsgKChfX2lkeCkgKiBzaXplb2Yoc3RydWN0IGh3X2tleV9lbnRyeSkpICkKICNkZWZpbmUgTUFDX0lWRUlWX0VOVFJZKF9faWR4KSBcCi0JKCBNQUNfSVZFSVZfVEFCTEVfQkFTRSArICgoX19pZHgpICYgc2l6ZW9mKHN0cnVjdCBtYWNfaXZlaXZfZW50cnkpKSApCisJKCBNQUNfSVZFSVZfVEFCTEVfQkFTRSArICgoX19pZHgpICogc2l6ZW9mKHN0cnVjdCBtYWNfaXZlaXZfZW50cnkpKSApCiAjZGVmaW5lIE1BQ19XQ0lEX0FUVFJfRU5UUlkoX19pZHgpIFwKIAkoIE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKChfX2lkeCkgKiBzaXplb2YodTMyKSkgKQogI2RlZmluZSBTSEFSRURfS0VZX0VOVFJZKF9faWR4KSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKaW5kZXggZWIxZTFkMC4uMjdiZjg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCi0jaWZkZWYgQ09ORklHX1JUMjgwMFVTQgorI2lmIGRlZmluZWQoQ09ORklHX1JUMjgwMFVTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCX01PRFVMRSkKICNpbmNsdWRlICJydDJ4MDB1c2IuaCIKICNlbmRpZgogI2luY2x1ZGUgInJ0MjgwMGxpYi5oIgpAQCAtMTEyMSw3ICsxMTIxLDcgQEAKIAogCWlmIChydDJ4MDBfaW50Zl9pc191c2IocnQyeDAwZGV2KSkgewogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgMHgwMDAwMDAwMCk7Ci0jaWZkZWYgQ09ORklHX1JUMjgwMFVTQgorI2lmIGRlZmluZWQoQ09ORklHX1JUMjgwMFVTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCX01PRFVMRSkKIAkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAogCQkJCQkgICAgVVNCX01PREVfUkVTRVQsIFJFR0lTVEVSX1RJTUVPVVQpOwogI2VuZGlmCkBAIC0yMDIyLDYgKzIwMjIsMTIgQEAKIAl1MTYgZWVwcm9tOwogCiAJLyoKKwkgKiBEaXNhYmxlIHBvd2Vyc2F2aW5nIGFzIGRlZmF1bHQgb24gUENJIGRldmljZXMuCisJICovCisJaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKQorCQlydDJ4MDBkZXYtPmh3LT53aXBoeS0+ZmxhZ3MgJj0gfldJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDsKKworCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgaHcgZmllbGRzLgogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KQEAgLTIwNzQsOCArMjA4MCw3IEBACiAJICAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwKIAkgICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAogCSAgICBJRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkMgfAotCSAgICBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkMgfAotCSAgICBJRUVFODAyMTFfSFRfQ0FQX1BTTVBfU1VQUE9SVDsKKwkgICAgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDOwogCXNwZWMtPmh0LmFtcGR1X2ZhY3RvciA9IDM7CiAJc3BlYy0+aHQuYW1wZHVfZGVuc2l0eSA9IDQ7CiAJc3BlYy0+aHQubWNzLnR4X3BhcmFtcyA9CkBAIC0yMTQwLDggKzIxNDUsOCBAQAogCXJ0MjgwMF9yZWdpc3Rlcl9tdWx0aXJlYWQocnQyeDAwZGV2LCBvZmZzZXQsCiAJCQkJICAgICAgJml2ZWl2X2VudHJ5LCBzaXplb2YoaXZlaXZfZW50cnkpKTsKIAotCW1lbWNweSgmaXZlaXZfZW50cnkuaXZbMF0sIGl2MTYsIHNpemVvZihpdjE2KSk7Ci0JbWVtY3B5KCZpdmVpdl9lbnRyeS5pdls0XSwgaXYzMiwgc2l6ZW9mKGl2MzIpKTsKKwltZW1jcHkoaXYxNiwgJml2ZWl2X2VudHJ5Lml2WzBdLCBzaXplb2YoKml2MTYpKTsKKwltZW1jcHkoaXYzMiwgJml2ZWl2X2VudHJ5Lml2WzRdLCBzaXplb2YoKml2MzIpKTsKIH0KIAogc3RhdGljIGludCBydDI4MDBfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwppbmRleCBhZjg1ZDE4Li5hYjk1MzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCkBAIC05MjIsNiArOTIyLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogTG9naXRlYyAqLwogCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCA2ODdlMTdkLi4wY2E1ODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTI1MzksNiArMjUzOSwxMSBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJLyoKKwkgKiBEaXNhYmxlIHBvd2Vyc2F2aW5nIGFzIGRlZmF1bHQuCisJICovCisJcnQyeDAwZGV2LT5ody0+d2lwaHktPmZsYWdzICY9IH5XSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7CisKKwkvKgogCSAqIEluaXRpYWxpemUgYWxsIGh3IGZpZWxkcy4KIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKaW5kZXggYTFhM2RkMS4uOGE0MGExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYwpAQCAtMTMyLDcgKzEzMiw2IEBACiAKIAkJCXJ4X3N0YXR1cy5hbnRlbm5hID0gKGZsYWdzMiA+PiAxNSkgJiAxOwogCQkJLyogVE9ETzogaW1wcm92ZSBzaWduYWwvcnNzaSByZXBvcnRpbmcgKi8KLQkJCXJ4X3N0YXR1cy5xdWFsID0gZmxhZ3MyICYgMHhGRjsKIAkJCXJ4X3N0YXR1cy5zaWduYWwgPSAoZmxhZ3MyID4+IDgpICYgMHg3RjsKIAkJCS8qIFhYWDogaXMgdGhpcyBjb3JyZWN0PyAqLwogCQkJcnhfc3RhdHVzLnJhdGVfaWR4ID0gKGZsYWdzID4+IDIwKSAmIDB4RjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYm9vdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmMKaW5kZXggMmU3MzNlNy4uMjhhODA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQl9CiAJfQogCi0JaWYgKGxvb3AgPj0gSU5JVF9MT09QKSB7CisJaWYgKGxvb3AgPiBJTklUX0xPT1ApIHsKIAkJd2wxMjUxX2Vycm9yKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHRoZSBoYXJkd2FyZSB0byAiCiAJCQkgICAgICJjb21wbGV0ZSBpbml0aWFsaXphdGlvbiIpOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCmluZGV4IDg4NmE5YmMuLmMzMzg1YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYwpAQCAtNzc3LDcgKzc3Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3bDEyNzFfYnVpbGRfYmFzaWNfcmF0ZXMoY2hhciAqcmF0ZXMsIHU4IGJhbmQpCitzdGF0aWMgaW50IHdsMTI3MV9idWlsZF9iYXNpY19yYXRlcyh1OCAqcmF0ZXMsIHU4IGJhbmQpCiB7CiAJdTggaW5kZXggPSAwOwogCkBAIC04MDQsNyArODA0LDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAKLXN0YXRpYyBpbnQgd2wxMjcxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKGNoYXIgKnJhdGVzLCB1OCBiYW5kKQorc3RhdGljIGludCB3bDEyNzFfYnVpbGRfZXh0ZW5kZWRfcmF0ZXModTggKnJhdGVzLCB1OCBiYW5kKQogewogCXU4IGluZGV4ID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGRmYTFiOWJjLi43Y2E5NWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCkBAIC0xMzI1LDE1MSArMTMyNSwxMSBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IG9mZG1fcXVhbF9kYih1OCBzdGF0dXNfcXVhbGl0eSwgdTggemRfcmF0ZSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jc3RhdGljIGNvbnN0IHUxNiBjb25zdGFudHNbXSA9IHsKLQkJNzE1LCA2NTUsIDU4NSwgNTQwLCA0NzAsIDQxMCwgMzYwLCAzMTUsCi0JCTI3MCwgMjM1LCAyMDUsIDE3NSwgMTUwLCAxMjUsIDEwNSwgIDg1LAotCQkgNjUsICA1MCwgIDQwLCAgMjUsICAxNQotCX07Ci0KLQlpbnQgaTsKLQl1MzIgeDsKLQotCS8qIEl0IHNlZW1zIHRoYXQgdGhlaXIgcXVhbGl0eSBwYXJhbWV0ZXIgaXMgc29tZWhvdyBwZXIgc2lnbmFsCi0JICogYW5kIGlzIG5vdyB0cmFuc2ZlcnJlZCBwZXIgYml0LgotCSAqLwotCXN3aXRjaCAoemRfcmF0ZSkgewotCWNhc2UgWkRfT0ZETV9SQVRFXzZNOgotCWNhc2UgWkRfT0ZETV9SQVRFXzEyTToKLQljYXNlIFpEX09GRE1fUkFURV8yNE06Ci0JCXNpemUgKj0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBaRF9PRkRNX1JBVEVfOU06Ci0JY2FzZSBaRF9PRkRNX1JBVEVfMThNOgotCWNhc2UgWkRfT0ZETV9SQVRFXzM2TToKLQljYXNlIFpEX09GRE1fUkFURV81NE06Ci0JCXNpemUgKj0gNDsKLQkJc2l6ZSAvPSAzOwotCQlicmVhazsKLQljYXNlIFpEX09GRE1fUkFURV80OE06Ci0JCXNpemUgKj0gMzsKLQkJc2l6ZSAvPSAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl4ID0gKDEwMDAwICogc3RhdHVzX3F1YWxpdHkpL3NpemU7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29uc3RhbnRzKTsgaSsrKSB7Ci0JCWlmICh4ID4gY29uc3RhbnRzW2ldKQotCQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoICh6ZF9yYXRlKSB7Ci0JY2FzZSBaRF9PRkRNX1JBVEVfNk06Ci0JY2FzZSBaRF9PRkRNX1JBVEVfOU06Ci0JCWkgKz0gMzsKLQkJYnJlYWs7Ci0JY2FzZSBaRF9PRkRNX1JBVEVfMTJNOgotCWNhc2UgWkRfT0ZETV9SQVRFXzE4TToKLQkJaSArPSA1OwotCQlicmVhazsKLQljYXNlIFpEX09GRE1fUkFURV8yNE06Ci0JY2FzZSBaRF9PRkRNX1JBVEVfMzZNOgotCQlpICs9IDk7Ci0JCWJyZWFrOwotCWNhc2UgWkRfT0ZETV9SQVRFXzQ4TToKLQljYXNlIFpEX09GRE1fUkFURV81NE06Ci0JCWkgKz0gMTU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBpOwotfQotCi1zdGF0aWMgaW50IG9mZG1fcXVhbF9wZXJjZW50KHU4IHN0YXR1c19xdWFsaXR5LCB1OCB6ZF9yYXRlLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlpbnQgcjsKLQotCXIgPSBvZmRtX3F1YWxfZGIoc3RhdHVzX3F1YWxpdHksIHpkX3JhdGUsIHNpemUpOwotCVpEX0FTU0VSVChyID49IDApOwotCWlmIChyIDwgMCkKLQkJciA9IDA7Ci0KLQlyID0gKHIgKiAxMDApLzI5OwotCXJldHVybiByIDw9IDEwMCA/IHIgOiAxMDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9nMTB0aW1lczEwMCh1bnNpZ25lZCBpbnQgeCkKLXsKLQlzdGF0aWMgY29uc3QgdTggbG9nMTBbXSA9IHsKLQkJICAwLAotCQkgIDAsICAgMzAsICAgNDcsICAgNjAsICAgNjksICAgNzcsICAgODQsICAgOTAsICAgOTUsICAxMDAsCi0JCTEwNCwgIDEwNywgIDExMSwgIDExNCwgIDExNywgIDEyMCwgIDEyMywgIDEyNSwgIDEyNywgIDEzMCwKLQkJMTMyLCAgMTM0LCAgMTM2LCAgMTM4LCAgMTM5LCAgMTQxLCAgMTQzLCAgMTQ0LCAgMTQ2LCAgMTQ3LAotCQkxNDksICAxNTAsICAxNTEsICAxNTMsICAxNTQsICAxNTUsICAxNTYsICAxNTcsICAxNTksICAxNjAsCi0JCTE2MSwgIDE2MiwgIDE2MywgIDE2NCwgIDE2NSwgIDE2NiwgIDE2NywgIDE2OCwgIDE2OSwgIDE2OSwKLQkJMTcwLCAgMTcxLCAgMTcyLCAgMTczLCAgMTc0LCAgMTc0LCAgMTc1LCAgMTc2LCAgMTc3LCAgMTc3LAotCQkxNzgsICAxNzksICAxNzksICAxODAsICAxODEsICAxODEsICAxODIsICAxODMsICAxODMsICAxODQsCi0JCTE4NSwgIDE4NSwgIDE4NiwgIDE4NiwgIDE4NywgIDE4OCwgIDE4OCwgIDE4OSwgIDE4OSwgIDE5MCwKLQkJMTkwLCAgMTkxLCAgMTkxLCAgMTkyLCAgMTkyLCAgMTkzLCAgMTkzLCAgMTk0LCAgMTk0LCAgMTk1LAotCQkxOTUsICAxOTYsICAxOTYsICAxOTcsICAxOTcsICAxOTgsICAxOTgsICAxOTksICAxOTksICAyMDAsCi0JCTIwMCwgIDIwMCwgIDIwMSwgIDIwMSwgIDIwMiwgIDIwMiwgIDIwMiwgIDIwMywgIDIwMywgIDIwNCwKLQkJMjA0LCAgMjA0LCAgMjA1LCAgMjA1LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3LAotCQkyMDgsICAyMDgsICAyMDgsICAyMDksICAyMDksICAyMTAsICAyMTAsICAyMTAsICAyMTEsICAyMTEsCi0JCTIxMSwgIDIxMiwgIDIxMiwgIDIxMiwgIDIxMywgIDIxMywgIDIxMywgIDIxMywgIDIxNCwgIDIxNCwKLQkJMjE0LCAgMjE1LCAgMjE1LCAgMjE1LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE3LCAgMjE3LCAgMjE3LAotCQkyMTcsICAyMTgsICAyMTgsICAyMTgsICAyMTksICAyMTksICAyMTksICAyMTksICAyMjAsICAyMjAsCi0JCTIyMCwgIDIyMCwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMywKLQkJMjIzLCAgMjIzLCAgMjIzLCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LAotCX07Ci0KLQlyZXR1cm4geCA8IEFSUkFZX1NJWkUobG9nMTApID8gbG9nMTBbeF0gOiAyMjU7Ci19Ci0KLWVudW0gewotCU1BWF9DQ0tfRVZNX0RCID0gNDUsCi19OwotCi1zdGF0aWMgaW50IGNja19ldm1fZGIodTggc3RhdHVzX3F1YWxpdHkpCi17Ci0JcmV0dXJuICgyMCAqIGxvZzEwdGltZXMxMDAoc3RhdHVzX3F1YWxpdHkpKSAvIDEwMDsKLX0KLQotc3RhdGljIGludCBjY2tfc25yX2RiKHU4IHN0YXR1c19xdWFsaXR5KQotewotCWludCByID0gTUFYX0NDS19FVk1fREIgLSBjY2tfZXZtX2RiKHN0YXR1c19xdWFsaXR5KTsKLQlaRF9BU1NFUlQociA+PSAwKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBjY2tfcXVhbF9wZXJjZW50KHU4IHN0YXR1c19xdWFsaXR5KQotewotCWludCByOwotCi0JciA9IGNja19zbnJfZGIoc3RhdHVzX3F1YWxpdHkpOwotCXIgPSAoMTAwKnIpLzE3OwotCXJldHVybiByIDw9IDEwMCA/IHIgOiAxMDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTggemRfcmF0ZV9mcm9tX29mZG1fcGxjcF9oZWFkZXIoY29uc3Qgdm9pZCAqcnhfZnJhbWUpCiB7CiAJcmV0dXJuIFpEX09GRE0gfCB6ZF9vZmRtX3BsY3BfaGVhZGVyX3JhdGUocnhfZnJhbWUpOwogfQogCi11OCB6ZF9yeF9xdWFsX3BlcmNlbnQoY29uc3Qgdm9pZCAqcnhfZnJhbWUsIHVuc2lnbmVkIGludCBzaXplLAotCSAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJ4X3N0YXR1cyAqc3RhdHVzKQotewotCXJldHVybiAoc3RhdHVzLT5mcmFtZV9zdGF0dXMmWkRfUlhfT0ZETSkgPwotCQlvZmRtX3F1YWxfcGVyY2VudChzdGF0dXMtPnNpZ25hbF9xdWFsaXR5X29mZG0sCi0JCQkJICB6ZF9yYXRlX2Zyb21fb2ZkbV9wbGNwX2hlYWRlcihyeF9mcmFtZSksCi0JCQkgICAgICAgICAgc2l6ZSkgOgotCQljY2tfcXVhbF9wZXJjZW50KHN0YXR1cy0+c2lnbmFsX3F1YWxpdHlfY2NrKTsKLX0KLQogLyoqCiAgKiB6ZF9yeF9yYXRlIC0gcmVwb3J0IHpkLXJhdGUKICAqIEByeF9mcmFtZSAtIHJlY2VpdmVkIGZyYW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKaW5kZXggOWZkOGYzNS4uZjhiYmY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaApAQCAtOTI5LDkgKzkyOSw2IEBACiAKIHN0cnVjdCByeF9zdGF0dXM7CiAKLXU4IHpkX3J4X3F1YWxfcGVyY2VudChjb25zdCB2b2lkICpyeF9mcmFtZSwgdW5zaWduZWQgaW50IHNpemUsCi0JICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJ4X3N0YXR1cyAqc3RhdHVzKTsKLQogdTggemRfcnhfcmF0ZShjb25zdCB2b2lkICpyeF9mcmFtZSwgY29uc3Qgc3RydWN0IHJ4X3N0YXR1cyAqc3RhdHVzKTsKIAogc3RydWN0IHpkX21jX2hhc2ggewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwppbmRleCBjZjUxZThmLi44ZWJmNWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwpAQCAtODI4LDkgKzgyOCw2IEBACiAJc3RhdHMuZnJlcSA9IHpkX2NoYW5uZWxzW196ZF9jaGlwX2dldF9jaGFubmVsKCZtYWMtPmNoaXApIC0gMV0uY2VudGVyX2ZyZXE7CiAJc3RhdHMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJc3RhdHMuc2lnbmFsID0gc3RhdHVzLT5zaWduYWxfc3RyZW5ndGg7Ci0Jc3RhdHMucXVhbCA9IHpkX3J4X3F1YWxfcGVyY2VudChidWZmZXIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CiAKIAlyYXRlID0gemRfcnhfcmF0ZShidWZmZXIsIHN0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCmluZGV4IGJkNTg4ZWIuLjhlMjEwY2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKQEAgLTEyMSw3ICsxMjEsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9HT0xBTV83NDUwCTB4NzQ1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9QT0dPXzc0NTgJMHg3NDU4CiAKLS8qIEFNRCBQQ0lYIGJyaWRnZSByZWdpc3RlcnMgKi8KKy8qIEFNRCBQQ0ktWCBicmlkZ2UgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFBDSVhfTUVNX0JBU0VfTElNSVRfT0ZGU0VUCTB4MUMKICNkZWZpbmUgUENJWF9NSVNDSUlfT0ZGU0VUCQkweDQ4CiAjZGVmaW5lIFBDSVhfTUlTQ19CUklER0VfRVJST1JTX09GRlNFVAkweDgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCBlNTZmOWJlLi40MTczMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCWludCBzZWdtZW50OwkJLyogUENJIGRvbWFpbiAqLwogCXU4IGJ1czsJCQkvKiBQQ0kgYnVzIG51bWJlciAqLwogCXU4IGRldmZuOwkJLyogUENJIGRldmZuIG51bWJlciAqLwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7IC8qIGl0J3MgTlVMTCBmb3IgUENJRS10by1QQ0kgYnJpZGdlICovCisJc3RydWN0IHBjaV9kZXYgKmRldjsgLyogaXQncyBOVUxMIGZvciBQQ0llLXRvLVBDSSBicmlkZ2UgKi8KIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OyAvKiBJT01NVSB1c2VkIGJ5IHRoaXMgZGV2aWNlICovCiAJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47IC8qIHBvaW50ZXIgdG8gZG9tYWluICovCiB9OwpAQCAtMTYwNCw3ICsxNjA0LDcgQEAKIAkJCXJldHVybiByZXQ7CiAJCXBhcmVudCA9IHBhcmVudC0+YnVzLT5zZWxmOwogCX0KLQlpZiAocGNpX2lzX3BjaWUodG1wKSkgLyogdGhpcyBpcyBhIFBDSUUtdG8tUENJIGJyaWRnZSAqLworCWlmIChwY2lfaXNfcGNpZSh0bXApKSAvKiB0aGlzIGlzIGEgUENJZS10by1QQ0kgYnJpZGdlICovCiAJCXJldHVybiBkb21haW5fY29udGV4dF9tYXBwaW5nX29uZShkb21haW4sCiAJCQkJCXBjaV9kb21haW5fbnIodG1wLT5zdWJvcmRpbmF0ZSksCiAJCQkJCXRtcC0+c3Vib3JkaW5hdGUtPm51bWJlciwgMCwKQEAgLTMzMjUsNyArMzMyNSw3IEBACiAJCQkJCSBwYXJlbnQtPmRldmZuKTsKIAkJCXBhcmVudCA9IHBhcmVudC0+YnVzLT5zZWxmOwogCQl9Ci0JCWlmIChwY2lfaXNfcGNpZSh0bXApKSAvKiB0aGlzIGlzIGEgUENJRS10by1QQ0kgYnJpZGdlICovCisJCWlmIChwY2lfaXNfcGNpZSh0bXApKSAvKiB0aGlzIGlzIGEgUENJZS10by1QQ0kgYnJpZGdlICovCiAJCQlpb21tdV9kZXRhY2hfZGV2KGlvbW11LAogCQkJCXRtcC0+c3Vib3JkaW5hdGUtPm51bWJlciwgMCk7CiAJCWVsc2UgLyogdGhpcyBpcyBhIGxlZ2FjeSBQQ0kgYnJpZGdlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA4YjY1YTQ4Li45NWI4NDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTUyOCw3ICs1MjgsNyBAQAogCiAJYnJpZGdlID0gcGNpX2ZpbmRfdXBzdHJlYW1fcGNpZV9icmlkZ2UoZGV2KTsKIAlpZiAoYnJpZGdlKSB7Ci0JCWlmIChwY2lfaXNfcGNpZShicmlkZ2UpKS8qIHRoaXMgaXMgYSBQQ0lFLXRvLVBDSS9QQ0lYIGJyaWRnZSAqLworCQlpZiAocGNpX2lzX3BjaWUoYnJpZGdlKSkvKiB0aGlzIGlzIGEgUENJZS10by1QQ0kvUENJWCBicmlkZ2UgKi8KIAkJCXNldF9pcnRlX3NpZChpcnRlLCBTVlRfVkVSSUZZX0JVUywgU1FfQUxMXzE2LAogCQkJCShicmlkZ2UtPmJ1cy0+bnVtYmVyIDw8IDgpIHwgZGV2LT5idXMtPm51bWJlcik7CiAJCWVsc2UgLyogdGhpcyBpcyBhIGxlZ2FjeSBQQ0kgYnJpZGdlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCBjYzYxN2RkLi43ZTI4Mjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTExMiwxMSArMTEyLDcgQEAKIHN0YXRpYyB2b2lkIGFjcGlfcGNpX3Byb3BhZ2F0ZV93YWtldXBfZW5hYmxlKHN0cnVjdCBwY2lfYnVzICpidXMsIGJvb2wgZW5hYmxlKQogewogCXdoaWxlIChidXMtPnBhcmVudCkgewotCQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwotCQlpbnQgcmV0OwotCi0JCXJldCA9IGFjcGlfcG1fZGV2aWNlX3NsZWVwX3dha2UoJmJyaWRnZS0+ZGV2LCBlbmFibGUpOwotCQlpZiAoIXJldCB8fCBwY2lfaXNfcGNpZShicmlkZ2UpKQorCQlpZiAoIWFjcGlfcG1fZGV2aWNlX3NsZWVwX3dha2UoJmJ1cy0+c2VsZi0+ZGV2LCBlbmFibGUpKQogCQkJcmV0dXJuOwogCQlidXMgPSBidXMtPnBhcmVudDsKIAl9CkBAIC0xMzEsOSArMTI3LDcgQEAKIAlpZiAoYWNwaV9wY2lfY2FuX3dha2V1cChkZXYpKQogCQlyZXR1cm4gYWNwaV9wbV9kZXZpY2Vfc2xlZXBfd2FrZSgmZGV2LT5kZXYsIGVuYWJsZSk7CiAKLQlpZiAoIXBjaV9pc19wY2llKGRldikpCi0JCWFjcGlfcGNpX3Byb3BhZ2F0ZV93YWtldXBfZW5hYmxlKGRldi0+YnVzLCBlbmFibGUpOwotCisJYWNwaV9wY2lfcHJvcGFnYXRlX3dha2V1cF9lbmFibGUoZGV2LT5idXMsIGVuYWJsZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggYzVkZjk0ZS4uODA3MjI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTc1LDcgKzc1LDggQEAKIAlpbnQgbGVuOwogCiAjaWZkZWYgQ09ORklHX05VTUEKLQltYXNrID0gY3B1bWFza19vZl9ub2RlKGRldl90b19ub2RlKGRldikpOworCW1hc2sgPSAoZGV2X3RvX25vZGUoZGV2KSA9PSAtMSkgPyBjcHVfb25saW5lX21hc2sgOgorCQkJCQkgIGNwdW1hc2tfb2Zfbm9kZShkZXZfdG9fbm9kZShkZXYpKTsKICNlbHNlCiAJbWFzayA9IGNwdW1hc2tfb2ZfcGNpYnVzKHRvX3BjaV9kZXYoZGV2KS0+YnVzKTsKICNlbmRpZgpAQCAtOTMsNyArOTQsOCBAQAogCWludCBsZW47CiAKICNpZmRlZiBDT05GSUdfTlVNQQotCW1hc2sgPSBjcHVtYXNrX29mX25vZGUoZGV2X3RvX25vZGUoZGV2KSk7CisJbWFzayA9IChkZXZfdG9fbm9kZShkZXYpID09IC0xKSA/IGNwdV9vbmxpbmVfbWFzayA6CisJCQkJCSAgY3B1bWFza19vZl9ub2RlKGRldl90b19ub2RlKGRldikpOwogI2Vsc2UKIAltYXNrID0gY3B1bWFza19vZl9wY2lidXModG9fcGNpX2RldihkZXYpLT5idXMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDBiYzI3ZTAuLjMxNWZlYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0yOSw3ICsyOSwxNyBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wb3dlcl9uYW1lcyk7CiAKLXVuc2lnbmVkIGludCBwY2lfcG1fZDNfZGVsYXkgPSBQQ0lfUE1fRDNfV0FJVDsKK3Vuc2lnbmVkIGludCBwY2lfcG1fZDNfZGVsYXk7CisKK3N0YXRpYyB2b2lkIHBjaV9kZXZfZDNfc2xlZXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgZGVsYXkgPSBkZXYtPmQzX2RlbGF5OworCisJaWYgKGRlbGF5IDwgcGNpX3BtX2QzX2RlbGF5KQorCQlkZWxheSA9IHBjaV9wbV9kM19kZWxheTsKKworCW1zbGVlcChkZWxheSk7Cit9CiAKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxOwpAQCAtNTIyLDcgKzUzMiw3IEBACiAJLyogTWFuZGF0b3J5IHBvd2VyIG1hbmFnZW1lbnQgdHJhbnNpdGlvbiBkZWxheXMgKi8KIAkvKiBzZWUgUENJIFBNIDEuMSA1LjYuMSB0YWJsZSAxOCAqLwogCWlmIChzdGF0ZSA9PSBQQ0lfRDNob3QgfHwgZGV2LT5jdXJyZW50X3N0YXRlID09IFBDSV9EM2hvdCkKLQkJbXNsZWVwKHBjaV9wbV9kM19kZWxheSk7CisJCXBjaV9kZXZfZDNfc2xlZXAoZGV2KTsKIAllbHNlIGlmIChzdGF0ZSA9PSBQQ0lfRDIgfHwgZGV2LT5jdXJyZW50X3N0YXRlID09IFBDSV9EMikKIAkJdWRlbGF5KFBDSV9QTV9EMl9ERUxBWSk7CiAKQEAgLTExNTMsMTEgKzExNjMsMTEgQEAKIAogLyoqCiAgKiBwY2liaW9zX3NldF9wY2llX3Jlc2V0X3N0YXRlIC0gc2V0IHJlc2V0IHN0YXRlIGZvciBkZXZpY2UgZGV2Ci0gKiBAZGV2OiB0aGUgUENJLUUgZGV2aWNlIHJlc2V0CisgKiBAZGV2OiB0aGUgUENJZSBkZXZpY2UgcmVzZXQKICAqIEBzdGF0ZTogUmVzZXQgc3RhdGUgdG8gZW50ZXIgaW50bwogICoKICAqCi0gKiBTZXRzIHRoZSBQQ0ktRSByZXNldCBzdGF0ZSBmb3IgdGhlIGRldmljZS4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICogU2V0cyB0aGUgUENJZSByZXNldCBzdGF0ZSBmb3IgdGhlIGRldmljZS4gVGhpcyBpcyB0aGUgZGVmYXVsdAogICogaW1wbGVtZW50YXRpb24uIEFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbnMgY2FuIG92ZXJyaWRlIHRoaXMuCiAgKi8KIGludCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIHBjaWJpb3Nfc2V0X3BjaWVfcmVzZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwKQEAgLTExNjgsNyArMTE3OCw3IEBACiAKIC8qKgogICogcGNpX3NldF9wY2llX3Jlc2V0X3N0YXRlIC0gc2V0IHJlc2V0IHN0YXRlIGZvciBkZXZpY2UgZGV2Ci0gKiBAZGV2OiB0aGUgUENJLUUgZGV2aWNlIHJlc2V0CisgKiBAZGV2OiB0aGUgUENJZSBkZXZpY2UgcmVzZXQKICAqIEBzdGF0ZTogUmVzZXQgc3RhdGUgdG8gZW50ZXIgaW50bwogICoKICAqCkBAIC0xNDA5LDYgKzE0MTksNyBAQAogCX0KIAogCWRldi0+cG1fY2FwID0gcG07CisJZGV2LT5kM19kZWxheSA9IFBDSV9QTV9EM19XQUlUOwogCiAJZGV2LT5kMV9zdXBwb3J0ID0gZmFsc2U7CiAJZGV2LT5kMl9zdXBwb3J0ID0gZmFsc2U7CkBAIC0yMjQ3LDEyICsyMjU4LDEyIEBACiAJY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwogCWNzciB8PSBQQ0lfRDNob3Q7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgY3NyKTsKLQltc2xlZXAocGNpX3BtX2QzX2RlbGF5KTsKKwlwY2lfZGV2X2QzX3NsZWVwKGRldik7CiAKIAljc3IgJj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7CiAJY3NyIHw9IFBDSV9EMDsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCBjc3IpOwotCW1zbGVlcChwY2lfcG1fZDNfZGVsYXkpOworCXBjaV9kZXZfZDNfc2xlZXAoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjI5Niw2ICsyMzA3LDEwIEBACiAJCWRvd24oJmRldi0+ZGV2LnNlbSk7CiAJfQogCisJcmMgPSBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KGRldiwgcHJvYmUpOworCWlmIChyYyAhPSAtRU5PVFRZKQorCQlnb3RvIGRvbmU7CisKIAlyYyA9IHBjaWVfZmxyKGRldiwgcHJvYmUpOwogCWlmIChyYyAhPSAtRU5PVFRZKQogCQlnb3RvIGRvbmU7CkBAIC0yNzc5LDYgKzI3OTQsMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAordm9pZCBfX3dlYWsgcGNpX2ZpeHVwX2NhcmRidXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKK30KK0VYUE9SVF9TWU1CT0wocGNpX2ZpeHVwX2NhcmRidXMpOworCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoY2hhciAqc3RyKQogewogCXdoaWxlIChzdHIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggMzNlZDhlMC4uZmJkMGUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTMxMyw0ICszMTMsMTIgQEAKIAogZXh0ZXJuIHZvaWQgcGNpX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7CiAKK3N0cnVjdCBwY2lfZGV2X3Jlc2V0X21ldGhvZHMgeworCXUxNiB2ZW5kb3I7CisJdTE2IGRldmljZTsKKwlpbnQgKCpyZXNldCkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKTsKK307CisKK2V4dGVybiBpbnQgcGNpX2Rldl9zcGVjaWZpY19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpOworCiAjZW5kaWYgLyogRFJJVkVSU19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvS2NvbmZpZy5kZWJ1ZyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL0tjb25maWcuZGVidWcKaW5kZXggYjhjOTI1Yy4uOTE0Mjk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvS2NvbmZpZy5kZWJ1ZworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9LY29uZmlnLmRlYnVnCkBAIC0zLDE0ICszLDE0IEBACiAjCiAKIGNvbmZpZyBQQ0lFQUVSX0lOSkVDVAotCXRyaXN0YXRlICJQQ0lFIEFFUiBlcnJvciBpbmplY3RvciBzdXBwb3J0IgorCXRyaXN0YXRlICJQQ0llIEFFUiBlcnJvciBpbmplY3RvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJRUFFUgogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBQQ0kgRXhwcmVzcyBSb290IFBvcnQgQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nCiAJICAoQUVSKSBzb2Z0d2FyZSBlcnJvciBpbmplY3Rvci4KIAotCSAgRGVidWdpbmcgUENJRSBBRVIgY29kZSBpcyBxdWl0ZSBkaWZmaWN1bHQgYmVjYXVzZSBpdCBpcyBoYXJkCisJICBEZWJ1Z2dpbmcgUENJZSBBRVIgY29kZSBpcyBxdWl0ZSBkaWZmaWN1bHQgYmVjYXVzZSBpdCBpcyBoYXJkCiAJICB0byB0cmlnZ2VyIHZhcmlvdXMgcmVhbCBoYXJkd2FyZSBlcnJvcnMuIFNvZnR3YXJlIGJhc2VkCiAJICBlcnJvciBpbmplY3Rpb24gY2FuIGZha2UgYWxtb3N0IGFsbCBraW5kcyBvZiBlcnJvcnMgd2l0aCB0aGUKIAkgIGhlbHAgb2YgYSB1c2VyIHNwYWNlIGhlbHBlciB0b29sIGFlci1pbmplY3QsIHdoaWNoIGNhbiBiZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyX2luamVjdC5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyX2luamVjdC5jCmluZGV4IDdmY2Q1MzMxLi44YzMwYTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJfaW5qZWN0LmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyX2luamVjdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIFBDSUUgQUVSIHNvZnR3YXJlIGVycm9yIGluamVjdGlvbiBzdXBwb3J0LgorICogUENJZSBBRVIgc29mdHdhcmUgZXJyb3IgaW5qZWN0aW9uIHN1cHBvcnQuCiAgKgotICogRGVidWdpbmcgUENJRSBBRVIgY29kZSBpcyBxdWl0ZSBkaWZmaWN1bHQgYmVjYXVzZSBpdCBpcyBoYXJkIHRvCisgKiBEZWJ1Z2luZyBQQ0llIEFFUiBjb2RlIGlzIHF1aXRlIGRpZmZpY3VsdCBiZWNhdXNlIGl0IGlzIGhhcmQgdG8KICAqIHRyaWdnZXIgdmFyaW91cyByZWFsIGhhcmR3YXJlIGVycm9ycy4gU29mdHdhcmUgYmFzZWQgZXJyb3IKICAqIGluamVjdGlvbiBjYW4gZmFrZSBhbG1vc3QgYWxsIGtpbmRzIG9mIGVycm9ycyB3aXRoIHRoZSBoZWxwIG9mIGEKICAqIHVzZXIgc3BhY2UgaGVscGVyIHRvb2wgYWVyLWluamVjdCwgd2hpY2ggY2FuIGJlIGdvdHRlbiBmcm9tOgpAQCAtMzIxLDcgKzMyMSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oZWluai0+ZGV2LCBlaW5qLT5mbik7CiAJaW50IHBvc19jYXBfZXJyLCBycF9wb3NfY2FwX2VycjsKLQl1MzIgc2V2ZXI7CisJdTMyIHNldmVyLCBtYXNrOwogCWludCByZXQgPSAwOwogCiAJZGV2ID0gcGNpX2dldF9kb21haW5fYnVzX2FuZF9zbG90KChpbnQpZWluai0+ZG9tYWluLCBlaW5qLT5idXMsIGRldmZuKTsKQEAgLTM3NCw2ICszNzQsMjQgQEAKIAllcnItPmhlYWRlcl9sb2cyID0gZWluai0+aGVhZGVyX2xvZzI7CiAJZXJyLT5oZWFkZXJfbG9nMyA9IGVpbmotPmhlYWRlcl9sb2czOwogCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zX2NhcF9lcnIgKyBQQ0lfRVJSX0NPUl9NQVNLLCAmbWFzayk7CisJaWYgKGVpbmotPmNvcl9zdGF0dXMgJiYgIShlaW5qLT5jb3Jfc3RhdHVzICYgfm1hc2spKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRoZSBjb3JyZWN0YWJsZSBlcnJvcihzKSBpcyBtYXNrZWQgIgorCQkJCSJieSBkZXZpY2VcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmplY3RfbG9jaywgZmxhZ3MpOworCQlnb3RvIG91dF9wdXQ7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zX2NhcF9lcnIgKyBQQ0lfRVJSX1VOQ09SX01BU0ssICZtYXNrKTsKKwlpZiAoZWluai0+dW5jb3Jfc3RhdHVzICYmICEoZWluai0+dW5jb3Jfc3RhdHVzICYgfm1hc2spKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRoZSB1bmNvcnJlY3RhYmxlIGVycm9yKHMpIGlzIG1hc2tlZCAiCisJCQkJImJ5IGRldmljZVxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluamVjdF9sb2NrLCBmbGFncyk7CisJCWdvdG8gb3V0X3B1dDsKKwl9CisKIAlycGVyciA9IF9fZmluZF9hZXJfZXJyb3JfYnlfZGV2KHJwZGV2KTsKIAlpZiAoIXJwZXJyKSB7CiAJCXJwZXJyID0gcnBlcnJfYWxsb2M7CkBAIC00MTMsOCArNDMxLDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0OwogCi0JaWYgKGZpbmRfYWVyX2RldmljZShycGRldiwgJmVkZXYpKQorCWlmIChmaW5kX2Flcl9kZXZpY2UocnBkZXYsICZlZGV2KSkgeworCQlpZiAoIWdldF9zZXJ2aWNlX2RhdGEoZWRldikpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFFUiBzZXJ2aWNlIGlzIG5vdCBpbml0aWFsaXplZFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXRfcHV0OworCQl9CiAJCWFlcl9pcnEoLTEsIGVkZXYpOworCX0KIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7CiBvdXRfcHV0OgpAQCAtNDg0LDUgKzUwOCw1IEBACiBtb2R1bGVfaW5pdChhZXJfaW5qZWN0X2luaXQpOwogbW9kdWxlX2V4aXQoYWVyX2luamVjdF9leGl0KTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0lFIEFFUiBzb2Z0d2FyZSBlcnJvciBpbmplY3RvciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0llIEFFUiBzb2Z0d2FyZSBlcnJvciBpbmplY3RvciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwppbmRleCA5N2EzNDU5Li4yMWYyMTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJbXV0ZXhfaW5pdCgmcnBjLT5ycGNfbXV0ZXgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJwYy0+d2FpdF9yZWxlYXNlKTsKIAotCS8qIFVzZSBQQ0lFIGJ1cyBmdW5jdGlvbiB0byBzdG9yZSBycGMgaW50byBQQ0lFIGRldmljZSAqLworCS8qIFVzZSBQQ0llIGJ1cyBmdW5jdGlvbiB0byBzdG9yZSBycGMgaW50byBQQ0llIGRldmljZSAqLwogCXNldF9zZXJ2aWNlX2RhdGEoZGV2LCBycGMpOwogCiAJcmV0dXJuIHJwYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jCmluZGV4IDhlZGIyZjMuLjA0ODE0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2FjcGkuYwpAQCAtMjQsNyArMjQsNyBAQAogICoKICAqIEByZXR1cm46IFplcm8gb24gc3VjY2Vzcy4gTm9uemVybyBvdGhlcndpc2UuCiAgKgotICogSW52b2tlZCB3aGVuIFBDSUUgYnVzIGxvYWRzIEFFUiBzZXJ2aWNlIGRyaXZlci4gVG8gYXZvaWQgY29uZmxpY3Qgd2l0aAorICogSW52b2tlZCB3aGVuIFBDSWUgYnVzIGxvYWRzIEFFUiBzZXJ2aWNlIGRyaXZlci4gVG8gYXZvaWQgY29uZmxpY3Qgd2l0aAogICogQklPUyBBRVIgc3VwcG9ydCByZXF1aXJlcyBCSU9TIHRvIHlpZWxkIEFFUiBjb250cm9sIHRvIE9TIG5hdGl2ZSBkcml2ZXIuCiAgKiovCiBpbnQgYWVyX29zY19zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnBjaWVkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwppbmRleCBhZTY3MmNhLi5jODQzYTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKQEAgLTU4Nyw3ICs1ODcsNyBAQAogICogYWVyX2VuYWJsZV9yb290cG9ydCAtIGVuYWJsZSBSb290IFBvcnQncyBpbnRlcnJ1cHRzIHdoZW4gcmVjZWl2aW5nIG1lc3NhZ2VzCiAgKiBAcnBjOiBwb2ludGVyIHRvIGEgUm9vdCBQb3J0IGRhdGEgc3RydWN0dXJlCiAgKgotICogSW52b2tlZCB3aGVuIFBDSUUgYnVzIGxvYWRzIEFFUiBzZXJ2aWNlIGRyaXZlci4KKyAqIEludm9rZWQgd2hlbiBQQ0llIGJ1cyBsb2FkcyBBRVIgc2VydmljZSBkcml2ZXIuCiAgKi8KIHZvaWQgYWVyX2VuYWJsZV9yb290cG9ydChzdHJ1Y3QgYWVyX3JwYyAqcnBjKQogewpAQCAtNTk3LDcgKzU5Nyw3IEBACiAJdTMyIHJlZzMyOwogCiAJcG9zID0gcGNpX3BjaWVfY2FwKHBkZXYpOwotCS8qIENsZWFyIFBDSUUgQ2FwYWJpbGl0eSdzIERldmljZSBTdGF0dXMgKi8KKwkvKiBDbGVhciBQQ0llIENhcGFiaWxpdHkncyBEZXZpY2UgU3RhdHVzICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zK1BDSV9FWFBfREVWU1RBLCAmcmVnMTYpOwogCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MrUENJX0VYUF9ERVZTVEEsIHJlZzE2KTsKIApAQCAtNjMxLDcgKzYzMSw3IEBACiAgKiBkaXNhYmxlX3Jvb3RfYWVyIC0gZGlzYWJsZSBSb290IFBvcnQncyBpbnRlcnJ1cHRzIHdoZW4gcmVjZWl2aW5nIG1lc3NhZ2VzCiAgKiBAcnBjOiBwb2ludGVyIHRvIGEgUm9vdCBQb3J0IGRhdGEgc3RydWN0dXJlCiAgKgotICogSW52b2tlZCB3aGVuIFBDSUUgYnVzIHVubG9hZHMgQUVSIHNlcnZpY2UgZHJpdmVyLgorICogSW52b2tlZCB3aGVuIFBDSWUgYnVzIHVubG9hZHMgQUVSIHNlcnZpY2UgZHJpdmVyLgogICovCiBzdGF0aWMgdm9pZCBkaXNhYmxlX3Jvb3RfYWVyKHN0cnVjdCBhZXJfcnBjICpycGMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfZXJycHJpbnQuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jCmluZGV4IDQ0YWNkZTcuLjlkM2U0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAogCWlmIChpbmZvLT5zdGF0dXMgPT0gMCkgewogCQlBRVJfUFIoaW5mbywgZGV2LAotCQkJIlBDSUUgQnVzIEVycm9yOiBzZXZlcml0eT0lcywgdHlwZT1VbmFjY2Vzc2libGUsICIKKwkJCSJQQ0llIEJ1cyBFcnJvcjogc2V2ZXJpdHk9JXMsIHR5cGU9VW5hY2Nlc3NpYmxlLCAiCiAJCQkiaWQ9JTA0eChVbnJlZ2lzdGVyZWQgQWdlbnQgSUQpXG4iLAogCQkJYWVyX2Vycm9yX3NldmVyaXR5X3N0cmluZ1tpbmZvLT5zZXZlcml0eV0sIGlkKTsKIAl9IGVsc2UgewpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCWFnZW50ID0gQUVSX0dFVF9BR0VOVChpbmZvLT5zZXZlcml0eSwgaW5mby0+c3RhdHVzKTsKIAogCQlBRVJfUFIoaW5mbywgZGV2LAotCQkJIlBDSUUgQnVzIEVycm9yOiBzZXZlcml0eT0lcywgdHlwZT0lcywgaWQ9JTA0eCglcylcbiIsCisJCQkiUENJZSBCdXMgRXJyb3I6IHNldmVyaXR5PSVzLCB0eXBlPSVzLCBpZD0lMDR4KCVzKVxuIiwKIAkJCWFlcl9lcnJvcl9zZXZlcml0eV9zdHJpbmdbaW5mby0+c2V2ZXJpdHldLAogCQkJYWVyX2Vycm9yX2xheWVyW2xheWVyXSwgaWQsIGFlcl9hZ2VudF9zdHJpbmdbYWdlbnRdKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMgYi9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYwppbmRleCA1YTAxZmM3Li5iZTUzZDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBGaWxlOglkcml2ZXJzL3BjaS9wY2llL2FzcG0uYwotICogRW5hYmxpbmcgUENJRSBsaW5rIEwwcy9MMSBzdGF0ZSBhbmQgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudAorICogRW5hYmxpbmcgUENJZSBsaW5rIEwwcy9MMSBzdGF0ZSBhbmQgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBJbnRlbAogICogQ29weXJpZ2h0IChDKSBaaGFuZyBZYW5taW4gKHlhbm1pbi56aGFuZ0BpbnRlbC5jb20pCkBAIC00OTksNyArNDk5LDcgQEAKIAlpbnQgcG9zOwogCXUzMiByZWczMjsKIAkvKgotCSAqIFNvbWUgZnVuY3Rpb25zIGluIGEgc2xvdCBtaWdodCBub3QgYWxsIGJlIFBDSUUgZnVuY3Rpb25zLAorCSAqIFNvbWUgZnVuY3Rpb25zIGluIGEgc2xvdCBtaWdodCBub3QgYWxsIGJlIFBDSWUgZnVuY3Rpb25zLAogCSAqIHZlcnkgc3RyYW5nZS4gRGlzYWJsZSBBU1BNIGZvciB0aGUgd2hvbGUgc2xvdAogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZwZGV2LT5zdWJvcmRpbmF0ZS0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IDQxMzI2MmUuLmIxNzQxODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMjcsNyArMjcsNyBAQAogICovCiBzdGF0aWMgdm9pZCByZWxlYXNlX3BjaWVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlrZnJlZSh0b19wY2llX2RldmljZShkZXYpKTsJCQkKKwlrZnJlZSh0b19wY2llX2RldmljZShkZXYpKTsKIH0KIAogLyoqCkBAIC0zNDYsMTIgKzM0NiwxMSBAQAogewogCXN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKnNlcnZpY2VfZHJpdmVyOwogCi0gCWlmICgoZGV2LT5idXMgPT0gJnBjaWVfcG9ydF9idXNfdHlwZSkgJiYKLSAJICAgIChkZXYtPmRyaXZlcikpIHsKLSAJCXNlcnZpY2VfZHJpdmVyID0gdG9fc2VydmljZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotIAkJaWYgKHNlcnZpY2VfZHJpdmVyLT5zdXNwZW5kKQotIAkJCXNlcnZpY2VfZHJpdmVyLT5zdXNwZW5kKHRvX3BjaWVfZGV2aWNlKGRldikpOwotICAJfQorCWlmICgoZGV2LT5idXMgPT0gJnBjaWVfcG9ydF9idXNfdHlwZSkgJiYgZGV2LT5kcml2ZXIpIHsKKwkJc2VydmljZV9kcml2ZXIgPSB0b19zZXJ2aWNlX2RyaXZlcihkZXYtPmRyaXZlcik7CisJCWlmIChzZXJ2aWNlX2RyaXZlci0+c3VzcGVuZCkKKwkJCXNlcnZpY2VfZHJpdmVyLT5zdXNwZW5kKHRvX3BjaWVfZGV2aWNlKGRldikpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDk0LDYgKzQ5Myw3IEBACiAKIAlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZuZXctPmRyaXZlcik7CiB9CitFWFBPUlRfU1lNQk9MKHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKTsKIAogLyoqCiAgKiBwY2llX3BvcnRfc2VydmljZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQQ0kgRXhwcmVzcyBwb3J0IHNlcnZpY2UgZHJpdmVyCkBAIC01MDMsNiArNTAzLDQgQEAKIHsKIAlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogfQotCi1FWFBPUlRfU1lNQk9MKHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0wocGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKaW5kZXggYTQ5NDUyZS4uMTNjODk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJ0b20ubC5uZ3V5ZW5AaW50ZWwuY29tIgotI2RlZmluZSBEUklWRVJfREVTQyAiUENJRSBQb3J0IEJ1cyBEcml2ZXIiCisjZGVmaW5lIERSSVZFUl9ERVNDICJQQ0llIFBvcnQgQnVzIERyaXZlciIKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNjMsNyArNjMsNyBAQAogICogcGNpZV9wb3J0ZHJ2X3Byb2JlIC0gUHJvYmUgUENJLUV4cHJlc3MgcG9ydCBkZXZpY2VzCiAgKiBAZGV2OiBQQ0ktRXhwcmVzcyBwb3J0IGRldmljZSBiZWluZyBwcm9iZWQKICAqCi0gKiBJZiBkZXRlY3RlZCBpbnZva2VzIHRoZSBwY2llX3BvcnRfZGV2aWNlX3JlZ2lzdGVyKCkgbWV0aG9kIGZvciAKKyAqIElmIGRldGVjdGVkIGludm9rZXMgdGhlIHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoKSBtZXRob2QgZm9yCiAgKiB0aGlzIHBvcnQgZGV2aWNlLgogICoKICAqLwpAQCAtNzgsNyArNzgsNyBAQAogCSAgICAgKGRldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9ET1dOU1RSRUFNKSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0gICAgICAgIGlmICghZGV2LT5pcnEgJiYgZGV2LT5waW4pIHsKKwlpZiAoIWRldi0+aXJxICYmIGRldi0+cGluKSB7CiAJCWRldl93YXJuKCZkZXYtPmRldiwgImRldmljZSBbJTA0eDolMDR4XSBoYXMgaW52YWxpZCBJUlE7ICIKIAkJCSAiY2hlY2sgdmVuZG9yIEJJT1NcbiIsIGRldi0+dmVuZG9yLCBkZXYtPmRldmljZSk7CiAJfQpAQCAtOTEsNyArOTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwY2llX3BvcnRkcnZfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcGNpZV9wb3J0ZHJ2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXBjaWVfcG9ydF9kZXZpY2VfcmVtb3ZlKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CkBAIC0xMjksMTQgKzEyOSwxMyBAQAogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgcGNpZV9wb3J0ZHJ2X2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCWVudW0gcGNpX2NoYW5uZWxfc3RhdGUgZXJyb3IpCiB7Ci0Jc3RydWN0IGFlcl9icm9hZGNhc3RfZGF0YSByZXN1bHRfZGF0YSA9Ci0JCQl7ZXJyb3IsIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSfTsKLQlpbnQgcmV0dmFsOworCXN0cnVjdCBhZXJfYnJvYWRjYXN0X2RhdGEgZGF0YSA9IHtlcnJvciwgUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVJ9OworCWludCByZXQ7CiAKIAkvKiBjYW4gbm90IGZhaWwgKi8KLQlyZXR2YWwgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCAmcmVzdWx0X2RhdGEsIGVycm9yX2RldGVjdGVkX2l0ZXIpOworCXJldCA9IGRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsICZkYXRhLCBlcnJvcl9kZXRlY3RlZF9pdGVyKTsKIAotCXJldHVybiByZXN1bHRfZGF0YS5yZXN1bHQ7CisJcmV0dXJuIGRhdGEucmVzdWx0OwogfQogCiBzdGF0aWMgaW50IG1taW9fZW5hYmxlZF9pdGVyKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqZGF0YSkKQEAgLTI5MCw3ICsyODksNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBwY2llX3BvcnRkcnZfZXhpdCh2b2lkKSAKK3N0YXRpYyB2b2lkIF9fZXhpdCBwY2llX3BvcnRkcnZfZXhpdCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNpZV9wb3J0ZHJpdmVyKTsKIAlwY2llX3BvcnRfYnVzX3VucmVnaXN0ZXIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggN2NmYTdjMy4uYzc0Njk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTI2MjksMTQgKzI2MjksODYgQEAKIAlpZiAoIXBjaV9jYWNoZV9saW5lX3NpemUpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogQ0xTICV1IGJ5dGVzLCBkZWZhdWx0ICV1XG4iLAogCQkgICAgICAgY2xzIDw8IDIsIHBjaV9kZmxfY2FjaGVfbGluZV9zaXplIDw8IDIpOwotCQlwY2lfY2FjaGVfbGluZV9zaXplID0gY2xzOworCQlwY2lfY2FjaGVfbGluZV9zaXplID0gY2xzID8gY2xzIDogcGNpX2RmbF9jYWNoZV9saW5lX3NpemU7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIGZzX2luaXRjYWxsX3N5bmMocGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyk7CisKKy8qCisgKiBGb2xsb3dpbmdzIGFyZSBkZXZpY2Utc3BlY2lmaWMgcmVzZXQgbWV0aG9kcyB3aGljaCBjYW4gYmUgdXNlZCB0bworICogcmVzZXQgYSBzaW5nbGUgZnVuY3Rpb24gaWYgb3RoZXIgbWV0aG9kcyAoZS5nLiBGTFIsIFBNIEQwLT5EMykgYXJlCisgKiBub3QgYXZhaWxhYmxlLgorICovCitzdGF0aWMgaW50IHJlc2V0X2ludGVsX2dlbmVyaWNfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkKK3sKKwlpbnQgcG9zOworCisJLyogb25seSBpbXBsZW1lbnQgUENJX0NMQVNTX1NFUklBTF9VU0IgYXQgcHJlc2VudCAqLworCWlmIChkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCKSB7CisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOworCQlpZiAoIXBvcykKKwkJCXJldHVybiAtRU5PVFRZOworCisJCWlmIChwcm9iZSkKKwkJCXJldHVybiAwOworCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcyArIDB4NCwgMSk7CisJCW1zbGVlcCgxMDApOworCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAtRU5PVFRZOworCX0KK30KKworc3RhdGljIGludCByZXNldF9pbnRlbF84MjU5OV9zZnBfdmlydGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkKK3sKKwlpbnQgcG9zOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FTk9UVFk7CisKKwlpZiAocHJvYmUpCisJCXJldHVybiAwOworCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9ERVZDVEwsCisJCQkJUENJX0VYUF9ERVZDVExfQkNSX0ZMUik7CisJbXNsZWVwKDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTk5X1NGUF9WRiAgIDB4MTBlZAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfcmVzZXRfbWV0aG9kcyBwY2lfZGV2X3Jlc2V0X21ldGhvZHNbXSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1OTlfU0ZQX1ZGLAorCQkgcmVzZXRfaW50ZWxfODI1OTlfc2ZwX3ZpcnRmbiB9LAorCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCwKKwkJcmVzZXRfaW50ZWxfZ2VuZXJpY19kZXYgfSwKKwl7IDAgfQorfTsKKworaW50IHBjaV9kZXZfc3BlY2lmaWNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKQoreworCWNvbnN0IHN0cnVjdCBwY2lfZGV2X3Jlc2V0X21ldGhvZHMgKmk7CisKKwlmb3IgKGkgPSBwY2lfZGV2X3Jlc2V0X21ldGhvZHM7IGktPnJlc2V0OyBpKyspIHsKKwkJaWYgKChpLT52ZW5kb3IgPT0gZGV2LT52ZW5kb3IgfHwKKwkJICAgICBpLT52ZW5kb3IgPT0gKHUxNilQQ0lfQU5ZX0lEKSAmJgorCQkgICAgKGktPmRldmljZSA9PSBkZXYtPmRldmljZSB8fAorCQkgICAgIGktPmRldmljZSA9PSAodTE2KVBDSV9BTllfSUQpKQorCQkJcmV0dXJuIGktPnJlc2V0KGRldiwgcHJvYmUpOworCX0KKworCXJldHVybiAtRU5PVFRZOworfQorCiAjZWxzZQogdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KK2ludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkgeyByZXR1cm4gLUVOT1RUWTsgfQogI2VuZGlmCiBFWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwppbmRleCA2ZGFlODcxLi40YTQ3MWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guYworKysgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwpAQCAtMTUsOSArMTUsOSBAQAogCiBERUNMQVJFX1JXU0VNKHBjaV9idXNfc2VtKTsKIC8qCi0gKiBmaW5kIHRoZSB1cHN0cmVhbSBQQ0lFLXRvLVBDSSBicmlkZ2Ugb2YgYSBQQ0kgZGV2aWNlCisgKiBmaW5kIHRoZSB1cHN0cmVhbSBQQ0llLXRvLVBDSSBicmlkZ2Ugb2YgYSBQQ0kgZGV2aWNlCiAgKiBpZiB0aGUgZGV2aWNlIGlzIFBDSUUsIHJldHVybiBOVUxMCi0gKiBpZiB0aGUgZGV2aWNlIGlzbid0IGNvbm5lY3RlZCB0byBhIFBDSUUgYnJpZGdlICh0aGF0IGlzIGl0cyBwYXJlbnQgaXMgYQorICogaWYgdGhlIGRldmljZSBpc24ndCBjb25uZWN0ZWQgdG8gYSBQQ0llIGJyaWRnZSAodGhhdCBpcyBpdHMgcGFyZW50IGlzIGEKICAqIGxlZ2FjeSBQQ0kgYnJpZGdlIGFuZCB0aGUgYnJpZGdlIGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBidXMgMCksIHJldHVybiBpdHMKICAqIHBhcmVudAogICovCkBAIC0zNyw3ICszNyw3IEBACiAJCQl0bXAgPSBwZGV2OwogCQkJY29udGludWU7CiAJCX0KLQkJLyogUENJIGRldmljZSBzaG91bGQgY29ubmVjdCB0byBhIFBDSUUgYnJpZGdlICovCisJCS8qIFBDSSBkZXZpY2Ugc2hvdWxkIGNvbm5lY3QgdG8gYSBQQ0llIGJyaWRnZSAqLwogCQlpZiAocGRldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9QQ0lfQlJJREdFKSB7CiAJCQkvKiBCdXN0ZWQgaGFyZHdhcmU/ICovCiAJCQlXQVJOX09OX09OQ0UoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKaW5kZXggY2RmNTBmMy4uZDk5Zjg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJdW5zaWduZWQgaW50IG1heCwgcGFzczsKIAogCXMtPmZ1bmN0aW9ucyA9IHBjaV9zY2FuX3Nsb3QoYnVzLCBQQ0lfREVWRk4oMCwgMCkpOwotLyoJcGNpYmlvc19maXh1cF9idXMoYnVzKTsgKi8KKwlwY2lfZml4dXBfY2FyZGJ1cyhidXMpOyAKIAogCW1heCA9IGJ1cy0+c2Vjb25kYXJ5OwogCWZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwppbmRleCBmYzViZjlkLi5kYjMyYzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKQEAgLTIzMSw4ICsyMzEsMzYgQEAKIAogCSAgVGhpcyBkcml2ZXIgd2FzIGZvcm1lcmx5IGtub3duIGFzIGlibS1hY3BpLgogCisJICBFeHRyYSBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgYXZhaWxhYmxlIGlmIHRoZSByZmtpbGwgKENPTkZJR19SRktJTEwpCisJICBhbmQvb3IgQUxTQSAoQ09ORklHX1NORCkgc3Vic3lzdGVtcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuCisJICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgVGhpbmtQYWQtQUNQSSB0byBiZSBidWlsdC1pbiBpbnN0ZWFkIG9mCisJICBtb2R1bGFyLCBBTFNBIGFuZCByZmtpbGwgd2lsbCBhbHNvIGhhdmUgdG8gYmUgYnVpbHQtaW4uCisKIAkgIElmIHlvdSBoYXZlIGFuIElCTSBvciBMZW5vdm8gVGhpbmtQYWQgbGFwdG9wLCBzYXkgWSBvciBNIGhlcmUuCiAKK2NvbmZpZyBUSElOS1BBRF9BQ1BJX0FMU0FfU1VQUE9SVAorCWJvb2wgIkNvbnNvbGUgYXVkaW8gY29udHJvbCBBTFNBIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIFRISU5LUEFEX0FDUEkKKwlkZXBlbmRzIG9uIFNORAorCWRlcGVuZHMgb24gU05EID0geSB8fCBUSElOS1BBRF9BQ1BJID0gU05ECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgRW5hYmxlcyBtb25pdG9yaW5nIG9mIHRoZSBidWlsdC1pbiBjb25zb2xlIGF1ZGlvIG91dHB1dCBjb250cm9sCisJICAoaGVhZHBob25lIGFuZCBzcGVha2VycyksIHdoaWNoIGlzIG9wZXJhdGVkIGJ5IHRoZSBtdXRlIGFuZCAoaW4KKwkgIHNvbWUgVGhpbmtQYWQgbW9kZWxzKSB2b2x1bWUgaG90a2V5cy4KKworCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgVGhpbmtQYWQtQUNQSSB3aWxsIGV4cG9ydCBhbiBBTFNBIGNhcmQKKwkgIHdpdGggYSBzaW5nbGUgcmVhZC1vbmx5IG1peGVyIGNvbnRyb2wsIHdoaWNoIHNob3VsZCBiZSB1c2VkIGZvcgorCSAgb24tc2NyZWVuLWRpc3BsYXkgZmVlZGJhY2sgcHVycG9zZXMgYnkgdGhlIERlc2t0b3AgRW52aXJvbm1lbnQuCisKKwkgIE9wdGlvbmFsbHksIHRoZSBkcml2ZXIgd2lsbCBhbHNvIGFsbG93IHNvZnR3YXJlIGNvbnRyb2wgKHRoZQorCSAgQUxTQSBtaXhlciB3aWxsIGJlIG1hZGUgcmVhZC13cml0ZSkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIGRyaXZlcgorCSAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworCSAgQWxsIElCTSBtb2RlbHMgaGF2ZSBib3RoIHZvbHVtZSBhbmQgbXV0ZSBjb250cm9sLiAgTmV3ZXIgTGVub3ZvCisJICBtb2RlbHMgb25seSBoYXZlIG11dGUgY29udHJvbCAodGhlIHZvbHVtZSBob3RrZXlzIGFyZSBqdXN0IG5vcm1hbAorCSAga2V5cyBhbmQgdm9sdW1lIGNvbnRyb2wgaXMgZG9uZSB0aHJvdWdoIHRoZSBtYWluIEhEQSBtaXhlcikuCisKIGNvbmZpZyBUSElOS1BBRF9BQ1BJX0RFQlVHRkFDSUxJVElFUwogCWJvb2wgIk1haW50YWluZXIgZGVidWcgZmFjaWxpdGllcyIKIAlkZXBlbmRzIG9uIFRISU5LUEFEX0FDUEkKQEAgLTQ2NCw0ICs0OTIsMTYgQEAKIAogCSAgSWYgeW91IGhhdmUgYSBtb2Rlcm4gVG9zaGliYSBsYXB0b3Agd2l0aCBhIEJsdWV0b290aCBhbmQgYW4KIAkgIFJGS2lsbCBzd2l0Y2ggKHN1Y2ggYXMgdGhlIFBvcnRlZ2UgUjUwMCksIHNheSBZLgorCitjb25maWcgQUNQSV9DTVBDCisJdHJpc3RhdGUgIkNNUEMgTGFwdG9wIEV4dHJhcyIKKwlkZXBlbmRzIG9uIFg4NiAmJiBBQ1BJCisJc2VsZWN0IElOUFVUCisJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTdXBwb3J0IGZvciBJbnRlbCBDbGFzc21hdGUgUEMgQUNQSSBkZXZpY2VzLCBpbmNsdWRpbmcgc29tZQorCSAga2V5cyBhcyBpbnB1dCBkZXZpY2UsIGJhY2tsaWdodCBkZXZpY2UsIHRhYmxldCBhbmQgYWNjZWxlcm9tZXRlcgorCSAgZGV2aWNlcy4KKwogZW5kaWYgIyBYODZfUExBVEZPUk1fREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQppbmRleCBiNzQ3NGI2Li45Y2Q5ZmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAKIG9iai0kKENPTkZJR19BU1VTX0xBUFRPUCkJKz0gYXN1cy1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0VFRVBDX0xBUFRPUCkJKz0gZWVlcGMtbGFwdG9wLm8KIG9iai0kKENPTkZJR19NU0lfTEFQVE9QKQkrPSBtc2ktbGFwdG9wLm8KK29iai0kKENPTkZJR19BQ1BJX0NNUEMpCQkrPSBjbGFzc21hdGUtbGFwdG9wLm8KIG9iai0kKENPTkZJR19DT01QQUxfTEFQVE9QKQkrPSBjb21wYWwtbGFwdG9wLm8KIG9iai0kKENPTkZJR19ERUxMX0xBUFRPUCkJKz0gZGVsbC1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0RFTExfV01JKQkJKz0gZGVsbC13bWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKaW5kZXggNDU0OTcwZC4uMDdkMTRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC05Niw5ICs5Niw2IEBACiBNT0RVTEVfQUxJQVMoIndtaTo2N0MzMzcxRC05NUEzLTRDMzctQkI2MS1ERDQ3QjQ5MURBQUIiKTsKIE1PRFVMRV9BTElBUygid21pOjZBRjRGMjU4LUI0MDEtNDJmZC1CRTkxLTNENEFDMkQ3QzBEMyIpOwogCi0vKiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB1bnRpbCB0aGUgV01JIHN5c2ZzIGludGVyZmFjZSBnb2VzIGluICovCi1NT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjoqOiIpOwotCiAvKgogICogSW50ZXJmYWNlIGNhcGFiaWxpdHkgZmxhZ3MKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCmluZGV4IDc5YjE1YjkuLjdiMjM4NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKQEAgLTUyLDcgKzUyLDcgQEAKICAqLwogI3VuZGVmIFNUQVJUX0lOX0tFUk5FTF9NT0RFCiAKLSNkZWZpbmUgRFJWX1ZFUiAiMC41LjIwIgorI2RlZmluZSBEUlZfVkVSICIwLjUuMjIiCiAKIC8qCiAgKiBBY2NvcmRpbmcgdG8gdGhlIEF0b20gTjI3MCBkYXRhc2hlZXQsCkBAIC0xNTYsMTkgKzE1NiwyNSBAQAogCXsiQWNlciIsICJBT0ExNTAiLCAidjAuMzMxMCIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDIwLCAweDAwfSB9LAogCS8qIEFjZXIgMTQxMCAqLwogCXsiQWNlciIsICJBc3BpcmUgMTQxMCIsICJ2MC4zMTIwIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4OWUsIDB4MDB9IH0sCi0JLyogc3BlY2lhbCBCSU9TIC8gb3RoZXIgKi8KKwl7IkFjZXIiLCAiQXNwaXJlIDE0MTAiLCAidjEuMzMwMyIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCS8qIEFjZXIgMTgxMHh4ICovCisJeyJBY2VyIiwgIkFzcGlyZSAxODEwVFoiLCAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFQiLCAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFQiLCAidjEuMzMwMyIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCXsiQWNlciIsICJBc3BpcmUgMTgxMFRaIiwgInYxLjMzMDMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwkvKiBHYXRld2F5ICovCiAJeyJHYXRld2F5IiwgIkFPQTExMCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCiAJeyJHYXRld2F5IiwgIkFPQTE1MCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCi0JeyJHYXRld2F5ICAgICAgICAgIiwgIkxUMzEgICAgICAgICAgICAiLCAidjEuMzEwMyAiLCAweDU1LCAweDU4LAotCQl7MHgxMCwgMHgwZiwgMHgwMH0gfSwKLQl7IkdhdGV3YXkgICAgICAgICAiLCAiTFQzMSAgICAgICAgICAgICIsICJ2MS4zMjAxICIsIDB4NTUsIDB4NTgsCi0JCXsweDEwLCAweDBmLCAweDAwfSB9LAotCXsiR2F0ZXdheSAgICAgICAgICIsICJMVDMxICAgICAgICAgICAgIiwgInYxLjMzMDIgIiwgMHg1NSwgMHg1OCwKLQkJezB4MTAsIDB4MGYsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkxUMzEiLCAidjEuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDEwLCAweDBmLCAweDAwfSB9LAorCXsiR2F0ZXdheSIsICJMVDMxIiwgInYxLjMyMDEiLCAweDU1LCAweDU4LCB7MHgxMCwgMHgwZiwgMHgwMH0gfSwKKwl7IkdhdGV3YXkiLCAiTFQzMSIsICJ2MS4zMzAyIiwgMHg1NSwgMHg1OCwgezB4MTAsIDB4MGYsIDB4MDB9IH0sCisJLyogUGFja2FyZCBCZWxsICovCiAJeyJQYWNrYXJkIEJlbGwiLCAiRE9BMTUwIiwgInYwLjMxMDQiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgyMSwgMHgwMH0gfSwKIAl7IlBhY2thcmQgQmVsbCIsICJET0ExNTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDIwLCAweDAwfSB9LAogCXsiUGFja2FyZCBCZWxsIiwgIkFPQTExMCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCiAJeyJQYWNrYXJkIEJlbGwiLCAiQU9BMTUwIiwgInYwLjMxMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwl7IlBhY2thcmQgQmVsbCIsICJET1RNVSIsICJ2MS4zMzAzIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4OWUsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9UTVUiLCAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAogCS8qIHBld3Bldy10ZXJtaW5hdG9yICovCiAJeyIiLCAiIiwgIiIsIDAsIDAsIHswLCAwLCAwfSB9CiB9OwpAQCAtNDg2LDEzICs0OTIsMjYgQEAKIAkucmVtb3ZlID0gYWNlcmhkZl9yZW1vdmUsCiB9OwogCisvKiBjaGVja3MgaWYgc3RyIGJlZ2lucyB3aXRoIHN0YXJ0ICovCitzdGF0aWMgaW50IHN0cl9zdGFydHNfd2l0aChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnN0YXJ0KQoreworCXVuc2lnbmVkIGxvbmcgc3RyX2xlbiA9IDAsIHN0YXJ0X2xlbiA9IDA7CisKKwlzdHJfbGVuID0gc3RybGVuKHN0cik7CisJc3RhcnRfbGVuID0gc3RybGVuKHN0YXJ0KTsKKworCWlmIChzdHJfbGVuID49IHN0YXJ0X2xlbiAmJgorCQkJIXN0cm5jbXAoc3RyLCBzdGFydCwgc3RhcnRfbGVuKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KIAogLyogY2hlY2sgaGFyZHdhcmUgKi8KIHN0YXRpYyBpbnQgYWNlcmhkZl9jaGVja19oYXJkd2FyZSh2b2lkKQogewogCWNoYXIgY29uc3QgKnZlbmRvciwgKnZlcnNpb24sICpwcm9kdWN0OwotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgcHJvZF9sZW4gPSAwOworCWNvbnN0IHN0cnVjdCBiaW9zX3NldHRpbmdzX3QgKmJ0ID0gTlVMTDsKIAogCS8qIGdldCBCSU9TIGRhdGEgKi8KIAl2ZW5kb3IgID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfU1lTX1ZFTkRPUik7CkBAIC01MTQsMjAgKzUzMywyMCBAQAogCQlrZXJuZWxtb2RlID0gMDsKIAl9CiAKLQlwcm9kX2xlbiA9IHN0cmxlbihwcm9kdWN0KTsKLQogCWlmICh2ZXJib3NlKQogCQlwcl9pbmZvKCJCSU9TIGluZm86ICVzICVzLCBwcm9kdWN0OiAlc1xuIiwKIAkJCXZlbmRvciwgdmVyc2lvbiwgcHJvZHVjdCk7CiAKIAkvKiBzZWFyY2ggQklPUyB2ZXJzaW9uIGFuZCB2ZW5kb3IgaW4gQklPUyBzZXR0aW5ncyB0YWJsZSAqLwotCWZvciAoaSA9IDA7IGJpb3NfdGJsW2ldLnZlcnNpb25bMF07IGkrKykgewotCQlpZiAoc3RybGVuKGJpb3NfdGJsW2ldLnByb2R1Y3QpID49IHByb2RfbGVuICYmCi0JCSAgICAhc3RybmNtcChiaW9zX3RibFtpXS5wcm9kdWN0LCBwcm9kdWN0LAotCQkJICAgc3RybGVuKGJpb3NfdGJsW2ldLnByb2R1Y3QpKSAmJgotCQkgICAgIXN0cmNtcChiaW9zX3RibFtpXS52ZW5kb3IsIHZlbmRvcikgJiYKLQkJICAgICFzdHJjbXAoYmlvc190YmxbaV0udmVyc2lvbiwgdmVyc2lvbikpIHsKLQkJCWJpb3NfY2ZnID0gJmJpb3NfdGJsW2ldOworCWZvciAoYnQgPSBiaW9zX3RibDsgYnQtPnZlbmRvclswXTsgYnQrKykgeworCQkvKgorCQkgKiBjaGVjayBpZiBhY3R1YWwgaGFyZHdhcmUgQklPUyB2ZW5kb3IsIHByb2R1Y3QgYW5kIHZlcnNpb24KKwkJICogSURzIHN0YXJ0IHdpdGggdGhlIHN0cmluZ3Mgb2YgQklPUyB0YWJsZSBlbnRyeQorCQkgKi8KKwkJaWYgKHN0cl9zdGFydHNfd2l0aCh2ZW5kb3IsIGJ0LT52ZW5kb3IpICYmCisJCQkJc3RyX3N0YXJ0c193aXRoKHByb2R1Y3QsIGJ0LT5wcm9kdWN0KSAmJgorCQkJCXN0cl9zdGFydHNfd2l0aCh2ZXJzaW9uLCBidC0+dmVyc2lvbikpIHsKKwkJCWJpb3NfY2ZnID0gYnQ7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTY0MCw5ICs2NTksMTQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlBldGVyIEZldWVyZXIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQXNwaXJlIE9uZSB0ZW1wZXJhdHVyZSBhbmQgZmFuIGRyaXZlciIpOwotTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6KjoiKTsKLU1PRFVMRV9BTElBUygiZG1pOio6KkdhdGV3YXkqOio6Iik7Ci1NT0RVTEVfQUxJQVMoImRtaToqOipQYWNrYXJkIEJlbGwqOio6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjpwbkFPQSo6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjpwbkFzcGlyZSAxNDEwKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KkFjZXIqOnBuQXNwaXJlIDE4MTAqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqR2F0ZXdheSo6cG5BT0EqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqR2F0ZXdheSo6cG5MVDMxKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KlBhY2thcmQgQmVsbCo6cG5BT0EqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqUGFja2FyZCBCZWxsKjpwbkRPQSo6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipQYWNrYXJkIEJlbGwqOnBuRE9UTVUqOiIpOwogCiBtb2R1bGVfaW5pdChhY2VyaGRmX2luaXQpOwogbW9kdWxlX2V4aXQoYWNlcmhkZl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKaW5kZXggMGM5YzUzMS4uYzFkMmFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KQEAgLTUxMywyNiArNTE0LDEyIEBACiAJcmV0dXJuIChzdGF0dXMgPT0gQUVfT0spICYmIChvdXRfb2JqLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpOwogfQogCi0vKgotICogV2Ugd3JpdGUgb3VyIGluZm8gaW4gcGFnZSwgd2UgYmVnaW4gYXQgb2Zmc2V0IG9mZiBhbmQgY2Fubm90IHdyaXRlIG1vcmUKLSAqIHRoYW4gY291bnQgYnl0ZXMuIFdlIHNldCBlb2YgdG8gMSBpZiB3ZSBoYW5kbGUgdGhvc2UgMiB2YWx1ZXMuIFdlIHJldHVybiB0aGUKLSAqIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGluIHBhZ2UKLSAqLwotc3RhdGljIGludAotcHJvY19yZWFkX2luZm8oY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGFzdXNfaW5mb19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwogCWludCB0ZW1wOwotCWNoYXIgYnVmWzE2XTsJCS8qIGVub3VnaCBmb3IgYWxsIGluZm8gKi8KLQkvKgotCSAqIFdlIHVzZSB0aGUgZWFzeSB3YXksIHdlIGRvbid0IGNhcmUgb2Ygb2ZmIGFuZCBjb3VudCwKLQkgKiBzbyB3ZSBkb24ndCBzZXQgZW9mIHRvIDEKLQkgKi8KIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsIEFDUElfSE9US19OQU1FICIgIiBBU1VTX0FDUElfVkVSU0lPTiAiXG4iKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTW9kZWwgcmVmZXJlbmNlICAgIDogJXNcbiIsCi0JCSAgICAgICBob3RrLT5tZXRob2RzLT5uYW1lKTsKKwlzZXFfcHJpbnRmKG0sIEFDUElfSE9US19OQU1FICIgIiBBU1VTX0FDUElfVkVSU0lPTiAiXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJNb2RlbCByZWZlcmVuY2UgICAgOiAlc1xuIiwgaG90ay0+bWV0aG9kcy0+bmFtZSk7CiAJLyoKIAkgKiBUaGUgU0ZVTiBtZXRob2QgcHJvYmFibHkgYWxsb3dzIHRoZSBvcmlnaW5hbCBkcml2ZXIgdG8gZ2V0IHRoZSBsaXN0CiAJICogb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IGEgZ2l2ZW4gbW9kZWwuIEZvciBub3csIDB4MDEwMCBvciAweDA4MDAKQEAgLTU0MCw4ICs1MjcsNyBAQAogCSAqIFRoZSBzaWduaWZpY2FuY2Ugb2Ygb3RoZXJzIGlzIHlldCB0byBiZSBmb3VuZC4KIAkgKi8KIAlpZiAocmVhZF9hY3BpX2ludChob3RrLT5oYW5kbGUsICJTRlVOIiwgJnRlbXApKQotCQlsZW4gKz0KLQkJICAgIHNwcmludGYocGFnZSArIGxlbiwgIlNGVU4gdmFsdWUgICAgICAgICA6IDB4JTA0eFxuIiwgdGVtcCk7CisJCXNlcV9wcmludGYobSwgIlNGVU4gdmFsdWUgICAgICAgICA6IDB4JTA0eFxuIiwgdGVtcCk7CiAJLyoKIAkgKiBBbm90aGVyIHZhbHVlIGZvciB1c2Vyc3BhY2U6IHRoZSBBU1lNIG1ldGhvZCByZXR1cm5zIDB4MDIgZm9yCiAJICogYmF0dGVyeSBsb3cgYW5kIDB4MDQgZm9yIGJhdHRlcnkgY3JpdGljYWwsIGl0cyByZWFkaW5ncyB0ZW5kIHRvIGJlCkBAIC01NTAsMzAgKzUzNiwzNCBAQAogCSAqIHNpbGVudGx5IGlnbm9yZWQuCiAJICovCiAJaWYgKHJlYWRfYWNwaV9pbnQoaG90ay0+aGFuZGxlLCAiQVNZTSIsICZ0ZW1wKSkKLQkJbGVuICs9Ci0JCSAgICBzcHJpbnRmKHBhZ2UgKyBsZW4sICJBU1lNIHZhbHVlICAgICAgICAgOiAweCUwNHhcbiIsIHRlbXApOworCQlzZXFfcHJpbnRmKG0sICJBU1lNIHZhbHVlICAgICAgICAgOiAweCUwNHhcbiIsIHRlbXApOwogCWlmIChhc3VzX2luZm8pIHsKLQkJc25wcmludGYoYnVmLCAxNiwgIiVkIiwgYXN1c19pbmZvLT5sZW5ndGgpOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiRFNEVCBsZW5ndGggICAgICAgIDogJXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXNfaW5mby0+Y2hlY2tzdW0pOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiRFNEVCBjaGVja3N1bSAgICAgIDogJXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXNfaW5mby0+cmV2aXNpb24pOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiRFNEVCByZXZpc2lvbiAgICAgIDogJXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgNywgIiVzIiwgYXN1c19pbmZvLT5vZW1faWQpOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiT0VNIGlkICAgICAgICAgICAgIDogJXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgOSwgIiVzIiwgYXN1c19pbmZvLT5vZW1fdGFibGVfaWQpOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiT0VNIHRhYmxlIGlkICAgICAgIDogJXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgMTYsICIleCIsIGFzdXNfaW5mby0+b2VtX3JldmlzaW9uKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk9FTSByZXZpc2lvbiAgICAgICA6IDB4JXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgNSwgIiVzIiwgYXN1c19pbmZvLT5hc2xfY29tcGlsZXJfaWQpOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQVNMIGNvbXAgdmVuZG9yIGlkIDogJXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgMTYsICIleCIsIGFzdXNfaW5mby0+YXNsX2NvbXBpbGVyX3JldmlzaW9uKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkFTTCBjb21wIHJldmlzaW9uICA6IDB4JXNcbiIsIGJ1Zik7CisJCXNlcV9wcmludGYobSwgIkRTRFQgbGVuZ3RoICAgICAgICA6ICVkXG4iLCBhc3VzX2luZm8tPmxlbmd0aCk7CisJCXNlcV9wcmludGYobSwgIkRTRFQgY2hlY2tzdW0gICAgICA6ICVkXG4iLCBhc3VzX2luZm8tPmNoZWNrc3VtKTsKKwkJc2VxX3ByaW50ZihtLCAiRFNEVCByZXZpc2lvbiAgICAgIDogJWRcbiIsIGFzdXNfaW5mby0+cmV2aXNpb24pOworCQlzZXFfcHJpbnRmKG0sICJPRU0gaWQgICAgICAgICAgICAgOiAlLipzXG4iLCBBQ1BJX09FTV9JRF9TSVpFLCBhc3VzX2luZm8tPm9lbV9pZCk7CisJCXNlcV9wcmludGYobSwgIk9FTSB0YWJsZSBpZCAgICAgICA6ICUuKnNcbiIsIEFDUElfT0VNX1RBQkxFX0lEX1NJWkUsIGFzdXNfaW5mby0+b2VtX3RhYmxlX2lkKTsKKwkJc2VxX3ByaW50ZihtLCAiT0VNIHJldmlzaW9uICAgICAgIDogMHgleFxuIiwgYXN1c19pbmZvLT5vZW1fcmV2aXNpb24pOworCQlzZXFfcHJpbnRmKG0sICJBU0wgY29tcCB2ZW5kb3IgaWQgOiAlLipzXG4iLCBBQ1BJX05BTUVfU0laRSwgYXN1c19pbmZvLT5hc2xfY29tcGlsZXJfaWQpOworCQlzZXFfcHJpbnRmKG0sICJBU0wgY29tcCByZXZpc2lvbiAgOiAweCV4XG4iLCBhc3VzX2luZm8tPmFzbF9jb21waWxlcl9yZXZpc2lvbik7CiAJfQogCi0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhc3VzX2luZm9fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhc3VzX2luZm9fcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXN1c19pbmZvX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gYXN1c19pbmZvX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoKICAqIC9wcm9jIGhhbmRsZXJzCiAgKiBXZSB3cml0ZSBvdXIgaW5mbyBpbiBwYWdlLCB3ZSBiZWdpbiBhdCBvZmZzZXQgb2ZmIGFuZCBjYW5ub3Qgd3JpdGUgbW9yZQpAQCAtNjM5LDM0ICs2MjksNDggQEAKIC8qCiAgKiBQcm9jIGhhbmRsZXJzIGZvciBNTEVECiAgKi8KLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9tbGVkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBtbGVkX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLAotCQkgICAgICAgcmVhZF9sZWQoaG90ay0+bWV0aG9kcy0+bWxlZF9zdGF0dXMsIE1MRURfT04pKTsKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwgcmVhZF9sZWQoaG90ay0+bWV0aG9kcy0+bWxlZF9zdGF0dXMsIE1MRURfT04pKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY193cml0ZV9tbGVkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtbGVkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWxlZF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBtbGVkX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJcmV0dXJuIHdyaXRlX2xlZChidWZmZXIsIGNvdW50LCBob3RrLT5tZXRob2RzLT5tdF9tbGVkLCBNTEVEX09OLCAxKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWxlZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG1sZWRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IG1sZWRfcHJvY193cml0ZSwKK307CisKIC8qCiAgKiBQcm9jIGhhbmRsZXJzIGZvciBMRUQgZGlzcGxheQogICovCi1zdGF0aWMgaW50Ci1wcm9jX3JlYWRfbGVkZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkgICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGVkZF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIweCUwOHhcbiIsIGhvdGstPmxlZGRfc3RhdHVzKTsKKwlzZXFfcHJpbnRmKG0sICIweCUwOHhcbiIsIGhvdGstPmxlZGRfc3RhdHVzKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY193cml0ZV9sZWRkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBsZWRkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbGVkZF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBsZWRkX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJaW50IHJ2LCB2YWx1ZTsKIApAQCAtNjgyLDYxICs2ODYsMTA0IEBACiAJcmV0dXJuIHJ2OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsZWRkX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbGVkZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbGVkZF9wcm9jX3dyaXRlLAorfTsKKwogLyoKICAqIFByb2MgaGFuZGxlcnMgZm9yIFdMRUQKICAqLwotc3RhdGljIGludAotcHJvY19yZWFkX3dsZWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHdsZWRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsCi0JCSAgICAgICByZWFkX2xlZChob3RrLT5tZXRob2RzLT53bGVkX3N0YXR1cywgV0xFRF9PTikpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCByZWFkX2xlZChob3RrLT5tZXRob2RzLT53bGVkX3N0YXR1cywgV0xFRF9PTikpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3dyaXRlX3dsZWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHdsZWRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB3bGVkX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdsZWRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlyZXR1cm4gd3JpdGVfbGVkKGJ1ZmZlciwgY291bnQsIGhvdGstPm1ldGhvZHMtPm10X3dsZWQsIFdMRURfT04sIDApOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3bGVkX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gd2xlZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gd2xlZF9wcm9jX3dyaXRlLAorfTsKKwogLyoKICAqIFByb2MgaGFuZGxlcnMgZm9yIEJsdWV0b290aAogICovCi1zdGF0aWMgaW50Ci1wcm9jX3JlYWRfYmx1ZXRvb3RoKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCQkgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCByZWFkX2xlZChob3RrLT5tZXRob2RzLT5idF9zdGF0dXMsIEJUX09OKSk7CisJc2VxX3ByaW50ZihtLCAiJWRcbiIsIHJlYWRfbGVkKGhvdGstPm1ldGhvZHMtPmJ0X3N0YXR1cywgQlRfT04pKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY193cml0ZV9ibHVldG9vdGgoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYmx1ZXRvb3RoX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsdWV0b290aF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCS8qIE5vdGU6IG10X2J0X3N3aXRjaCBjb250cm9scyBib3RoIGludGVybmFsIEJsdWV0b290aCBhZGFwdGVyJ3MKIAkgICBwcmVzZW5jZSBhbmQgaXRzIExFRCAqLwogCXJldHVybiB3cml0ZV9sZWQoYnVmZmVyLCBjb3VudCwgaG90ay0+bWV0aG9kcy0+bXRfYnRfc3dpdGNoLCBCVF9PTiwgMCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJsdWV0b290aF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGJsdWV0b290aF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gYmx1ZXRvb3RoX3Byb2Nfd3JpdGUsCit9OworCiAvKgogICogUHJvYyBoYW5kbGVycyBmb3IgVExFRAogICovCi1zdGF0aWMgaW50Ci1wcm9jX3JlYWRfdGxlZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkgICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgdGxlZF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwKLQkJICAgICAgIHJlYWRfbGVkKGhvdGstPm1ldGhvZHMtPnRsZWRfc3RhdHVzLCBUTEVEX09OKSk7CisJc2VxX3ByaW50ZihtLCAiJWRcbiIsIHJlYWRfbGVkKGhvdGstPm1ldGhvZHMtPnRsZWRfc3RhdHVzLCBUTEVEX09OKSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfdGxlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgdGxlZF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHRsZWRfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgdGxlZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCXJldHVybiB3cml0ZV9sZWQoYnVmZmVyLCBjb3VudCwgaG90ay0+bWV0aG9kcy0+bXRfdGxlZCwgVExFRF9PTiwgMCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRsZWRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB0bGVkX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSB0bGVkX3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgaW50IGdldF9sY2Rfc3RhdGUodm9pZCkKIHsKIAlpbnQgbGNkID0gMDsKQEAgLTgyOSwxNiArODc2LDE5IEBACiAKIH0KIAotc3RhdGljIGludAotcHJvY19yZWFkX2xjZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBsY2RfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIGdldF9sY2Rfc3RhdGUoKSk7CisJc2VxX3ByaW50ZihtLCAiJWRcbiIsIGdldF9sY2Rfc3RhdGUoKSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfbGNkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBsY2RfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBsY2RfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgbGNkX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJaW50IHJ2LCB2YWx1ZTsKIApAQCAtODQ4LDYgKzg5OCwxNSBAQAogCXJldHVybiBydjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGNkX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbGNkX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBsY2RfcHJvY193cml0ZSwKK307CisKIHN0YXRpYyBpbnQgcmVhZF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlpbnQgdmFsdWU7CkBAIC05MDcsMTYgKzk2NiwxOSBAQAogCXJldHVybiBzZXRfYnJpZ2h0bmVzcyhiZC0+cHJvcHMuYnJpZ2h0bmVzcyk7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9icm4oY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgYnJuX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCByZWFkX2JyaWdodG5lc3MoTlVMTCkpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCByZWFkX2JyaWdodG5lc3MoTlVMTCkpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3dyaXRlX2JybihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgYnJuX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYnJuX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJybl9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCBydiwgdmFsdWU7CiAKQEAgLTkyOSw2ICs5OTEsMTUgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJybl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGJybl9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gYnJuX3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgdm9pZCBzZXRfZGlzcGxheShpbnQgdmFsdWUpCiB7CiAJLyogbm8gc2FuaXR5IGNoZWNrIG5lZWRlZCBmb3Igbm93ICovCkBAIC05NDIsOSArMTAxMyw3IEBACiAgKiBOb3csICp0aGlzKiBvbmUgY291bGQgYmUgbW9yZSB1c2VyLWZyaWVuZGx5LCBidXQgc28gZmFyLCBuby1vbmUgaGFzCiAgKiBjb21wbGFpbmVkLiBUaGUgc2lnbmlmaWNhbmNlIG9mIGJpdHMgaXMgdGhlIHNhbWUgYXMgaW4gcHJvY193cml0ZV9kaXNwKCkKICAqLwotc3RhdGljIGludAotcHJvY19yZWFkX2Rpc3AoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGRpc3BfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlpbnQgdmFsdWUgPSAwOwogCkBAIC05NTIsNyArMTAyMSwxMyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiQXN1cyBBQ1BJOiBFcnJvciByZWFkaW5nIGRpc3BsYXkgc3RhdHVzXG4iKTsKIAl2YWx1ZSAmPSAweDA3OwkvKiBuZWVkZWQgZm9yIHNvbWUgbW9kZWxzLCBzaG91bGRuJ3QgaHVydCBvdGhlcnMgKi8KLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIHZhbHVlKTsKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpc3BfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkaXNwX3Byb2Nfc2hvdywgTlVMTCk7CiB9CiAKIC8qCkBAIC05NjEsOSArMTAzNiw4IEBACiAgKiAoYml0d2lzZSkgb2YgdGhlc2Ugd2lsbCBzdWZmaWNlLiBJIG5ldmVyIGFjdHVhbGx5IHRlc3RlZCAzIGRpc3BsYXlzIGhvb2tlZAogICogdXAgc2ltdWx0YW5lb3VzbHksIHNvIGJlIHdhcm5lZC4gU2VlIHRoZSBhY3BpNGFzdXMgUkVBRE1FIGZvciBtb3JlIGluZm8uCiAgKi8KLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfZGlzcChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBzc2l6ZV90IGRpc3BfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlpbnQgcnYsIHZhbHVlOwogCkBAIC05NzMsMjUgKzEwNDcsMjcgQEAKIAlyZXR1cm4gcnY7CiB9CiAKLXR5cGVkZWYgaW50IChwcm9jX3JlYWRmdW5jKSAoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotdHlwZWRlZiBpbnQgKHByb2Nfd3JpdGVmdW5jKSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRpc3BfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkaXNwX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBkaXNwX3Byb2Nfd3JpdGUsCit9OwogCiBzdGF0aWMgaW50Ci1hc3VzX3Byb2NfYWRkKGNoYXIgKm5hbWUsIHByb2Nfd3JpdGVmdW5jICp3cml0ZWZ1bmMsCi0JCSAgICAgcHJvY19yZWFkZnVuYyAqcmVhZGZ1bmMsIG1vZGVfdCBtb2RlLAorYXN1c19wcm9jX2FkZChjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpwcm9jX2ZvcHMsIG1vZGVfdCBtb2RlLAogCQkgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYyA9Ci0JICAgIGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIG1vZGUsIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CisKKwlwcm9jID0gcHJvY19jcmVhdGVfZGF0YShuYW1lLCBtb2RlLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSwKKwkJCQlwcm9jX2ZvcHMsIGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSk7CiAJaWYgKCFwcm9jKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgVW5hYmxlIHRvIGNyZWF0ZSAlcyBmcyBlbnRyeVxuIiwgbmFtZSk7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHJvYy0+d3JpdGVfcHJvYyA9IHdyaXRlZnVuYzsKLQlwcm9jLT5yZWFkX3Byb2MgPSByZWFkZnVuYzsKLQlwcm9jLT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCXByb2MtPnVpZCA9IGFzdXNfdWlkOwogCXByb2MtPmdpZCA9IGFzdXNfZ2lkOwogCXJldHVybiAwOwpAQCAtMTAyMCwxMCArMTA5Niw5IEBACiAJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwcm9jID0gY3JlYXRlX3Byb2NfZW50cnkoUFJPQ19JTkZPLCBtb2RlLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CisJcHJvYyA9IHByb2NfY3JlYXRlKFBST0NfSU5GTywgbW9kZSwgYWNwaV9kZXZpY2VfZGlyKGRldmljZSksCisJCQkgICAmYXN1c19pbmZvX3Byb2NfZm9wcyk7CiAJaWYgKHByb2MpIHsKLQkJcHJvYy0+cmVhZF9wcm9jID0gcHJvY19yZWFkX2luZm87Ci0JCXByb2MtPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJCXByb2MtPnVpZCA9IGFzdXNfdWlkOwogCQlwcm9jLT5naWQgPSBhc3VzX2dpZDsKIAl9IGVsc2UgewpAQCAtMTAzMiwyOCArMTEwNywyMyBAQAogCX0KIAogCWlmIChob3RrLT5tZXRob2RzLT5tdF93bGVkKSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19XTEVELCAmcHJvY193cml0ZV93bGVkLCAmcHJvY19yZWFkX3dsZWQsCi0JCQkgICAgICBtb2RlLCBkZXZpY2UpOworCQlhc3VzX3Byb2NfYWRkKFBST0NfV0xFRCwgJndsZWRfcHJvY19mb3BzLCBtb2RlLCBkZXZpY2UpOwogCX0KIAogCWlmIChob3RrLT5tZXRob2RzLT5tdF9sZWRkKSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19MRURELCAmcHJvY193cml0ZV9sZWRkLCAmcHJvY19yZWFkX2xlZGQsCi0JCQkgICAgICBtb2RlLCBkZXZpY2UpOworCQlhc3VzX3Byb2NfYWRkKFBST0NfTEVERCwgJmxlZGRfcHJvY19mb3BzLCBtb2RlLCBkZXZpY2UpOwogCX0KIAogCWlmIChob3RrLT5tZXRob2RzLT5tdF9tbGVkKSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19NTEVELCAmcHJvY193cml0ZV9tbGVkLCAmcHJvY19yZWFkX21sZWQsCi0JCQkgICAgICBtb2RlLCBkZXZpY2UpOworCQlhc3VzX3Byb2NfYWRkKFBST0NfTUxFRCwgJm1sZWRfcHJvY19mb3BzLCBtb2RlLCBkZXZpY2UpOwogCX0KIAogCWlmIChob3RrLT5tZXRob2RzLT5tdF90bGVkKSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19UTEVELCAmcHJvY193cml0ZV90bGVkLCAmcHJvY19yZWFkX3RsZWQsCi0JCQkgICAgICBtb2RlLCBkZXZpY2UpOworCQlhc3VzX3Byb2NfYWRkKFBST0NfVExFRCwgJnRsZWRfcHJvY19mb3BzLCBtb2RlLCBkZXZpY2UpOwogCX0KIAogCWlmIChob3RrLT5tZXRob2RzLT5tdF9idF9zd2l0Y2gpIHsKLQkJYXN1c19wcm9jX2FkZChQUk9DX0JULCAmcHJvY193cml0ZV9ibHVldG9vdGgsCi0JCQkgICAgICAmcHJvY19yZWFkX2JsdWV0b290aCwgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX0JULCAmYmx1ZXRvb3RoX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAkvKgpAQCAtMTA2MSwxOSArMTEzMSwxNiBAQAogCSAqIGFjY2Vzc2libGUgZnJvbSB0aGUga2V5Ym9hcmQKIAkgKi8KIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfbGNkX3N3aXRjaCAmJiBob3RrLT5tZXRob2RzLT5sY2Rfc3RhdHVzKSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19MQ0QsICZwcm9jX3dyaXRlX2xjZCwgJnByb2NfcmVhZF9sY2QsIG1vZGUsCi0JCQkgICAgICBkZXZpY2UpOworCQlhc3VzX3Byb2NfYWRkKFBST0NfTENELCAmbGNkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoKGhvdGstPm1ldGhvZHMtPmJyaWdodG5lc3NfdXAgJiYgaG90ay0+bWV0aG9kcy0+YnJpZ2h0bmVzc19kb3duKSB8fAogCSAgICAoaG90ay0+bWV0aG9kcy0+YnJpZ2h0bmVzc19nZXQgJiYgaG90ay0+bWV0aG9kcy0+YnJpZ2h0bmVzc19zZXQpKSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19CUk4sICZwcm9jX3dyaXRlX2JybiwgJnByb2NfcmVhZF9icm4sIG1vZGUsCi0JCQkgICAgICBkZXZpY2UpOworCQlhc3VzX3Byb2NfYWRkKFBST0NfQlJOLCAmYnJuX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+ZGlzcGxheV9zZXQpIHsKLQkJYXN1c19wcm9jX2FkZChQUk9DX0RJU1AsICZwcm9jX3dyaXRlX2Rpc3AsICZwcm9jX3JlYWRfZGlzcCwKLQkJCSAgICAgIG1vZGUsIGRldmljZSk7CisJCWFzdXNfcHJvY19hZGQoUFJPQ19ESVNQLCAmZGlzcF9wcm9jX2ZvcHMsIG1vZGUsIGRldmljZSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5MDA4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwpAQCAtMCwwICsxLDYwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFRoYWRldSBMaW1hIGRlIFNvdXphIENhc2NhcmRvIDxjYXNjYXJkb0Bob2xvc2NvcGlvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisKK3N0cnVjdCBjbXBjX2FjY2VsIHsKKwlpbnQgc2Vuc2l0aXZpdHk7Cit9OworCisjZGVmaW5lIENNUENfQUNDRUxfU0VOU0lUSVZJVFlfREVGQVVMVAkJNQorCisKKy8qCisgKiBHZW5lcmljIGlucHV0IGRldmljZSBjb2RlLgorICovCisKK3R5cGVkZWYgdm9pZCAoKmlucHV0X2RldmljZV9pbml0KShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpOworCitzdGF0aWMgaW50IGNtcGNfYWRkX2FjcGlfbm90aWZ5X2RldmljZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGksIGNoYXIgKm5hbWUsCisJCQkJICAgICAgIGlucHV0X2RldmljZV9pbml0IGlkZXZfaW5pdCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKKwlpbnQgZXJyb3I7CisKKwlpbnB1dGRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXRkZXYpCisJCXJldHVybiAtRU5PTUVNOworCWlucHV0ZGV2LT5uYW1lID0gbmFtZTsKKwlpbnB1dGRldi0+ZGV2LnBhcmVudCA9ICZhY3BpLT5kZXY7CisJaWRldl9pbml0KGlucHV0ZGV2KTsKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dGRldik7CisJaWYgKGVycm9yKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0ZGV2KTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwlkZXZfc2V0X2RydmRhdGEoJmFjcGktPmRldiwgaW5wdXRkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtcGNfcmVtb3ZlX2FjcGlfbm90aWZ5X2RldmljZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFjcGktPmRldik7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRkZXYpOworCXJldHVybiAwOworfQorCisvKgorICogQWNjZWxlcm9tZXRlciBjb2RlLgorICovCitzdGF0aWMgYWNwaV9zdGF0dXMgY21wY19zdGFydF9hY2NlbChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1bMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJcGFyYW1bMF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtWzBdLmludGVnZXIudmFsdWUgPSAweDM7CisJcGFyYW1bMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWlucHV0LmNvdW50ID0gMjsKKwlpbnB1dC5wb2ludGVyID0gcGFyYW07CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiQUNNRCIsICZpbnB1dCwgTlVMTCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfc3RvcF9hY2NlbChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1bMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJcGFyYW1bMF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtWzBdLmludGVnZXIudmFsdWUgPSAweDQ7CisJcGFyYW1bMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWlucHV0LmNvdW50ID0gMjsKKwlpbnB1dC5wb2ludGVyID0gcGFyYW07CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiQUNNRCIsICZpbnB1dCwgTlVMTCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfYWNjZWxfc2V0X3NlbnNpdGl2aXR5KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHZhbCkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbVsyXTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKworCXBhcmFtWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbVswXS5pbnRlZ2VyLnZhbHVlID0gMHgwMjsKKwlwYXJhbVsxXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJcGFyYW1bMV0uaW50ZWdlci52YWx1ZSA9IHZhbDsKKwlpbnB1dC5jb3VudCA9IDI7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtOworCXJldHVybiBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJBQ01EIiwgJmlucHV0LCBOVUxMKTsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfZ2V0X2FjY2VsKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKngsCisJCQkJICB1bnNpZ25lZCBjaGFyICp5LAorCQkJCSAgdW5zaWduZWQgY2hhciAqeikKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbVsyXTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0ID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgMCB9OworCXVuc2lnbmVkIGNoYXIgKmxvY3M7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJcGFyYW1bMF0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtWzBdLmludGVnZXIudmFsdWUgPSAweDAxOworCXBhcmFtWzFdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbnB1dC5jb3VudCA9IDI7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkFDTUQiLCAmaW5wdXQsICZvdXRwdXQpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCQlvYmogPSBvdXRwdXQucG9pbnRlcjsKKwkJbG9jcyA9IG9iai0+YnVmZmVyLnBvaW50ZXI7CisJCSp4ID0gbG9jc1swXTsKKwkJKnkgPSBsb2NzWzFdOworCQkqeiA9IGxvY3NbMl07CisJCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgY21wY19hY2NlbF9oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCB1MzIgZXZlbnQpCit7CisJaWYgKGV2ZW50ID09IDB4ODEpIHsKKwkJdW5zaWduZWQgY2hhciB4LCB5LCB6OworCQlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwkJc3RhdHVzID0gY21wY19nZXRfYWNjZWwoZGV2LT5oYW5kbGUsICZ4LCAmeSwgJnopOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19YLCB4KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19ZLCB5KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19aLCB6KTsKKwkJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCQl9CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBjbXBjX2FjY2VsX3NlbnNpdGl2aXR5X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKKwlzdHJ1Y3QgY21wY19hY2NlbCAqYWNjZWw7CisKKwlhY3BpID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlpbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2KTsKKwlhY2NlbCA9IGRldl9nZXRfZHJ2ZGF0YSgmaW5wdXRkZXYtPmRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYWNjZWwtPnNlbnNpdGl2aXR5KTsKK30KKworc3RhdGljIHNzaXplX3QgY21wY19hY2NlbF9zZW5zaXRpdml0eV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKKwlzdHJ1Y3QgY21wY19hY2NlbCAqYWNjZWw7CisJdW5zaWduZWQgbG9uZyBzZW5zaXRpdml0eTsKKwlpbnQgcjsKKworCWFjcGkgPSB0b19hY3BpX2RldmljZShkZXYpOworCWlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZhY3BpLT5kZXYpOworCWFjY2VsID0gZGV2X2dldF9kcnZkYXRhKCZpbnB1dGRldi0+ZGV2KTsKKworCXIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZzZW5zaXRpdml0eSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJYWNjZWwtPnNlbnNpdGl2aXR5ID0gc2Vuc2l0aXZpdHk7CisJY21wY19hY2NlbF9zZXRfc2Vuc2l0aXZpdHkoYWNwaS0+aGFuZGxlLCBzZW5zaXRpdml0eSk7CisKKwlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKK30KKworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgY21wY19hY2NlbF9zZW5zaXRpdml0eV9hdHRyID0geworCS5hdHRyID0geyAubmFtZSA9ICJzZW5zaXRpdml0eSIsIC5tb2RlID0gMDY2MCB9LAorCS5zaG93ID0gY21wY19hY2NlbF9zZW5zaXRpdml0eV9zaG93LAorCS5zdG9yZSA9IGNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfc3RvcmUKK307CisKK3N0YXRpYyBpbnQgY21wY19hY2NlbF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaTsKKworCWFjcGkgPSB0b19hY3BpX2RldmljZShpbnB1dC0+ZGV2LnBhcmVudCk7CisJaWYgKEFDUElfU1VDQ0VTUyhjbXBjX3N0YXJ0X2FjY2VsKGFjcGktPmhhbmRsZSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQgY21wY19hY2NlbF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGk7CisKKwlhY3BpID0gdG9fYWNwaV9kZXZpY2UoaW5wdXQtPmRldi5wYXJlbnQpOworCWNtcGNfc3RvcF9hY2NlbChhY3BpLT5oYW5kbGUpOworfQorCitzdGF0aWMgdm9pZCBjbXBjX2FjY2VsX2lkZXZfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldikKK3sKKwlzZXRfYml0KEVWX0FCUywgaW5wdXRkZXYtPmV2Yml0KTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dGRldiwgQUJTX1gsIDAsIDI1NSwgOCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRkZXYsIEFCU19ZLCAwLCAyNTUsIDgsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0ZGV2LCBBQlNfWiwgMCwgMjU1LCA4LCAwKTsKKwlpbnB1dGRldi0+b3BlbiA9IGNtcGNfYWNjZWxfb3BlbjsKKwlpbnB1dGRldi0+Y2xvc2UgPSBjbXBjX2FjY2VsX2Nsb3NlOworfQorCitzdGF0aWMgaW50IGNtcGNfYWNjZWxfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJc3RydWN0IGNtcGNfYWNjZWwgKmFjY2VsOworCisJYWNjZWwgPSBrbWFsbG9jKHNpemVvZigqYWNjZWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjY2VsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFjY2VsLT5zZW5zaXRpdml0eSA9IENNUENfQUNDRUxfU0VOU0lUSVZJVFlfREVGQVVMVDsKKwljbXBjX2FjY2VsX3NldF9zZW5zaXRpdml0eShhY3BpLT5oYW5kbGUsIGFjY2VsLT5zZW5zaXRpdml0eSk7CisKKwllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZSgmYWNwaS0+ZGV2LCAmY21wY19hY2NlbF9zZW5zaXRpdml0eV9hdHRyKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbGVkX2ZpbGU7CisKKwllcnJvciA9IGNtcGNfYWRkX2FjcGlfbm90aWZ5X2RldmljZShhY3BpLCAiY21wY19hY2NlbCIsCisJCQkJCSAgICBjbXBjX2FjY2VsX2lkZXZfaW5pdCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxlZF9pbnB1dDsKKworCWlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZhY3BpLT5kZXYpOworCWRldl9zZXRfZHJ2ZGF0YSgmaW5wdXRkZXYtPmRldiwgYWNjZWwpOworCisJcmV0dXJuIDA7CisKK2ZhaWxlZF9pbnB1dDoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFjcGktPmRldiwgJmNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfYXR0cik7CitmYWlsZWRfZmlsZToKKwlrZnJlZShhY2NlbCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGNtcGNfYWNjZWxfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSwgaW50IHR5cGUpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJc3RydWN0IGNtcGNfYWNjZWwgKmFjY2VsOworCisJaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFjcGktPmRldik7CisJYWNjZWwgPSBkZXZfZ2V0X2RydmRhdGEoJmlucHV0ZGV2LT5kZXYpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZhY3BpLT5kZXYsICZjbXBjX2FjY2VsX3NlbnNpdGl2aXR5X2F0dHIpOworCXJldHVybiBjbXBjX3JlbW92ZV9hY3BpX25vdGlmeV9kZXZpY2UoYWNwaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY19hY2NlbF9kZXZpY2VfaWRzW10gPSB7CisJeyJBQ0NFMDAwMCIsIDB9LAorCXsiIiwgMH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfYWNjZWxfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19hY2NlbF9hY3BpX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJjbXBjX2FjY2VsIiwKKwkuY2xhc3MgPSAiY21wY19hY2NlbCIsCisJLmlkcyA9IGNtcGNfYWNjZWxfZGV2aWNlX2lkcywKKwkub3BzID0geworCQkuYWRkID0gY21wY19hY2NlbF9hZGQsCisJCS5yZW1vdmUgPSBjbXBjX2FjY2VsX3JlbW92ZSwKKwkJLm5vdGlmeSA9IGNtcGNfYWNjZWxfaGFuZGxlciwKKwl9Cit9OworCisKKy8qCisgKiBUYWJsZXQgbW9kZSBjb2RlLgorICovCitzdGF0aWMgYWNwaV9zdGF0dXMgY21wY19nZXRfdGFibGV0KGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbHVlKQoreworCXVuaW9uIGFjcGlfb2JqZWN0IHBhcmFtOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBvdXRwdXQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJcGFyYW0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtLmludGVnZXIudmFsdWUgPSAweDAxOworCWlucHV0LmNvdW50ID0gMTsKKwlpbnB1dC5wb2ludGVyID0gJnBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJUQ01EIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCSp2YWx1ZSA9IG91dHB1dDsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBjbXBjX3RhYmxldF9oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCB1MzIgZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbCA9IDA7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKworCWlmIChldmVudCA9PSAweDgxKSB7CisJCWlmIChBQ1BJX1NVQ0NFU1MoY21wY19nZXRfdGFibGV0KGRldi0+aGFuZGxlLCAmdmFsKSkpCisJCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGlucHV0ZGV2LCBTV19UQUJMRVRfTU9ERSwgIXZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjbXBjX3RhYmxldF9pZGV2X2luaXQoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbCA9IDA7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpOworCisJc2V0X2JpdChFVl9TVywgaW5wdXRkZXYtPmV2Yml0KTsKKwlzZXRfYml0KFNXX1RBQkxFVF9NT0RFLCBpbnB1dGRldi0+c3diaXQpOworCisJYWNwaSA9IHRvX2FjcGlfZGV2aWNlKGlucHV0ZGV2LT5kZXYucGFyZW50KTsKKwlpZiAoQUNQSV9TVUNDRVNTKGNtcGNfZ2V0X3RhYmxldChhY3BpLT5oYW5kbGUsICZ2YWwpKSkKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChpbnB1dGRldiwgU1dfVEFCTEVUX01PREUsICF2YWwpOworfQorCitzdGF0aWMgaW50IGNtcGNfdGFibGV0X2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkpCit7CisJcmV0dXJuIGNtcGNfYWRkX2FjcGlfbm90aWZ5X2RldmljZShhY3BpLCAiY21wY190YWJsZXQiLAorCQkJCQkgICBjbXBjX3RhYmxldF9pZGV2X2luaXQpOworfQorCitzdGF0aWMgaW50IGNtcGNfdGFibGV0X3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGksIGludCB0eXBlKQoreworCXJldHVybiBjbXBjX3JlbW92ZV9hY3BpX25vdGlmeV9kZXZpY2UoYWNwaSk7Cit9CisKK3N0YXRpYyBpbnQgY21wY190YWJsZXRfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2KTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsID0gMDsKKwlpZiAoQUNQSV9TVUNDRVNTKGNtcGNfZ2V0X3RhYmxldChhY3BpLT5oYW5kbGUsICZ2YWwpKSkKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChpbnB1dGRldiwgU1dfVEFCTEVUX01PREUsICF2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfdGFibGV0X2RldmljZV9pZHNbXSA9IHsKKwl7IlRCTFQwMDAwIiwgMH0sCisJeyIiLCAwfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY190YWJsZXRfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY190YWJsZXRfYWNwaV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiY21wY190YWJsZXQiLAorCS5jbGFzcyA9ICJjbXBjX3RhYmxldCIsCisJLmlkcyA9IGNtcGNfdGFibGV0X2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGNtcGNfdGFibGV0X2FkZCwKKwkJLnJlbW92ZSA9IGNtcGNfdGFibGV0X3JlbW92ZSwKKwkJLnJlc3VtZSA9IGNtcGNfdGFibGV0X3Jlc3VtZSwKKwkJLm5vdGlmeSA9IGNtcGNfdGFibGV0X2hhbmRsZXIsCisJfQorfTsKKworCisvKgorICogQmFja2xpZ2h0IGNvZGUuCisgKi8KKworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfZ2V0X2JyaWdodG5lc3MoYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbHVlKQoreworCXVuaW9uIGFjcGlfb2JqZWN0IHBhcmFtOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBvdXRwdXQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJcGFyYW0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtLmludGVnZXIudmFsdWUgPSAweEMwOworCWlucHV0LmNvdW50ID0gMTsKKwlpbnB1dC5wb2ludGVyID0gJnBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJHUkRJIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCSp2YWx1ZSA9IG91dHB1dDsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgY21wY19zZXRfYnJpZ2h0bmVzcyhhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbVsyXTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIG91dHB1dDsKKworCXBhcmFtWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbVswXS5pbnRlZ2VyLnZhbHVlID0gMHhDMDsKKwlwYXJhbVsxXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJcGFyYW1bMV0uaW50ZWdlci52YWx1ZSA9IHZhbHVlOworCWlucHV0LmNvdW50ID0gMjsKKwlpbnB1dC5wb2ludGVyID0gcGFyYW07CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIkdXUkkiLCAmaW5wdXQsICZvdXRwdXQpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgY21wY19ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYnJpZ2h0bmVzczsKKworCWhhbmRsZSA9IGJsX2dldF9kYXRhKGJkKTsKKwlzdGF0dXMgPSBjbXBjX2dldF9icmlnaHRuZXNzKGhhbmRsZSwgJmJyaWdodG5lc3MpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcmV0dXJuIGJyaWdodG5lc3M7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgY21wY19ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCisJaGFuZGxlID0gYmxfZ2V0X2RhdGEoYmQpOworCXN0YXR1cyA9IGNtcGNfc2V0X2JyaWdodG5lc3MoaGFuZGxlLCBiZC0+cHJvcHMuYnJpZ2h0bmVzcyk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGNtcGNfYmxfb3BzID0geworCS5nZXRfYnJpZ2h0bmVzcyA9IGNtcGNfYmxfZ2V0X2JyaWdodG5lc3MsCisJLnVwZGF0ZV9zdGF0dXMgPSBjbXBjX2JsX3VwZGF0ZV9zdGF0dXMKK307CisKK3N0YXRpYyBpbnQgY21wY19ibF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpKQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKKworCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiY21wY19ibCIsICZhY3BpLT5kZXYsCisJCQkJICAgICAgIGFjcGktPmhhbmRsZSwgJmNtcGNfYmxfb3BzKTsKKwliZC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSA3OworCWRldl9zZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2LCBiZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21wY19ibF9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQ7CisKKwliZCA9IGRldl9nZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2KTsKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfZGV2aWNlX2lkc1tdID0geworCXsiSVBNTDIwMCIsIDB9LAorCXsiIiwgMH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19ibF9hY3BpX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJjbXBjIiwKKwkuY2xhc3MgPSAiY21wYyIsCisJLmlkcyA9IGNtcGNfZGV2aWNlX2lkcywKKwkub3BzID0geworCQkuYWRkID0gY21wY19ibF9hZGQsCisJCS5yZW1vdmUgPSBjbXBjX2JsX3JlbW92ZQorCX0KK307CisKKworLyoKKyAqIEV4dHJhIGtleXMgY29kZS4KKyAqLworc3RhdGljIGludCBjbXBjX2tleXNfY29kZXNbXSA9IHsKKwlLRVlfVU5LTk9XTiwKKwlLRVlfV0xBTiwKKwlLRVlfU1dJVENIVklERU9NT0RFLAorCUtFWV9CUklHSFRORVNTRE9XTiwKKwlLRVlfQlJJR0hUTkVTU1VQLAorCUtFWV9WRU5ET1IsCisJS0VZX01BWAorfTsKKworc3RhdGljIHZvaWQgY21wY19rZXlzX2hhbmRsZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsIHUzMiBldmVudCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKKwlpbnQgY29kZSA9IEtFWV9NQVg7CisKKwlpZiAoKGV2ZW50ICYgMHgwRikgPCBBUlJBWV9TSVpFKGNtcGNfa2V5c19jb2RlcykpCisJCWNvZGUgPSBjbXBjX2tleXNfY29kZXNbZXZlbnQgJiAweDBGXTsKKwlpbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOzsKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBjb2RlLCAhKGV2ZW50ICYgMHgxMCkpOworfQorCitzdGF0aWMgdm9pZCBjbXBjX2tleXNfaWRldl9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KQoreworCWludCBpOworCisJc2V0X2JpdChFVl9LRVksIGlucHV0ZGV2LT5ldmJpdCk7CisJZm9yIChpID0gMDsgY21wY19rZXlzX2NvZGVzW2ldICE9IEtFWV9NQVg7IGkrKykKKwkJc2V0X2JpdChjbXBjX2tleXNfY29kZXNbaV0sIGlucHV0ZGV2LT5rZXliaXQpOworfQorCitzdGF0aWMgaW50IGNtcGNfa2V5c19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpKQoreworCXJldHVybiBjbXBjX2FkZF9hY3BpX25vdGlmeV9kZXZpY2UoYWNwaSwgImNtcGNfa2V5cyIsCisJCQkJCSAgIGNtcGNfa2V5c19pZGV2X2luaXQpOworfQorCitzdGF0aWMgaW50IGNtcGNfa2V5c19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gY21wY19yZW1vdmVfYWNwaV9ub3RpZnlfZGV2aWNlKGFjcGkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfa2V5c19kZXZpY2VfaWRzW10gPSB7CisJeyJGbkJUMDAwMCIsIDB9LAorCXsiIiwgMH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfa2V5c19kZXZpY2VfaWRzKTsKKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBjbXBjX2tleXNfYWNwaV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiY21wY19rZXlzIiwKKwkuY2xhc3MgPSAiY21wY19rZXlzIiwKKwkuaWRzID0gY21wY19rZXlzX2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGNtcGNfa2V5c19hZGQsCisJCS5yZW1vdmUgPSBjbXBjX2tleXNfcmVtb3ZlLAorCQkubm90aWZ5ID0gY21wY19rZXlzX2hhbmRsZXIsCisJfQorfTsKKworCisvKgorICogR2VuZXJhbCBpbml0L2V4aXQgY29kZS4KKyAqLworCitzdGF0aWMgaW50IGNtcGNfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmY21wY19rZXlzX2FjcGlfZHJpdmVyKTsKKwlpZiAocikKKwkJZ290byBmYWlsZWRfa2V5czsKKworCXIgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfYmxfYWNwaV9kcml2ZXIpOworCWlmIChyKQorCQlnb3RvIGZhaWxlZF9ibDsKKworCXIgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfdGFibGV0X2FjcGlfZHJpdmVyKTsKKwlpZiAocikKKwkJZ290byBmYWlsZWRfdGFibGV0OworCisJciA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmY21wY19hY2NlbF9hY3BpX2RyaXZlcik7CisJaWYgKHIpCisJCWdvdG8gZmFpbGVkX2FjY2VsOworCisJcmV0dXJuIHI7CisKK2ZhaWxlZF9hY2NlbDoKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY190YWJsZXRfYWNwaV9kcml2ZXIpOworCitmYWlsZWRfdGFibGV0OgorCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2JsX2FjcGlfZHJpdmVyKTsKKworZmFpbGVkX2JsOgorCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2tleXNfYWNwaV9kcml2ZXIpOworCitmYWlsZWRfa2V5czoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgY21wY19leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfYWNjZWxfYWNwaV9kcml2ZXIpOworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZjbXBjX3RhYmxldF9hY3BpX2RyaXZlcik7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfYmxfYWNwaV9kcml2ZXIpOworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2tleXNfYWNwaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjbXBjX2luaXQpOworbW9kdWxlX2V4aXQoY21wY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jCmluZGV4IDY3ZjNmZTcuLjFiMWRkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwpAQCAtMjAyLDggKzIwMiwxMyBAQAogCXN0cnVjdCBhY3BpX2J1ZmZlciByZXNwb25zZSA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqa2V5OwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0Jd21pX2dldF9ldmVudF9kYXRhKHZhbHVlLCAmcmVzcG9uc2UpOworCXN0YXR1cyA9IHdtaV9nZXRfZXZlbnRfZGF0YSh2YWx1ZSwgJnJlc3BvbnNlKTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCXByaW50ayhLRVJOX0lORk8gImRlbGwtd21pOiBiYWQgZXZlbnQgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CisJCXJldHVybjsKKwl9CiAKIAlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKilyZXNwb25zZS5wb2ludGVyOwogCkBAIC0yMzgsNiArMjQzLDcgQEAKIAkJCWlucHV0X3N5bmMoZGVsbF93bWlfaW5wdXRfZGV2KTsKIAkJfQogCX0KKwlrZnJlZShvYmopOwogfQogCiAKQEAgLTMyMiwzOSArMzI4LDM3IEBACiBzdGF0aWMgaW50IF9faW5pdCBkZWxsX3dtaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlpZiAod21pX2hhc19ndWlkKERFTExfRVZFTlRfR1VJRCkpIHsKLQotCQlkbWlfd2FsayhmaW5kX2hrX3R5cGUsIE5VTEwpOwotCi0JCWVyciA9IGRlbGxfd21pX2lucHV0X3NldHVwKCk7Ci0KLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJZXJyID0gd21pX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoREVMTF9FVkVOVF9HVUlELAotCQkJCQkJIGRlbGxfd21pX25vdGlmeSwgTlVMTCk7Ci0JCWlmIChlcnIpIHsKLQkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7Ci0JCQlwcmludGsoS0VSTl9FUlIgImRlbGwtd21pOiBVbmFibGUgdG8gcmVnaXN0ZXIiCi0JCQkgICAgICAgIiBub3RpZnkgaGFuZGxlciAtICVkXG4iLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWFjcGlfdmlkZW8gPSBhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCk7Ci0KLQl9IGVsc2UKKwlpZiAoIXdtaV9oYXNfZ3VpZChERUxMX0VWRU5UX0dVSUQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImRlbGwtd21pOiBObyBrbm93biBXTUkgR1VJRCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRtaV93YWxrKGZpbmRfaGtfdHlwZSwgTlVMTCk7CisJYWNwaV92aWRlbyA9IGFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKTsKKworCWVyciA9IGRlbGxfd21pX2lucHV0X3NldHVwKCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN0YXR1cyA9IHdtaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKERFTExfRVZFTlRfR1VJRCwKKwkJCQkJIGRlbGxfd21pX25vdGlmeSwgTlVMTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImRlbGwtd21pOiBVbmFibGUgdG8gcmVnaXN0ZXIgbm90aWZ5IGhhbmRsZXIgLSAlZFxuIiwKKwkJCXN0YXR1cyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVsbF93bWlfZXhpdCh2b2lkKQogewotCWlmICh3bWlfaGFzX2d1aWQoREVMTF9FVkVOVF9HVUlEKSkgewotCQl3bWlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKERFTExfRVZFTlRfR1VJRCk7Ci0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7Ci0JfQorCXdtaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoREVMTF9FVkVOVF9HVUlEKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZWxsX3dtaV9pbnB1dF9kZXYpOwogfQogCiBtb2R1bGVfaW5pdChkZWxsX3dtaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IGJjZDRiYTguLjVmMzMyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJY2hhciBwaHlzWzMyXTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZl9kZXZpY2U7Ci0Jc3RydWN0IGtmaWZvICpmaWZvOworCXN0cnVjdCBrZmlmbyBmaWZvOwogCXNwaW5sb2NrX3QgZmlmb19sb2NrOwogCWludCByZmtpbGxfc3VwcG9ydGVkOwogCWludCByZmtpbGxfc3RhdGU7CkBAIC0zNzYsOCArMzc2LDggQEAKIAogCXN0YXR1cyA9CiAJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihmdWppdHN1LT5hY3BpX2hhbmRsZSwgIkdCTEwiLCBOVUxMLCAmc3RhdGUpOwotCWlmIChzdGF0dXMgPCAwKQotCQlyZXR1cm4gc3RhdHVzOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIDA7CiAKIAlmdWppdHN1LT5icmlnaHRuZXNzX2xldmVsID0gc3RhdGUgJiAweDBmZmZmZmZmOwogCkBAIC0zOTgsOCArMzk4LDggQEAKIAogCXN0YXR1cyA9CiAJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihmdWppdHN1LT5hY3BpX2hhbmRsZSwgIlJCTEwiLCBOVUxMLCAmc3RhdGUpOwotCWlmIChzdGF0dXMgPCAwKQotCQlyZXR1cm4gc3RhdHVzOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC0xOwogCiAJZnVqaXRzdS0+bWF4X2JyaWdodG5lc3MgPSBzdGF0ZTsKIApAQCAtODI0LDEyICs4MjQsMTAgQEAKIAogCS8qIGtmaWZvICovCiAJc3Bpbl9sb2NrX2luaXQoJmZ1aml0c3VfaG90a2V5LT5maWZvX2xvY2spOwotCWZ1aml0c3VfaG90a2V5LT5maWZvID0KLQkgICAga2ZpZm9fYWxsb2MoUklOR0JVRkZFUlNJWkUgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCwKLQkJCSZmdWppdHN1X2hvdGtleS0+Zmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKGZ1aml0c3VfaG90a2V5LT5maWZvKSkgeworCWVycm9yID0ga2ZpZm9fYWxsb2MoJmZ1aml0c3VfaG90a2V5LT5maWZvLCBSSU5HQlVGRkVSU0laRSAqIHNpemVvZihpbnQpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAia2ZpZm9fYWxsb2MgZmFpbGVkXG4iKTsKLQkJZXJyb3IgPSBQVFJfRVJSKGZ1aml0c3VfaG90a2V5LT5maWZvKTsKIAkJZ290byBlcnJfc3RvcDsKIAl9CiAKQEAgLTkzNCw3ICs5MzIsNyBAQAogZXJyX2ZyZWVfaW5wdXRfZGV2OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIGVycl9mcmVlX2ZpZm86Ci0Ja2ZpZm9fZnJlZShmdWppdHN1X2hvdGtleS0+Zmlmbyk7CisJa2ZpZm9fZnJlZSgmZnVqaXRzdV9ob3RrZXktPmZpZm8pOwogZXJyX3N0b3A6CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTk1Niw3ICs5NTQsNyBAQAogCiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwogCi0Ja2ZpZm9fZnJlZShmdWppdHN1X2hvdGtleS0+Zmlmbyk7CisJa2ZpZm9fZnJlZSgmZnVqaXRzdV9ob3RrZXktPmZpZm8pOwogCiAJZnVqaXRzdV9ob3RrZXktPmFjcGlfaGFuZGxlID0gTlVMTDsKIApAQCAtMTAwOCw5ICsxMDA2LDEwIEBACiAJCQkJdmRiZ19wcmludGsoRlVKTEFQVE9QX0RCR19UUkFDRSwKIAkJCQkJIlB1c2gga2V5Y29kZSBpbnRvIHJpbmdidWZmZXIgWyVkXVxuIiwKIAkJCQkJa2V5Y29kZSk7Ci0JCQkJc3RhdHVzID0ga2ZpZm9fcHV0KGZ1aml0c3VfaG90a2V5LT5maWZvLAorCQkJCXN0YXR1cyA9IGtmaWZvX2luX2xvY2tlZCgmZnVqaXRzdV9ob3RrZXktPmZpZm8sCiAJCQkJCQkgICAodW5zaWduZWQgY2hhciAqKSZrZXljb2RlLAotCQkJCQkJICAgc2l6ZW9mKGtleWNvZGUpKTsKKwkJCQkJCSAgIHNpemVvZihrZXljb2RlKSwKKwkJCQkJCSAgICZmdWppdHN1X2hvdGtleS0+Zmlmb19sb2NrKTsKIAkJCQlpZiAoc3RhdHVzICE9IHNpemVvZihrZXljb2RlKSkgewogCQkJCQl2ZGJnX3ByaW50ayhGVUpMQVBUT1BfREJHX1dBUk4sCiAJCQkJCSAgICAiQ291bGQgbm90IHB1c2gga2V5Y29kZSBbMHgleF1cbiIsCkBAIC0xMDIxLDExICsxMDIwLDEyIEBACiAJCQkJfQogCQkJfSBlbHNlIGlmIChrZXljb2RlID09IDApIHsKIAkJCQl3aGlsZSAoKHN0YXR1cyA9Ci0JCQkJCWtmaWZvX2dldAotCQkJCQkoZnVqaXRzdV9ob3RrZXktPmZpZm8sICh1bnNpZ25lZCBjaGFyICopCi0JCQkJCSAma2V5Y29kZV9yLAotCQkJCQkgc2l6ZW9mCi0JCQkJCSAoa2V5Y29kZV9yKSkpID09IHNpemVvZihrZXljb2RlX3IpKSB7CisJCQkJCWtmaWZvX291dF9sb2NrZWQoCisJCQkJCSAmZnVqaXRzdV9ob3RrZXktPmZpZm8sCisJCQkJCSAodW5zaWduZWQgY2hhciAqKSAma2V5Y29kZV9yLAorCQkJCQkgc2l6ZW9mKGtleWNvZGVfciksCisJCQkJCSAmZnVqaXRzdV9ob3RrZXktPmZpZm9fbG9jaykpCisJCQkJCSA9PSBzaXplb2Yoa2V5Y29kZV9yKSkgewogCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBrZXljb2RlX3IsIDApOwogCQkJCQlpbnB1dF9zeW5jKGlucHV0KTsKIAkJCQkJdmRiZ19wcmludGsoRlVKTEFQVE9QX0RCR19UUkFDRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggNjNjM2U2NS4uYWQ0YzQxNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCkBAIC0xMzQsMTAgKzEzNCwxNSBAQAogCiAJb2JqID0gb3V0cHV0LnBvaW50ZXI7CiAKLQlpZiAoIW9iaiB8fCBvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikKKwlpZiAoIW9iaikKIAkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAob2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJYmlvc19yZXR1cm4gPSAqKChzdHJ1Y3QgYmlvc19yZXR1cm4gKilvYmotPmJ1ZmZlci5wb2ludGVyKTsKKwlrZnJlZShvYmopOwogCWlmIChiaW9zX3JldHVybi5yZXR1cm5fY29kZSA+IDApCiAJCXJldHVybiBiaW9zX3JldHVybi5yZXR1cm5fY29kZSAqIC0xOwogCWVsc2UKQEAgLTMzMywxNyArMzM4LDI0IEBACiAJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwogCWludCBldmVudGNvZGU7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0Jd21pX2dldF9ldmVudF9kYXRhKHZhbHVlLCAmcmVzcG9uc2UpOworCXN0YXR1cyA9IHdtaV9nZXRfZXZlbnRfZGF0YSh2YWx1ZSwgJnJlc3BvbnNlKTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCXByaW50ayhLRVJOX0lORk8gImhwLXdtaTogYmFkIGV2ZW50IHN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOworCQlyZXR1cm47CisJfQogCiAJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopcmVzcG9uc2UucG9pbnRlcjsKIAogCWlmICghb2JqIHx8IG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSIHx8IG9iai0+YnVmZmVyLmxlbmd0aCAhPSA4KSB7CiAJCXByaW50ayhLRVJOX0lORk8gIkhQIFdNSTogVW5rbm93biByZXNwb25zZSByZWNlaXZlZFxuIik7CisJCWtmcmVlKG9iaik7CiAJCXJldHVybjsKIAl9CiAKIAlldmVudGNvZGUgPSAqKCh1OCAqKSBvYmotPmJ1ZmZlci5wb2ludGVyKTsKKwlrZnJlZShvYmopOwogCWlmIChldmVudGNvZGUgPT0gMHg0KQogCQlldmVudGNvZGUgPSBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9IT1RLRVlfUVVFUlksIDAsCiAJCQkJCQkwKTsKQEAgLTU3Miw3ICs1ODQsNyBAQAogCWlmICh3bWlfaGFzX2d1aWQoSFBXTUlfRVZFTlRfR1VJRCkpIHsKIAkJZXJyID0gd21pX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoSFBXTUlfRVZFTlRfR1VJRCwKIAkJCQkJCSBocF93bWlfbm90aWZ5LCBOVUxMKTsKLQkJaWYgKCFlcnIpCisJCWlmIChBQ1BJX1NVQ0NFU1MoZXJyKSkKIAkJCWhwX3dtaV9pbnB1dF9zZXR1cCgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCmluZGV4IDBjOGZlMTQuLmY1ZjcwZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKQEAgLTM0LDE2ICszNCw2IEBACiBNT0RVTEVfQUxJQVMoIndtaTo1NTFBMUY4NC1GQkRELTQxMjUtOTFEQi0zRUE4RjQ0RjFENDUiKTsKIE1PRFVMRV9BTElBUygid21pOkI2RjNFRUYyLTNEMkYtNDlEQy05REUzLTg1QkNFMThDNjJGMiIpOwogCi0vKiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB1bnRpbCB0aGUgV01JIHN5c2ZzIGludGVyZmFjZSBnb2VzIGluCi0JCXsgInN2biIsIERNSV9TWVNfVkVORE9SIH0sCi0JCXsgInBuIiwgIERNSV9QUk9EVUNUX05BTUUgfSwKLQkJeyAicHZyIiwgRE1JX1BST0RVQ1RfVkVSU0lPTiB9LAotCQl7ICJydm4iLCBETUlfQk9BUkRfVkVORE9SIH0sCi0JCXsgInJuIiwgIERNSV9CT0FSRF9OQU1FIH0sCi0qLwotCi1NT0RVTEVfQUxJQVMoImRtaToqOnN2bk1JQ1JPLVNUQVJJTlRFUk5BVElPTkFMKjpwbk1TLTY2Mzg6KiIpOwotCiAjZGVmaW5lIERSVl9OQU1FICJtc2ktd21pIgogI2RlZmluZSBEUlZfUEZYIERSVl9OQU1FICI6ICIKIApAQCAtMTU5LDggKzE0OSwxMyBAQAogCXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CiAJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKIAlrdGltZV90IGN1cjsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQl3bWlfZ2V0X2V2ZW50X2RhdGEodmFsdWUsICZyZXNwb25zZSk7CisJc3RhdHVzID0gd21pX2dldF9ldmVudF9kYXRhKHZhbHVlLCAmcmVzcG9uc2UpOworCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfUEZYICJiYWQgZXZlbnQgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CisJCXJldHVybjsKKwl9CiAKIAlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKilyZXNwb25zZS5wb2ludGVyOwogCkBAIC0yNDYsNyArMjQxLDcgQEAKIAl9CiAJZXJyID0gd21pX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoTVNJV01JX0VWRU5UX0dVSUQsCiAJCQltc2lfd21pX25vdGlmeSwgTlVMTCk7Ci0JaWYgKGVycikKKwlpZiAoQUNQSV9GQUlMVVJFKGVycikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gbXNpX3dtaV9pbnB1dF9zZXR1cCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggN2EyY2M4YS4uNWFmNTMzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC0xMzEsNiArMTMxLDcgQEAKIAlOX1NPTllfUkZLSUxMLAogfTsKIAorc3RhdGljIGludCBzb255X3Jma2lsbF9oYW5kbGU7CiBzdGF0aWMgc3RydWN0IHJma2lsbCAqc29ueV9yZmtpbGxfZGV2aWNlc1tOX1NPTllfUkZLSUxMXTsKIHN0YXRpYyBpbnQgc29ueV9yZmtpbGxfYWRkcmVzc1tOX1NPTllfUkZLSUxMXSA9IHsweDMwMCwgMHg1MDAsIDB4NzAwLCAweDkwMH07CiBzdGF0aWMgdm9pZCBzb255X25jX3Jma2lsbF91cGRhdGUodm9pZCk7CkBAIC0xNDIsNyArMTQzLDcgQEAKIAlhdG9taWNfdAkJdXNlcnM7CiAJc3RydWN0IGlucHV0X2Rldgkqam9nX2RldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSprZXlfZGV2OwotCXN0cnVjdCBrZmlmbwkJKmZpZm87CisJc3RydWN0IGtmaWZvCQlmaWZvOwogCXNwaW5sb2NrX3QJCWZpZm9fbG9jazsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd3E7CiB9OwpAQCAtMjMyLDYgKzIzMyw3IEBACiAJNTYsCS8qIDY5IFNPTllQSV9FVkVOVF9WT0xVTUVfSU5DX1BSRVNTRUQgKi8KIAk1NywJLyogNzAgU09OWVBJX0VWRU5UX1ZPTFVNRV9ERUNfUFJFU1NFRCAqLwogCS0xLAkvKiA3MSBTT05ZUElfRVZFTlRfQlJJR0hUTkVTU19QUkVTU0VEICovCisJNTgsCS8qIDcyIFNPTllQSV9FVkVOVF9NRURJQV9QUkVTU0VEICovCiB9OwogCiBzdGF0aWMgaW50IHNvbnlfbGFwdG9wX2lucHV0X2tleWNvZGVfbWFwW10gPSB7CkBAIC0yOTMsNiArMjk1LDcgQEAKIAlLRVlfRjE1LAkvKiA1NSBTT05ZUElfRVZFTlRfU0VUVElOR0tFWV9QUkVTU0VEICovCiAJS0VZX1ZPTFVNRVVQLAkvKiA1NiBTT05ZUElfRVZFTlRfVk9MVU1FX0lOQ19QUkVTU0VEICovCiAJS0VZX1ZPTFVNRURPV04sCS8qIDU3IFNPTllQSV9FVkVOVF9WT0xVTUVfREVDX1BSRVNTRUQgKi8KKwlLRVlfTUVESUEsCS8qIDU4IFNPTllQSV9FVkVOVF9NRURJQV9QUkVTU0VEICovCiB9OwogCiAvKiByZWxlYXNlIGJ1dHRvbnMgYWZ0ZXIgYSBzaG9ydCBkZWxheSBpZiBwcmVzc2VkICovCkBAIC0zMDAsOCArMzAzLDkgQEAKIHsKIAlzdHJ1Y3Qgc29ueV9sYXB0b3Bfa2V5cHJlc3Mga3A7CiAKLQl3aGlsZSAoa2ZpZm9fZ2V0KHNvbnlfbGFwdG9wX2lucHV0LmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmtwLAotCQkJIHNpemVvZihrcCkpID09IHNpemVvZihrcCkpIHsKKwl3aGlsZSAoa2ZpZm9fb3V0X2xvY2tlZCgmc29ueV9sYXB0b3BfaW5wdXQuZmlmbywgKHVuc2lnbmVkIGNoYXIgKikma3AsCisJCQlzaXplb2Yoa3ApLCAmc29ueV9sYXB0b3BfaW5wdXQuZmlmb19sb2NrKQorCQkJPT0gc2l6ZW9mKGtwKSkgewogCQltc2xlZXAoMTApOwogCQlpbnB1dF9yZXBvcnRfa2V5KGtwLmRldiwga3Aua2V5LCAwKTsKIAkJaW5wdXRfc3luYyhrcC5kZXYpOwpAQCAtMzYyLDggKzM2Niw5IEBACiAJCS8qIHdlIGVtaXQgdGhlIHNjYW5jb2RlIHNvIHdlIGNhbiBhbHdheXMgcmVtYXAgdGhlIGtleSAqLwogCQlpbnB1dF9ldmVudChrcC5kZXYsIEVWX01TQywgTVNDX1NDQU4sIGV2ZW50KTsKIAkJaW5wdXRfc3luYyhrcC5kZXYpOwotCQlrZmlmb19wdXQoc29ueV9sYXB0b3BfaW5wdXQuZmlmbywKLQkJCSAgKHVuc2lnbmVkIGNoYXIgKikma3AsIHNpemVvZihrcCkpOworCQlrZmlmb19pbl9sb2NrZWQoJnNvbnlfbGFwdG9wX2lucHV0LmZpZm8sCisJCQkgICh1bnNpZ25lZCBjaGFyICopJmtwLCBzaXplb2Yoa3ApLAorCQkJICAmc29ueV9sYXB0b3BfaW5wdXQuZmlmb19sb2NrKTsKIAogCQlpZiAoIXdvcmtfcGVuZGluZygmc29ueV9sYXB0b3BfcmVsZWFzZV9rZXlfd29yaykpCiAJCQlxdWV1ZV93b3JrKHNvbnlfbGFwdG9wX2lucHV0LndxLApAQCAtMzg1LDEyICszOTAsMTAgQEAKIAogCS8qIGtmaWZvICovCiAJc3Bpbl9sb2NrX2luaXQoJnNvbnlfbGFwdG9wX2lucHV0LmZpZm9fbG9jayk7Ci0Jc29ueV9sYXB0b3BfaW5wdXQuZmlmbyA9Ci0JCWtmaWZvX2FsbG9jKFNPTllfTEFQVE9QX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAotCQkJICAgICZzb255X2xhcHRvcF9pbnB1dC5maWZvX2xvY2spOwotCWlmIChJU19FUlIoc29ueV9sYXB0b3BfaW5wdXQuZmlmbykpIHsKKwllcnJvciA9CisJIGtmaWZvX2FsbG9jKCZzb255X2xhcHRvcF9pbnB1dC5maWZvLCBTT05ZX0xBUFRPUF9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfUEZYICJrZmlmb19hbGxvYyBmYWlsZWRcbiIpOwotCQllcnJvciA9IFBUUl9FUlIoc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CiAJCWdvdG8gZXJyX2RlY191c2VyczsKIAl9CiAKQEAgLTQ3NCw3ICs0NzcsNyBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHNvbnlfbGFwdG9wX2lucHV0LndxKTsKIAogZXJyX2ZyZWVfa2ZpZm86Ci0Ja2ZpZm9fZnJlZShzb255X2xhcHRvcF9pbnB1dC5maWZvKTsKKwlrZmlmb19mcmVlKCZzb255X2xhcHRvcF9pbnB1dC5maWZvKTsKIAogZXJyX2RlY191c2VyczoKIAlhdG9taWNfZGVjKCZzb255X2xhcHRvcF9pbnB1dC51c2Vycyk7CkBAIC01MDAsNyArNTAzLDcgQEAKIAl9CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzb255X2xhcHRvcF9pbnB1dC53cSk7Ci0Ja2ZpZm9fZnJlZShzb255X2xhcHRvcF9pbnB1dC5maWZvKTsKKwlrZmlmb19mcmVlKCZzb255X2xhcHRvcF9pbnB1dC5maWZvKTsKIH0KIAogLyoqKioqKioqKioqIFBsYXRmb3JtIERldmljZSAqKioqKioqKioqKi8KQEAgLTg5MCw2ICs4OTMsOCBAQAogCXsgMHgwQywgU09OWVBJX0VWRU5UX0ZOS0VZX1JFTEVBU0VEIH0sCiAJeyAweDlmLCBTT05ZUElfRVZFTlRfQ0RfRUpFQ1RfUFJFU1NFRCB9LAogCXsgMHgxZiwgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRCB9LAorCXsgMHhhMSwgU09OWVBJX0VWRU5UX01FRElBX1BSRVNTRUQgfSwKKwl7IDB4MjEsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKIAl7IDAsIDAgfSwKIH07CiAKQEAgLTk2MSw3ICs5NjYsNyBAQAogCQkJCWVsc2UKIAkJCQkJc29ueV9sYXB0b3BfcmVwb3J0X2lucHV0X2V2ZW50KGV2KTsKIAkJCX0KLQkJfSBlbHNlIGlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEyNCkgPT0gZXYpIHsKKwkJfSBlbHNlIGlmIChzb255X2ZpbmRfc25jX2hhbmRsZShzb255X3Jma2lsbF9oYW5kbGUpID09IGV2KSB7CiAJCQlzb255X25jX3Jma2lsbF91cGRhdGUoKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTA2Nyw3ICsxMDcyLDcgQEAKIAlpZiAoIWJsb2NrZWQpCiAJCWFyZ3VtZW50IHw9IDB4ZmYwMDAwOwogCi0JcmV0dXJuIHNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MTI0LCBhcmd1bWVudCwgJnJlc3VsdCk7CisJcmV0dXJuIHNvbnlfY2FsbF9zbmNfaGFuZGxlKHNvbnlfcmZraWxsX2hhbmRsZSwgYXJndW1lbnQsICZyZXN1bHQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJma2lsbF9vcHMgc29ueV9yZmtpbGxfb3BzID0gewpAQCAtMTExMCw3ICsxMTE1LDcgQEAKIAlpZiAoIXJmaykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzb255X2NhbGxfc25jX2hhbmRsZSgweDEyNCwgMHgyMDAsICZyZXN1bHQpOworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKHNvbnlfcmZraWxsX2hhbmRsZSwgMHgyMDAsICZyZXN1bHQpOwogCWh3YmxvY2sgPSAhKHJlc3VsdCAmIDB4MSk7CiAJcmZraWxsX3NldF9od19zdGF0ZShyZmssIGh3YmxvY2spOwogCkBAIC0xMTI5LDcgKzExMzQsNyBAQAogCWludCByZXN1bHQ7CiAJYm9vbCBod2Jsb2NrOwogCi0Jc29ueV9jYWxsX3NuY19oYW5kbGUoMHgxMjQsIDB4MjAwLCAmcmVzdWx0KTsKKwlzb255X2NhbGxfc25jX2hhbmRsZShzb255X3Jma2lsbF9oYW5kbGUsIDB4MjAwLCAmcmVzdWx0KTsKIAlod2Jsb2NrID0gIShyZXN1bHQgJiAweDEpOwogCiAJZm9yIChpID0gMDsgaSA8IE5fU09OWV9SRktJTEw7IGkrKykgewpAQCAtMTE0NSwzNiArMTE1MCw3OSBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlzb255X2NhbGxfc25jX2hhbmRsZSgweDEyNCwgYXJndW1lbnQsICZyZXN1bHQpOworCQlzb255X2NhbGxfc25jX2hhbmRsZShzb255X3Jma2lsbF9oYW5kbGUsIGFyZ3VtZW50LCAmcmVzdWx0KTsKIAkJcmZraWxsX3NldF9zdGF0ZXMoc29ueV9yZmtpbGxfZGV2aWNlc1tpXSwKIAkJCQkgICEocmVzdWx0ICYgMHhmKSwgZmFsc2UpOwogCX0KIH0KIAotc3RhdGljIGludCBzb255X25jX3Jma2lsbF9zZXR1cChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyB2b2lkIHNvbnlfbmNfcmZraWxsX3NldHVwKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCWludCByZXN1bHQsIHJldDsKKwlpbnQgb2Zmc2V0OworCXU4IGRldl9jb2RlLCBpOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7CisJdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqOworCXVuaW9uIGFjcGlfb2JqZWN0ICpkZXZpY2VfZW51bTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwogCi0JaWYgKHNvbnlfZmluZF9zbmNfaGFuZGxlKDB4MTI0KSA9PSAtMSkKLQkJcmV0dXJuIC0xOworCW9mZnNldCA9IHNvbnlfZmluZF9zbmNfaGFuZGxlKDB4MTI0KTsKKwlpZiAob2Zmc2V0ID09IC0xKSB7CisJCW9mZnNldCA9IHNvbnlfZmluZF9zbmNfaGFuZGxlKDB4MTM1KTsKKwkJaWYgKG9mZnNldCA9PSAtMSkKKwkJCXJldHVybjsKKwkJZWxzZQorCQkJc29ueV9yZmtpbGxfaGFuZGxlID0gMHgxMzU7CisJfSBlbHNlCisJCXNvbnlfcmZraWxsX2hhbmRsZSA9IDB4MTI0OworCWRwcmludGsoIkZvdW5kIHJrZmlsbCBoYW5kbGU6IDB4JS40eFxuIiwgc29ueV9yZmtpbGxfaGFuZGxlKTsKIAotCXJldCA9IHNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MTI0LCAweGIwMCwgJnJlc3VsdCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9QRlgKLQkJICAgICAgICJVbmFibGUgdG8gZW51bWVyYXRlIHJma2lsbCBkZXZpY2VzOiAleFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkvKiBuZWVkIHRvIHJlYWQgdGhlIHdob2xlIGJ1ZmZlciByZXR1cm5lZCBieSB0aGUgYWNwaSBjYWxsIHRvIFNOMDYKKwkgKiBoZXJlIG90aGVyd2lzZSB3ZSBtYXkgbWlzcyBzb21lIGZlYXR1cmVzCisJICovCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZpbl9vYmo7CisJaW5fb2JqLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbl9vYmouaW50ZWdlci52YWx1ZSA9IG9mZnNldDsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChzb255X25jX2FjcGlfaGFuZGxlLCAiU04wNiIsICZwYXJhbXMsCisJCQkmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJZHByaW50aygiUmFkaW8gZGV2aWNlIGVudW1lcmF0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybjsKIAl9CiAKLQlpZiAocmVzdWx0ICYgMHgxKQotCQlzb255X25jX3NldHVwX3Jma2lsbChkZXZpY2UsIFNPTllfV0lGSSk7Ci0JaWYgKHJlc3VsdCAmIDB4MikKLQkJc29ueV9uY19zZXR1cF9yZmtpbGwoZGV2aWNlLCBTT05ZX0JMVUVUT09USCk7Ci0JaWYgKHJlc3VsdCAmIDB4MWMpCi0JCXNvbnlfbmNfc2V0dXBfcmZraWxsKGRldmljZSwgU09OWV9XV0FOKTsKLQlpZiAocmVzdWx0ICYgMHgyMCkKLQkJc29ueV9uY19zZXR1cF9yZmtpbGwoZGV2aWNlLCBTT05ZX1dJTUFYKTsKKwlkZXZpY2VfZW51bSA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSBidWZmZXIucG9pbnRlcjsKKwlpZiAoIWRldmljZV9lbnVtIHx8IGRldmljZV9lbnVtLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIFNOMDYgcmV0dXJuIG9iamVjdCAweCUuMnhcbiIsCisJCQkJZGV2aWNlX2VudW0tPnR5cGUpOworCQlnb3RvIG91dF9ub19lbnVtOworCX0KIAotCXJldHVybiAwOworCS8qIHRoZSBidWZmZXIgaXMgZmlsbGVkIHdpdGggbWFnaWMgbnVtYmVycyBkZXNjcmliaW5nIHRoZSBkZXZpY2VzCisJICogYXZhaWxhYmxlLCAweGZmIHRlcm1pbmF0ZXMgdGhlIGVudW1lcmF0aW9uCisJICovCisJd2hpbGUgKChkZXZfY29kZSA9ICooZGV2aWNlX2VudW0tPmJ1ZmZlci5wb2ludGVyICsgaSkpICE9IDB4ZmYgJiYKKwkJCWkgPCBkZXZpY2VfZW51bS0+YnVmZmVyLmxlbmd0aCkgeworCQlpKys7CisJCWRwcmludGsoIlJhZGlvIGRldmljZXMsIGxvb2tpbmcgYXQgMHglLjJ4XG4iLCBkZXZfY29kZSk7CisKKwkJaWYgKGRldl9jb2RlID09IDAgJiYgIXNvbnlfcmZraWxsX2RldmljZXNbU09OWV9XSUZJXSkKKwkJCXNvbnlfbmNfc2V0dXBfcmZraWxsKGRldmljZSwgU09OWV9XSUZJKTsKKworCQlpZiAoZGV2X2NvZGUgPT0gMHgxMCAmJiAhc29ueV9yZmtpbGxfZGV2aWNlc1tTT05ZX0JMVUVUT09USF0pCisJCQlzb255X25jX3NldHVwX3Jma2lsbChkZXZpY2UsIFNPTllfQkxVRVRPT1RIKTsKKworCQlpZiAoKDB4ZjAgJiBkZXZfY29kZSkgPT0gMHgyMCAmJgorCQkJCSFzb255X3Jma2lsbF9kZXZpY2VzW1NPTllfV1dBTl0pCisJCQlzb255X25jX3NldHVwX3Jma2lsbChkZXZpY2UsIFNPTllfV1dBTik7CisKKwkJaWYgKGRldl9jb2RlID09IDB4MzAgJiYgIXNvbnlfcmZraWxsX2RldmljZXNbU09OWV9XSU1BWF0pCisJCQlzb255X25jX3NldHVwX3Jma2lsbChkZXZpY2UsIFNPTllfV0lNQVgpOworCX0KKworb3V0X25vX2VudW06CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybjsKIH0KIAogc3RhdGljIGludCBzb255X25jX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKQEAgLTIwNzksNyArMjEyNyw3IEBACiAKIHN0cnVjdCBzb255cGlfY29tcGF0X3MgewogCXN0cnVjdCBmYXN5bmNfc3RydWN0CSpmaWZvX2FzeW5jOwotCXN0cnVjdCBrZmlmbwkJKmZpZm87CisJc3RydWN0IGtmaWZvCQlmaWZvOwogCXNwaW5sb2NrX3QJCWZpZm9fbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlmaWZvX3Byb2NfbGlzdDsKIAlhdG9taWNfdAkJb3Blbl9jb3VudDsKQEAgLTIxMDQsMTIgKzIxNTIsMTIgQEAKIAkvKiBGbHVzaCBpbnB1dCBxdWV1ZSBvbiBmaXJzdCBvcGVuICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNvbnlwaV9jb21wYXQuZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZzb255cGlfY29tcGF0LmZpZm9fbG9jaywgZmxhZ3MpOwogCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzb255cGlfY29tcGF0Lm9wZW5fY291bnQpID09IDEpCi0JCV9fa2ZpZm9fcmVzZXQoc29ueXBpX2NvbXBhdC5maWZvKTsKKwkJa2ZpZm9fcmVzZXQoJnNvbnlwaV9jb21wYXQuZmlmbyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNvbnlwaV9jb21wYXQuZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvbnlwaV9jb21wYXQuZmlmb19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMjAsMTcgKzIxNjgsMTggQEAKIAlzc2l6ZV90IHJldDsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKLQlpZiAoKGtmaWZvX2xlbihzb255cGlfY29tcGF0LmZpZm8pID09IDApICYmCisJaWYgKChrZmlmb19sZW4oJnNvbnlwaV9jb21wYXQuZmlmbykgPT0gMCkgJiYKIAkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc29ueXBpX2NvbXBhdC5maWZvX3Byb2NfbGlzdCwKLQkJCQkgICAgICAga2ZpZm9fbGVuKHNvbnlwaV9jb21wYXQuZmlmbykgIT0gMCk7CisJCQkJICAgICAgIGtmaWZvX2xlbigmc29ueXBpX2NvbXBhdC5maWZvKSAhPSAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJd2hpbGUgKHJldCA8IGNvdW50ICYmCi0JICAgICAgIChrZmlmb19nZXQoc29ueXBpX2NvbXBhdC5maWZvLCAmYywgc2l6ZW9mKGMpKSA9PSBzaXplb2YoYykpKSB7CisJICAgICAgIChrZmlmb19vdXRfbG9ja2VkKCZzb255cGlfY29tcGF0LmZpZm8sICZjLCBzaXplb2YoYyksCisJCQkgICZzb255cGlfY29tcGF0LmZpZm9fbG9jaykgPT0gc2l6ZW9mKGMpKSkgewogCQlpZiAocHV0X3VzZXIoYywgYnVmKyspKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldCsrOwpAQCAtMjE0Nyw3ICsyMTk2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc29ueXBpX21pc2NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlwb2xsX3dhaXQoZmlsZSwgJnNvbnlwaV9jb21wYXQuZmlmb19wcm9jX2xpc3QsIHdhaXQpOwotCWlmIChrZmlmb19sZW4oc29ueXBpX2NvbXBhdC5maWZvKSkKKwlpZiAoa2ZpZm9fbGVuKCZzb255cGlfY29tcGF0LmZpZm8pKQogCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMDksNyArMjM1OCw4IEBACiAKIHN0YXRpYyB2b2lkIHNvbnlwaV9jb21wYXRfcmVwb3J0X2V2ZW50KHU4IGV2ZW50KQogewotCWtmaWZvX3B1dChzb255cGlfY29tcGF0LmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmV2ZW50LCBzaXplb2YoZXZlbnQpKTsKKwlrZmlmb19pbl9sb2NrZWQoJnNvbnlwaV9jb21wYXQuZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmZXZlbnQsCisJCQlzaXplb2YoZXZlbnQpLCAmc29ueXBpX2NvbXBhdC5maWZvX2xvY2spOwogCWtpbGxfZmFzeW5jKCZzb255cGlfY29tcGF0LmZpZm9fYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNvbnlwaV9jb21wYXQuZmlmb19wcm9jX2xpc3QpOwogfQpAQCAtMjMxOSwxMSArMjM2OSwxMSBAQAogCWludCBlcnJvcjsKIAogCXNwaW5fbG9ja19pbml0KCZzb255cGlfY29tcGF0LmZpZm9fbG9jayk7Ci0Jc29ueXBpX2NvbXBhdC5maWZvID0ga2ZpZm9fYWxsb2MoU09OWV9MQVBUT1BfQlVGX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkJCSAmc29ueXBpX2NvbXBhdC5maWZvX2xvY2spOwotCWlmIChJU19FUlIoc29ueXBpX2NvbXBhdC5maWZvKSkgeworCWVycm9yID0KKwkga2ZpZm9fYWxsb2MoJnNvbnlwaV9jb21wYXQuZmlmbywgU09OWV9MQVBUT1BfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX1BGWCAia2ZpZm9fYWxsb2MgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoc29ueXBpX2NvbXBhdC5maWZvKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvbnlwaV9jb21wYXQuZmlmb19wcm9jX2xpc3QpOwpAQCAtMjM0MiwxNCArMjM5MiwxNCBAQAogCXJldHVybiAwOwogCiBlcnJfZnJlZV9rZmlmbzoKLQlrZmlmb19mcmVlKHNvbnlwaV9jb21wYXQuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueXBpX2NvbXBhdC5maWZvKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIHNvbnlwaV9jb21wYXRfZXhpdCh2b2lkKQogewogCW1pc2NfZGVyZWdpc3Rlcigmc29ueXBpX21pc2NfZGV2aWNlKTsKLQlrZmlmb19mcmVlKHNvbnlwaV9jb21wYXQuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueXBpX2NvbXBhdC5maWZvKTsKIH0KICNlbHNlCiBzdGF0aWMgaW50IHNvbnlwaV9jb21wYXRfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKaW5kZXggNDQxNjYwMC4uZGQzM2I1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYwpAQCAtNDcsMjIgKzQ3LDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygid21pOkMzNjRBQzcxLTM2REItNDk1QS04NDk0LUI0MzlENDcyQTUwNSIpOwogCi1zdGF0aWMgaW50IHRjMTEwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCB0YzExMDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgaW50IHRjMTEwMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLXN0YXRpYyBpbnQgdGMxMTAwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0YzExMDBfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInRjMTEwMC13bWkiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZSA9IHRjMTEwMF9wcm9iZSwKLQkucmVtb3ZlID0gdGMxMTAwX3JlbW92ZSwKLQkuc3VzcGVuZCA9IHRjMTEwMF9zdXNwZW5kLAotCS5yZXN1bWUgPSB0YzExMDBfcmVzdW1lLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnRjMTEwMF9kZXZpY2U7CiAKIHN0cnVjdCB0YzExMDBfZGF0YSB7CkBAIC0xODMsNTEgKzE2NywzNSBAQAogc2hvd19zZXRfYm9vbCh3aXJlbGVzcywgVEMxMTAwX0lOU1RBTkNFX1dJUkVMRVNTKTsKIHNob3dfc2V0X2Jvb2woam9nZGlhbCwgVEMxMTAwX0lOU1RBTkNFX0pPR0RJQUwpOwogCi1zdGF0aWMgdm9pZCByZW1vdmVfZnModm9pZCkKLXsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnRjMTEwMF9kZXZpY2UtPmRldiwgJmRldl9hdHRyX3dpcmVsZXNzKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnRjMTEwMF9kZXZpY2UtPmRldiwgJmRldl9hdHRyX2pvZ2RpYWwpOwotfQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRjMTEwMF9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3dpcmVsZXNzLmF0dHIsCisJJmRldl9hdHRyX2pvZ2RpYWwuYXR0ciwKKwlOVUxMCit9OwogCi1zdGF0aWMgaW50IGFkZF9mcyh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnRjMTEwMF9kZXZpY2UtPmRldiwgJmRldl9hdHRyX3dpcmVsZXNzKTsKLQlpZiAocmV0KQotCQlnb3RvIGFkZF9zeXNmc19lcnJvcjsKLQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmdGMxMTAwX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfam9nZGlhbCk7Ci0JaWYgKHJldCkKLQkJZ290byBhZGRfc3lzZnNfZXJyb3I7Ci0KLQlyZXR1cm4gcmV0OwotCi1hZGRfc3lzZnNfZXJyb3I6Ci0JcmVtb3ZlX2ZzKCk7Ci0JcmV0dXJuIHJldDsKLX0KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHRjMTEwMF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzCT0gdGMxMTAwX2F0dHJpYnV0ZXMsCit9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkJCURyaXZlciBNb2RlbAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCB0YzExMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgdGMxMTAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCXJlc3VsdCA9IGFkZF9mcygpOwotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2aWNlLT5kZXYua29iaiwgJnRjMTEwMF9hdHRyaWJ1dGVfZ3JvdXApOwogfQogCiAKLXN0YXRpYyBpbnQgdGMxMTAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0YzExMDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKLQlyZW1vdmVfZnMoKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldmljZS0+ZGV2LmtvYmosICZ0YzExMDBfYXR0cmlidXRlX2dyb3VwKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRjMTEwMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB0YzExMDBfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKIApAQCAtMjM5LDEwICsyMDcsMTAgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YzExMDBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdGMxMTAwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKIApAQCAtMjU0LDM0ICsyMjIsNjEgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRjMTEwMF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSB0YzExMDBfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHRjMTEwMF9yZXN1bWUsCisJLmZyZWV6ZQkJPSB0YzExMDBfc3VzcGVuZCwKKwkucmVzdG9yZQk9IHRjMTEwMF9yZXN1bWUsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRjMTEwMF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGMxMTAwLXdtaSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0gPSAmdGMxMTAwX3BtX29wcywKKyNlbmRpZgorCX0sCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRjMTEwMF9yZW1vdmUpLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgdGMxMTAwX2luaXQodm9pZCkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoIXdtaV9oYXNfZ3VpZChHVUlEKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXN1bHQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRjMTEwMF9kcml2ZXIpOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7Ci0KIAl0YzExMDBfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0YzExMDAtd21pIiwgLTEpOwotCXBsYXRmb3JtX2RldmljZV9hZGQodGMxMTAwX2RldmljZSk7CisJaWYgKCF0YzExMDBfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVycm9yID0gcGxhdGZvcm1fZGV2aWNlX2FkZCh0YzExMDBfZGV2aWNlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2RldmljZV9wdXQ7CisKKwllcnJvciA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmdGMxMTAwX2RyaXZlciwgdGMxMTAwX3Byb2JlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2RldmljZV9kZWw7CiAKIAlwcmludGsoVEMxMTAwX0lORk8gIkhQIENvbXBhcSBUQzExMDAgVGFibGV0IFdNSSBFeHRyYXMgbG9hZGVkXG4iKTsKKwlyZXR1cm4gMDsKIAotCXJldHVybiByZXN1bHQ7CisgZXJyX2RldmljZV9kZWw6CisJcGxhdGZvcm1fZGV2aWNlX2RlbCh0YzExMDBfZGV2aWNlKTsKKyBlcnJfZGV2aWNlX3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHRjMTEwMF9kZXZpY2UpOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHRjMTEwMF9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZGV2aWNlX2RlbCh0YzExMDBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0YzExMDBfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGMxMTAwX2RyaXZlcik7Ci0KLQlwcmludGsoVEMxMTAwX0lORk8gIkhQIENvbXBhcSBUQzExMDAgVGFibGV0IFdNSSBFeHRyYXMgdW5sb2FkZWRcbiIpOwogfQogCiBtb2R1bGVfaW5pdCh0YzExMDBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggNDQ4YzhhZS4uZTY3ZTRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtNjM4NCwxMSArNjM4NCwxMyBAQAogICogYW5kIHdlIGxlYXZlIHRoZW0gdW5jaGFuZ2VkLgogICovCiAKKyNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9BTFNBX1NVUFBPUlQKKwogI2RlZmluZSBUUEFDUElfQUxTQV9EUlZOQU1FICAiVGhpbmtQYWQgRUMiCiAjZGVmaW5lIFRQQUNQSV9BTFNBX1NIUlROQU1FICJUaGlua1BhZCBDb25zb2xlIEF1ZGlvIENvbnRyb2wiCiAjZGVmaW5lIFRQQUNQSV9BTFNBX01JWEVSTkFNRSBUUEFDUElfQUxTQV9TSFJUTkFNRQogCi1zdGF0aWMgaW50IGFsc2FfaW5kZXggPSBTTkRSVl9ERUZBVUxUX0lEWDE7CitzdGF0aWMgaW50IGFsc2FfaW5kZXggPSB+KCgxIDw8IChTTkRSVl9DQVJEUyAtIDMpKSAtIDEpOyAvKiBsYXN0IHRocmVlIHNsb3RzICovCiBzdGF0aWMgY2hhciAqYWxzYV9pZCA9ICJUaGlua1BhZEVDIjsKIHN0YXRpYyBpbnQgYWxzYV9lbmFibGUgPSBTTkRSVl9ERUZBVUxUX0VOQUJMRTE7CiAKQEAgLTY3MDUsMTAgKzY3MDcsMTEgQEAKIAogCXJjID0gc25kX2NhcmRfY3JlYXRlKGFsc2FfaW5kZXgsIGFsc2FfaWQsIFRISVNfTU9EVUxFLAogCQkJICAgIHNpemVvZihzdHJ1Y3QgdHBhY3BpX2Fsc2FfZGF0YSksICZjYXJkKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocmMgPCAwIHx8ICFjYXJkKSB7CisJCXByaW50ayhUUEFDUElfRVJSCisJCQkiRmFpbGVkIHRvIGNyZWF0ZSBBTFNBIGNhcmQgc3RydWN0dXJlczogJWRcbiIsIHJjKTsKKwkJcmV0dXJuIDE7CisJfQogCiAJQlVHX09OKCFjYXJkLT5wcml2YXRlX2RhdGEpOwogCWRhdGEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CkBAIC02NzQxLDggKzY3NDQsOSBAQAogCQlyYyA9IHNuZF9jdGxfYWRkKGNhcmQsIGN0bF92b2wpOwogCQlpZiAocmMgPCAwKSB7CiAJCQlwcmludGsoVFBBQ1BJX0VSUgotCQkJCSJGYWlsZWQgdG8gY3JlYXRlIEFMU0Egdm9sdW1lIGNvbnRyb2xcbiIpOwotCQkJZ290byBlcnJfb3V0OworCQkJCSJGYWlsZWQgdG8gY3JlYXRlIEFMU0Egdm9sdW1lIGNvbnRyb2w6ICVkXG4iLAorCQkJCXJjKTsKKwkJCWdvdG8gZXJyX2V4aXQ7CiAJCX0KIAkJZGF0YS0+Y3RsX3ZvbF9pZCA9ICZjdGxfdm9sLT5pZDsKIAl9CkBAIC02NzUwLDIyICs2NzU0LDI1IEBACiAJY3RsX211dGUgPSBzbmRfY3RsX25ldzEoJnZvbHVtZV9hbHNhX2NvbnRyb2xfbXV0ZSwgTlVMTCk7CiAJcmMgPSBzbmRfY3RsX2FkZChjYXJkLCBjdGxfbXV0ZSk7CiAJaWYgKHJjIDwgMCkgewotCQlwcmludGsoVFBBQ1BJX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBBTFNBIG11dGUgY29udHJvbFxuIik7Ci0JCWdvdG8gZXJyX291dDsKKwkJcHJpbnRrKFRQQUNQSV9FUlIgIkZhaWxlZCB0byBjcmVhdGUgQUxTQSBtdXRlIGNvbnRyb2w6ICVkXG4iLAorCQkJcmMpOworCQlnb3RvIGVycl9leGl0OwogCX0KIAlkYXRhLT5jdGxfbXV0ZV9pZCA9ICZjdGxfbXV0ZS0+aWQ7CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZ0cGFjcGlfcGRldi0+ZGV2KTsKIAlyYyA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwotCi1lcnJfb3V0OgogCWlmIChyYyA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJY2FyZCA9IE5VTEw7CisJCXByaW50ayhUUEFDUElfRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgQUxTQSBjYXJkOiAlZFxuIiwgcmMpOworCQlnb3RvIGVycl9leGl0OwogCX0KIAogCWFsc2FfY2FyZCA9IGNhcmQ7Ci0JcmV0dXJuIHJjOworCXJldHVybiAwOworCitlcnJfZXhpdDoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiAxOwogfQogCiAjZGVmaW5lIFRQQUNQSV9WT0xfUV9NVVRFT05MWQkweDAwMDEJLyogTXV0ZS1vbmx5IGNvbnRyb2wgYXZhaWxhYmxlICovCkBAIC03MDE2LDYgKzcwMjMsMjggQEAKIAkuc2h1dGRvd24gPSB2b2x1bWVfc2h1dGRvd24sCiB9OwogCisjZWxzZSAvKiAhQ09ORklHX1RISU5LUEFEX0FDUElfQUxTQV9TVVBQT1JUICovCisKKyNkZWZpbmUgYWxzYV9jYXJkIE5VTEwKKworc3RhdGljIHZvaWQgaW5saW5lIHZvbHVtZV9hbHNhX25vdGlmeV9jaGFuZ2Uodm9pZCkKK3sKK30KKworc3RhdGljIGludCBfX2luaXQgdm9sdW1lX2luaXQoc3RydWN0IGlibV9pbml0X3N0cnVjdCAqaWlibSkKK3sKKwlwcmludGsoVFBBQ1BJX0lORk8KKwkJInZvbHVtZTogZGlzYWJsZWQgYXMgdGhlcmUgaXMgbm8gQUxTQSBzdXBwb3J0IGluIHRoaXMga2VybmVsXG4iKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGlibV9zdHJ1Y3Qgdm9sdW1lX2RyaXZlcl9kYXRhID0geworCS5uYW1lID0gInZvbHVtZSIsCit9OworCisjZW5kaWYgLyogQ09ORklHX1RISU5LUEFEX0FDUElfQUxTQV9TVVBQT1JUICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBGYW4gc3ViZHJpdmVyCiAgKi8KQEAgLTg3MzgsNiArODc2Nyw3IEBACiAJCSAidXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UsICIKIAkJICJzZWUgZG9jdW1lbnRhdGlvbiIpOwogCisjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfQUxTQV9TVVBQT1JUCiBtb2R1bGVfcGFyYW1fbmFtZWQodm9sdW1lX21vZGUsIHZvbHVtZV9tb2RlLCB1aW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Modm9sdW1lX21vZGUsCiAJCSAiU2VsZWN0cyB2b2x1bWUgY29udHJvbCBzdHJhdGVneTogIgpAQCAtODc2MCw2ICs4NzkwLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaWQsICJBTFNBIGlkIGZvciB0aGUgQUNQSSBFQyBNaXhlciIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGVuYWJsZSwgYWxzYV9lbmFibGUsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgdGhlIEFMU0EgaW50ZXJmYWNlIGZvciB0aGUgQUNQSSBFQyBNaXhlciIpOworI2VuZGlmIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0FMU0FfU1VQUE9SVCAqLwogCiAjZGVmaW5lIFRQQUNQSV9QQVJBTShmZWF0dXJlKSBcCiAJbW9kdWxlX3BhcmFtX2NhbGwoZmVhdHVyZSwgc2V0X2libV9wYXJhbSwgTlVMTCwgTlVMTCwgMCk7IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKaW5kZXggNTFjMGE4Yi4uNzdiZjVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KQEAgLTM1Nyw2MyArMzU4LDYgQEAKIHN0YXRpYyBpbnQgbGFzdF9rZXlfZXZlbnQ7CiBzdGF0aWMgaW50IGtleV9ldmVudF92YWxpZDsKIAotdHlwZWRlZiBzdHJ1Y3QgX1Byb2NJdGVtIHsKLQljb25zdCBjaGFyICpuYW1lOwotCWNoYXIgKigqcmVhZF9mdW5jKSAoY2hhciAqKTsKLQl1bnNpZ25lZCBsb25nICgqd3JpdGVfZnVuYykgKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7Ci19IFByb2NJdGVtOwotCi0vKiBwcm9jIGZpbGUgaGFuZGxlcnMKLSAqLwotCi1zdGF0aWMgaW50Ci1kaXNwYXRjaF9yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgIFByb2NJdGVtICogaXRlbSkKLXsKLQljaGFyICpwID0gcGFnZTsKLQlpbnQgbGVuOwotCi0JaWYgKG9mZiA9PSAwKQotCQlwID0gaXRlbS0+cmVhZF9mdW5jKHApOwotCi0JLyogSVNTVUU6IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGNvZGUgKi8KLQlsZW4gPSAocCAtIHBhZ2UpOwotCWlmIChsZW4gPD0gb2ZmICsgY291bnQpCi0JCSplb2YgPSAxOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JbGVuIC09IG9mZjsKLQlpZiAobGVuID4gY291bnQpCi0JCWxlbiA9IGNvdW50OwotCWlmIChsZW4gPCAwKQotCQlsZW4gPSAwOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBpbnQKLWRpc3BhdGNoX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgUHJvY0l0ZW0gKiBpdGVtKQotewotCWludCByZXN1bHQ7Ci0JY2hhciAqdG1wX2J1ZmZlcjsKLQotCS8qIEFyZyBidWZmZXIgcG9pbnRzIHRvIHVzZXJzcGFjZSBtZW1vcnksIHdoaWNoIGNhbid0IGJlIGFjY2Vzc2VkCi0JICogZGlyZWN0bHkuICBTaW5jZSB3ZSdyZSBtYWtpbmcgYSBjb3B5LCB6ZXJvLXRlcm1pbmF0ZSB0aGUKLQkgKiBkZXN0aW5hdGlvbiBzbyB0aGF0IHNzY2FuZiBjYW4gYmUgdXNlZCBvbiBpdCBzYWZlbHkuCi0JICovCi0JdG1wX2J1ZmZlciA9IGttYWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRtcF9idWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKHRtcF9idWZmZXIsIGJ1ZmZlciwgY291bnQpKSB7Ci0JCXJlc3VsdCA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJdG1wX2J1ZmZlcltjb3VudF0gPSAwOwotCQlyZXN1bHQgPSBpdGVtLT53cml0ZV9mdW5jKHRtcF9idWZmZXIsIGNvdW50KTsKLQl9Ci0Ja2ZyZWUodG1wX2J1ZmZlcik7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGludCBnZXRfbGNkKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAl1MzIgaGNpX3Jlc3VsdDsKQEAgLTQyNiwxOSArMzcwLDI0IEBACiAJCXJldHVybiAtRUZBVUxUOwogfQogCi1zdGF0aWMgY2hhciAqcmVhZF9sY2QoY2hhciAqcCkKK3N0YXRpYyBpbnQgbGNkX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJaW50IHZhbHVlID0gZ2V0X2xjZChOVUxMKTsKIAogCWlmICh2YWx1ZSA+PSAwKSB7Ci0JCXAgKz0gc3ByaW50ZihwLCAiYnJpZ2h0bmVzczogICAgICAgICAgICAgICVkXG4iLCB2YWx1ZSk7Ci0JCXAgKz0gc3ByaW50ZihwLCAiYnJpZ2h0bmVzc19sZXZlbHM6ICAgICAgICVkXG4iLAorCQlzZXFfcHJpbnRmKG0sICJicmlnaHRuZXNzOiAgICAgICAgICAgICAgJWRcbiIsIHZhbHVlKTsKKwkJc2VxX3ByaW50ZihtLCAiYnJpZ2h0bmVzc19sZXZlbHM6ICAgICAgICVkXG4iLAogCQkJICAgICBIQ0lfTENEX0JSSUdIVE5FU1NfTEVWRUxTKTsKIAl9IGVsc2UgewogCQlwcmludGsoTVlfRVJSICJFcnJvciByZWFkaW5nIExDRCBicmlnaHRuZXNzXG4iKTsKIAl9CiAKLQlyZXR1cm4gcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsY2RfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBsY2RfcHJvY19zaG93LCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBzZXRfbGNkKGludCB2YWx1ZSkKQEAgLTQ1OCwxMiArNDA3LDIwIEBACiAJcmV0dXJuIHNldF9sY2QoYmQtPnByb3BzLmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9sY2QoY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KQorc3RhdGljIHNzaXplX3QgbGNkX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogeworCWNoYXIgY21kWzQyXTsKKwlzaXplX3QgbGVuOwogCWludCB2YWx1ZTsKIAlpbnQgcmV0OwogCi0JaWYgKHNzY2FuZihidWZmZXIsICIgYnJpZ2h0bmVzcyA6ICVpIiwgJnZhbHVlKSA9PSAxICYmCisJbGVuID0gbWluKGNvdW50LCBzaXplb2YoY21kKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihjbWQsIGJ1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJY21kW2xlbl0gPSAnXDAnOworCisJaWYgKHNzY2FuZihjbWQsICIgYnJpZ2h0bmVzcyA6ICVpIiwgJnZhbHVlKSA9PSAxICYmCiAJICAgIHZhbHVlID49IDAgJiYgdmFsdWUgPCBIQ0lfTENEX0JSSUdIVE5FU1NfTEVWRUxTKSB7CiAJCXJldCA9IHNldF9sY2QodmFsdWUpOwogCQlpZiAocmV0ID09IDApCkBAIC00NzQsNyArNDMxLDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNoYXIgKnJlYWRfdmlkZW8oY2hhciAqcCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxjZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGxjZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbGNkX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgaW50IHZpZGVvX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJdTMyIGhjaV9yZXN1bHQ7CiAJdTMyIHZhbHVlOwpAQCAtNDg0LDE4ICs0NTAsMjUgQEAKIAkJaW50IGlzX2xjZCA9ICh2YWx1ZSAmIEhDSV9WSURFT19PVVRfTENEKSA/IDEgOiAwOwogCQlpbnQgaXNfY3J0ID0gKHZhbHVlICYgSENJX1ZJREVPX09VVF9DUlQpID8gMSA6IDA7CiAJCWludCBpc190diA9ICh2YWx1ZSAmIEhDSV9WSURFT19PVVRfVFYpID8gMSA6IDA7Ci0JCXAgKz0gc3ByaW50ZihwLCAibGNkX291dDogICAgICAgICAgICAgICAgICVkXG4iLCBpc19sY2QpOwotCQlwICs9IHNwcmludGYocCwgImNydF9vdXQ6ICAgICAgICAgICAgICAgICAlZFxuIiwgaXNfY3J0KTsKLQkJcCArPSBzcHJpbnRmKHAsICJ0dl9vdXQ6ICAgICAgICAgICAgICAgICAgJWRcbiIsIGlzX3R2KTsKKwkJc2VxX3ByaW50ZihtLCAibGNkX291dDogICAgICAgICAgICAgICAgICVkXG4iLCBpc19sY2QpOworCQlzZXFfcHJpbnRmKG0sICJjcnRfb3V0OiAgICAgICAgICAgICAgICAgJWRcbiIsIGlzX2NydCk7CisJCXNlcV9wcmludGYobSwgInR2X291dDogICAgICAgICAgICAgICAgICAlZFxuIiwgaXNfdHYpOwogCX0gZWxzZSB7CiAJCXByaW50ayhNWV9FUlIgIkVycm9yIHJlYWRpbmcgdmlkZW8gb3V0IHN0YXR1c1xuIik7CiAJfQogCi0JcmV0dXJuIHA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX3ZpZGVvKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyBpbnQgdmlkZW9fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB2aWRlb19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCB2aWRlb19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJY2hhciAqY21kLCAqYnVmZmVyOwogCWludCB2YWx1ZTsKIAlpbnQgcmVtYWluID0gY291bnQ7CiAJaW50IGxjZF9vdXQgPSAtMTsKQEAgLTUwNCw2ICs0NzcsMTcgQEAKIAl1MzIgaGNpX3Jlc3VsdDsKIAl1MzIgdmlkZW9fb3V0OwogCisJY21kID0ga21hbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoY29weV9mcm9tX3VzZXIoY21kLCBidWYsIGNvdW50KSkgeworCQlrZnJlZShjbWQpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJY21kW2NvdW50XSA9ICdcMCc7CisKKwlidWZmZXIgPSBjbWQ7CisKIAkvKiBzY2FuIGV4cHJlc3Npb24uICBNdWx0aXBsZSBleHByZXNzaW9ucyBtYXkgYmUgZGVsaW1pdGVkIHdpdGggOwogCSAqCiAJICogIE5PVEU6IHRvIGtlZXAgc2Nhbm5pbmcgc2ltcGxlLCBpbnZhbGlkIGZpZWxkcyBhcmUgaWdub3JlZApAQCAtNTIzLDYgKzUwNyw4IEBACiAJCXdoaWxlIChyZW1haW4gJiYgKihidWZmZXIgLSAxKSAhPSAnOycpOwogCX0KIAorCWtmcmVlKGNtZCk7CisKIAloY2lfcmVhZDEoSENJX1ZJREVPX09VVCwgJnZpZGVvX291dCwgJmhjaV9yZXN1bHQpOwogCWlmIChoY2lfcmVzdWx0ID09IEhDSV9TVUNDRVNTKSB7CiAJCXVuc2lnbmVkIGludCBuZXdfdmlkZW9fb3V0ID0gdmlkZW9fb3V0OwpAQCAtNTQzLDI4ICs1MjksNTAgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBjaGFyICpyZWFkX2ZhbihjaGFyICpwKQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlkZW9fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB2aWRlb19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gdmlkZW9fcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgZmFuX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJdTMyIGhjaV9yZXN1bHQ7CiAJdTMyIHZhbHVlOwogCiAJaGNpX3JlYWQxKEhDSV9GQU4sICZ2YWx1ZSwgJmhjaV9yZXN1bHQpOwogCWlmIChoY2lfcmVzdWx0ID09IEhDSV9TVUNDRVNTKSB7Ci0JCXAgKz0gc3ByaW50ZihwLCAicnVubmluZzogICAgICAgICAgICAgICAgICVkXG4iLCAodmFsdWUgPiAwKSk7Ci0JCXAgKz0gc3ByaW50ZihwLCAiZm9yY2Vfb246ICAgICAgICAgICAgICAgICVkXG4iLCBmb3JjZV9mYW4pOworCQlzZXFfcHJpbnRmKG0sICJydW5uaW5nOiAgICAgICAgICAgICAgICAgJWRcbiIsICh2YWx1ZSA+IDApKTsKKwkJc2VxX3ByaW50ZihtLCAiZm9yY2Vfb246ICAgICAgICAgICAgICAgICVkXG4iLCBmb3JjZV9mYW4pOwogCX0gZWxzZSB7CiAJCXByaW50ayhNWV9FUlIgIkVycm9yIHJlYWRpbmcgZmFuIHN0YXR1c1xuIik7CiAJfQogCi0JcmV0dXJuIHA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX2Zhbihjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpCitzdGF0aWMgaW50IGZhbl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGZhbl9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBmYW5fcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJY2hhciBjbWRbNDJdOworCXNpemVfdCBsZW47CiAJaW50IHZhbHVlOwogCXUzMiBoY2lfcmVzdWx0OwogCi0JaWYgKHNzY2FuZihidWZmZXIsICIgZm9yY2Vfb24gOiAlaSIsICZ2YWx1ZSkgPT0gMSAmJgorCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGNtZCkgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoY21kLCBidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWNtZFtsZW5dID0gJ1wwJzsKKworCWlmIChzc2NhbmYoY21kLCAiIGZvcmNlX29uIDogJWkiLCAmdmFsdWUpID09IDEgJiYKIAkgICAgdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAxKSB7CiAJCWhjaV93cml0ZTEoSENJX0ZBTiwgdmFsdWUsICZoY2lfcmVzdWx0KTsKIAkJaWYgKGhjaV9yZXN1bHQgIT0gSENJX1NVQ0NFU1MpCkBAIC01NzgsNyArNTg2LDE2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgY2hhciAqcmVhZF9rZXlzKGNoYXIgKnApCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYW5fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBmYW5fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGZhbl9wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIGludCBrZXlzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJdTMyIGhjaV9yZXN1bHQ7CiAJdTMyIHZhbHVlOwpAQCAtNjAyLDE4ICs2MTksMzAgQEAKIAkJfQogCX0KIAotCXAgKz0gc3ByaW50ZihwLCAiaG90a2V5X3JlYWR5OiAgICAgICAgICAgICVkXG4iLCBrZXlfZXZlbnRfdmFsaWQpOwotCXAgKz0gc3ByaW50ZihwLCAiaG90a2V5OiAgICAgICAgICAgICAgICAgIDB4JTA0eFxuIiwgbGFzdF9rZXlfZXZlbnQpOwotCi0gICAgICBlbmQ6Ci0JcmV0dXJuIHA7CisJc2VxX3ByaW50ZihtLCAiaG90a2V5X3JlYWR5OiAgICAgICAgICAgICVkXG4iLCBrZXlfZXZlbnRfdmFsaWQpOworCXNlcV9wcmludGYobSwgImhvdGtleTogICAgICAgICAgICAgICAgICAweCUwNHhcbiIsIGxhc3Rfa2V5X2V2ZW50KTsKK2VuZDoKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfa2V5cyhjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpCitzdGF0aWMgaW50IGtleXNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBrZXlzX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGtleXNfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWNoYXIgY21kWzQyXTsKKwlzaXplX3QgbGVuOwogCWludCB2YWx1ZTsKIAotCWlmIChzc2NhbmYoYnVmZmVyLCAiIGhvdGtleV9yZWFkeSA6ICVpIiwgJnZhbHVlKSA9PSAxICYmIHZhbHVlID09IDApIHsKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihjbWQpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGNtZCwgYnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwljbWRbbGVuXSA9ICdcMCc7CisKKwlpZiAoc3NjYW5mKGNtZCwgIiBob3RrZXlfcmVhZHkgOiAlaSIsICZ2YWx1ZSkgPT0gMSAmJiB2YWx1ZSA9PSAwKSB7CiAJCWtleV9ldmVudF92YWxpZCA9IDA7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MjIsNTIgKzY1MSw1OCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGNoYXIgKnJlYWRfdmVyc2lvbihjaGFyICpwKQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga2V5c19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGtleXNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGtleXNfcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgdmVyc2lvbl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXAgKz0gc3ByaW50ZihwLCAiZHJpdmVyOiAgICAgICAgICAgICAgICAgICVzXG4iLCBUT1NISUJBX0FDUElfVkVSU0lPTik7Ci0JcCArPSBzcHJpbnRmKHAsICJwcm9jX2ludGVyZmFjZTogICAgICAgICAgJWRcbiIsCi0JCSAgICAgUFJPQ19JTlRFUkZBQ0VfVkVSU0lPTik7Ci0JcmV0dXJuIHA7CisJc2VxX3ByaW50ZihtLCAiZHJpdmVyOiAgICAgICAgICAgICAgICAgICVzXG4iLCBUT1NISUJBX0FDUElfVkVSU0lPTik7CisJc2VxX3ByaW50ZihtLCAicHJvY19pbnRlcmZhY2U6ICAgICAgICAgICVkXG4iLCBQUk9DX0lOVEVSRkFDRV9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2ZXJzaW9uX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdmVyc2lvbl9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2ZXJzaW9uX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdmVyc2lvbl9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qIHByb2MgYW5kIG1vZHVsZSBpbml0CiAgKi8KIAogI2RlZmluZSBQUk9DX1RPU0hJQkEJCSJ0b3NoaWJhIgogCi1zdGF0aWMgUHJvY0l0ZW0gcHJvY19pdGVtc1tdID0gewotCXsibGNkIiwgcmVhZF9sY2QsIHdyaXRlX2xjZH0sCi0JeyJ2aWRlbyIsIHJlYWRfdmlkZW8sIHdyaXRlX3ZpZGVvfSwKLQl7ImZhbiIsIHJlYWRfZmFuLCB3cml0ZV9mYW59LAotCXsia2V5cyIsIHJlYWRfa2V5cywgd3JpdGVfa2V5c30sCi0JeyJ2ZXJzaW9uIiwgcmVhZF92ZXJzaW9uLCBOVUxMfSwKLQl7TlVMTH0KLX07Ci0KIHN0YXRpYyBhY3BpX3N0YXR1cyBfX2luaXQgYWRkX2RldmljZSh2b2lkKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKLQlQcm9jSXRlbSAqaXRlbTsKLQotCWZvciAoaXRlbSA9IHByb2NfaXRlbXM7IGl0ZW0tPm5hbWU7ICsraXRlbSkgewotCQlwcm9jID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShpdGVtLT5uYW1lLAotCQkJCQkgICAgICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQkJCSAgICAgIHRvc2hpYmFfcHJvY19kaXIsCi0JCQkJCSAgICAgIChyZWFkX3Byb2NfdCAqKSBkaXNwYXRjaF9yZWFkLAotCQkJCQkgICAgICBpdGVtKTsKLQkJaWYgKHByb2MgJiYgaXRlbS0+d3JpdGVfZnVuYykKLQkJCXByb2MtPndyaXRlX3Byb2MgPSAod3JpdGVfcHJvY190ICopIGRpc3BhdGNoX3dyaXRlOwotCX0KKwlwcm9jX2NyZWF0ZSgibGNkIiwgU19JUlVHTyB8IFNfSVdVU1IsIHRvc2hpYmFfcHJvY19kaXIsICZsY2RfcHJvY19mb3BzKTsKKwlwcm9jX2NyZWF0ZSgidmlkZW8iLCBTX0lSVUdPIHwgU19JV1VTUiwgdG9zaGliYV9wcm9jX2RpciwgJnZpZGVvX3Byb2NfZm9wcyk7CisJcHJvY19jcmVhdGUoImZhbiIsIFNfSVJVR08gfCBTX0lXVVNSLCB0b3NoaWJhX3Byb2NfZGlyLCAmZmFuX3Byb2NfZm9wcyk7CisJcHJvY19jcmVhdGUoImtleXMiLCBTX0lSVUdPIHwgU19JV1VTUiwgdG9zaGliYV9wcm9jX2RpciwgJmtleXNfcHJvY19mb3BzKTsKKwlwcm9jX2NyZWF0ZSgidmVyc2lvbiIsIFNfSVJVR08sIHRvc2hpYmFfcHJvY19kaXIsICZ2ZXJzaW9uX3Byb2NfZm9wcyk7CiAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKIHN0YXRpYyBhY3BpX3N0YXR1cyByZW1vdmVfZGV2aWNlKHZvaWQpCiB7Ci0JUHJvY0l0ZW0gKml0ZW07Ci0KLQlmb3IgKGl0ZW0gPSBwcm9jX2l0ZW1zOyBpdGVtLT5uYW1lOyArK2l0ZW0pCi0JCXJlbW92ZV9wcm9jX2VudHJ5KGl0ZW0tPm5hbWUsIHRvc2hpYmFfcHJvY19kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJsY2QiLCB0b3NoaWJhX3Byb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgidmlkZW8iLCB0b3NoaWJhX3Byb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZmFuIiwgdG9zaGliYV9wcm9jX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoImtleXMiLCB0b3NoaWJhX3Byb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgidmVyc2lvbiIsIHRvc2hpYmFfcHJvY19kaXIpOwogCXJldHVybiBBRV9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwppbmRleCBlNDI1YTg2Li5iMTA0MzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwpAQCAtNDkyLDggKzQ5Miw3IEBACiAJaWYgKCFndWlkIHx8ICFoYW5kbGVyKQogCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKIAotCWZpbmRfZ3VpZChndWlkLCAmYmxvY2spOwotCWlmICghYmxvY2spCisJaWYgKCFmaW5kX2d1aWQoZ3VpZCwgJmJsb2NrKSkKIAkJcmV0dXJuIEFFX05PVF9FWElTVDsKIAogCWlmIChibG9jay0+aGFuZGxlcikKQEAgLTUyMSw4ICs1MjAsNyBAQAogCWlmICghZ3VpZCkKIAkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKLQlmaW5kX2d1aWQoZ3VpZCwgJmJsb2NrKTsKLQlpZiAoIWJsb2NrKQorCWlmICghZmluZF9ndWlkKGd1aWQsICZibG9jaykpCiAJCXJldHVybiBBRV9OT1RfRVhJU1Q7CiAKIAlpZiAoIWJsb2NrLT5oYW5kbGVyKQpAQCAtNTQwLDggKzUzOCw4IEBACiAvKioKICAqIHdtaV9nZXRfZXZlbnRfZGF0YSAtIEdldCBXTUkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW4gZXZlbnQKICAqCi0gKiBAZXZlbnQgLSBFdmVudCB0byBmaW5kCi0gKiAmb3V0IC0gQnVmZmVyIHRvIGhvbGQgZXZlbnQgZGF0YQorICogQGV2ZW50OiBFdmVudCB0byBmaW5kCisgKiBAb3V0OiBCdWZmZXIgdG8gaG9sZCBldmVudCBkYXRhLiBvdXQtPnBvaW50ZXIgc2hvdWxkIGJlIGZyZWVkIHdpdGgga2ZyZWUoKQogICoKICAqIFJldHVybnMgZXh0cmEgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW4gZXZlbnQgaW4gV01JLgogICovCkBAIC03MTYsNiArNzE0LDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGJvb2wgZ3VpZF9hbHJlYWR5X3BhcnNlZChjb25zdCBjaGFyICpndWlkX3N0cmluZykKK3sKKwlzdHJ1Y3QgZ3VpZF9ibG9jayAqZ2Jsb2NrOworCXN0cnVjdCB3bWlfYmxvY2sgKndibG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJbGlzdF9mb3JfZWFjaChwLCAmd21pX2Jsb2Nrcy5saXN0KSB7CisJCXdibG9jayA9IGxpc3RfZW50cnkocCwgc3RydWN0IHdtaV9ibG9jaywgbGlzdCk7CisJCWdibG9jayA9ICZ3YmxvY2stPmdibG9jazsKKworCQlpZiAoc3RybmNtcChnYmxvY2stPmd1aWQsIGd1aWRfc3RyaW5nLCAxNikgPT0gMCkKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qCiAgKiBQYXJzZSB0aGUgX1dERyBtZXRob2QgZm9yIHRoZSBHVUlEIGRhdGEgYmxvY2tzCiAgKi8KQEAgLTcyNSw2ICs3MzksNyBAQAogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGd1aWRfYmxvY2sgKmdibG9jazsKIAlzdHJ1Y3Qgd21pX2Jsb2NrICp3YmxvY2s7CisJY2hhciBndWlkX3N0cmluZ1szN107CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXUzMiBpLCB0b3RhbDsKIApAQCAtNzQ3LDYgKzc2MiwxOSBAQAogCW1lbWNweShnYmxvY2ssIG9iai0+YnVmZmVyLnBvaW50ZXIsIG9iai0+YnVmZmVyLmxlbmd0aCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykgeworCQkvKgorCQkgIFNvbWUgV01JIGRldmljZXMsIGxpa2UgdGhvc2UgZm9yIG5WaWRpYSBob29rcywgaGF2ZSBhCisJCSAgZHVwbGljYXRlIEdVSUQuIEl0J3Mgbm90IGNsZWFyIHdoYXQgd2Ugc2hvdWxkIGRvIGluIHRoaXMKKwkJICBjYXNlIHlldCwgc28gZm9yIG5vdywgd2UnbGwganVzdCBpZ25vcmUgdGhlIGR1cGxpY2F0ZS4KKwkJICBBbnlvbmUgd2hvIHdhbnRzIHRvIGFkZCBzdXBwb3J0IGZvciB0aGF0IGRldmljZSBjYW4gY29tZQorCQkgIHVwIHdpdGggYSBiZXR0ZXIgd29ya2Fyb3VuZCBmb3IgdGhlIG1lc3MgdGhlbi4KKwkJKi8KKwkJaWYgKGd1aWRfYWxyZWFkeV9wYXJzZWQoZ2Jsb2NrW2ldLmd1aWQpID09IHRydWUpIHsKKwkJCXdtaV9ndG9hKGdibG9ja1tpXS5ndWlkLCBndWlkX3N0cmluZyk7CisJCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiU2tpcHBpbmcgZHVwbGljYXRlIEdVSUQgJXNcbiIsCisJCQkJZ3VpZF9zdHJpbmcpOworCQkJY29udGludWU7CisJCX0KIAkJd2Jsb2NrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtaV9ibG9jayksIEdGUF9LRVJORUwpOwogCQlpZiAoIXdibG9jaykKIAkJCXJldHVybiBBRV9OT19NRU1PUlk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCBmZDEyMzE3Li4xNDhiMWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbGlhc3RyZWUubG9jaywgZmxhZ3MpOwogCQluZXdsY3UgPSBfYWxsb2NhdGVfbGN1KHVpZCk7CiAJCWlmIChJU19FUlIobmV3bGN1KSkKLQkJCXJldHVybiBQVFJfRVJSKGxjdSk7CisJCQlyZXR1cm4gUFRSX0VSUihuZXdsY3UpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWxpYXN0cmVlLmxvY2ssIGZsYWdzKTsKIAkJbGN1ID0gX2ZpbmRfbGN1KHNlcnZlciwgdWlkKTsKIAkJaWYgKCFsY3UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCBmNjRkMGRiOC4uNmUxNDg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKi8KIAotI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZC1kaWFnIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTQ2LDE2ICsxNDYsMTYgQEAKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGRldmljZS0+YmxvY2stPmJwX2Jsb2NrLCAwLCBOVUxMKTsKIAlpZiAocmMgPT0gNCkgewogCQlpZiAoIShkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZKSkgewotCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAotCQkJCSAiVGhlIGFjY2VzcyBtb2RlIG9mIGEgRElBRyBkZXZpY2UgY2hhbmdlZCIKLQkJCQkgIiB0byByZWFkLW9ubHkiKTsKKwkJCXByX3dhcm5pbmcoIiVzOiBUaGUgYWNjZXNzIG1vZGUgb2YgYSBESUFHIGRldmljZSAiCisJCQkJICAgImNoYW5nZWQgdG8gcmVhZC1vbmx5XG4iLAorCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJZGV2aWNlLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7CiAJCX0KIAkJcmMgPSAwOwogCX0KIAlpZiAocmMpCi0JCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRJQUcgRVJQIGZhaWxlZCB3aXRoICIKLQkJCSAgICAicmM9JWRcbiIsIHJjKTsKKwkJcHJfd2FybmluZygiJXM6IERJQUcgRVJQIGZhaWxlZCB3aXRoICIKKwkJCSAgICAicmM9JWRcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKIH0KIAogLyogU3RhcnQgYSBnaXZlbiByZXF1ZXN0IGF0IHRoZSBkZXZpY2UuIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvCkBAIC0zNzEsOCArMzcxLDkgQEAKIAkJcHJpdmF0ZS0+cHRfYmxvY2sgPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJEZXZpY2UgdHlwZSAlZCBpcyBub3Qgc3VwcG9ydGVkICIKLQkJCSAgICAiaW4gRElBRyBtb2RlXG4iLCBwcml2YXRlLT5yZGNfZGF0YS52ZGV2X2NsYXNzKTsKKwkJcHJfd2FybmluZygiJXM6IERldmljZSB0eXBlICVkIGlzIG5vdCBzdXBwb3J0ZWQgIgorCQkJICAgImluIERJQUcgbW9kZVxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKKwkJCSAgIHByaXZhdGUtPnJkY19kYXRhLnZkZXZfY2xhc3MpOwogCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC00MTMsOCArNDE0LDggQEAKIAkJcHJpdmF0ZS0+aW9iLmZsYWdhID0gREFTRF9ESUFHX0ZMQUdBX0RFRkFVTFQ7CiAJCXJjID0gZGlhMjUwKCZwcml2YXRlLT5pb2IsIFJXX0JJTyk7CiAJCWlmIChyYyA9PSAzKSB7Ci0JCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCi0JCQkJIkEgNjQtYml0IERJQUcgY2FsbCBmYWlsZWRcbiIpOworCQkJcHJfd2FybmluZygiJXM6IEEgNjQtYml0IERJQUcgY2FsbCBmYWlsZWRcbiIsCisJCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBvdXRfbGFiZWw7CiAJCX0KQEAgLTQyMyw4ICs0MjQsOSBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChic2l6ZSA+IFBBR0VfU0laRSkgewotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2UiCi0JCQkgIiBvZiBhbiBpbmNvcnJlY3QgZm9ybWF0IChyYz0lZClcbiIsIHJjKTsKKwkJcHJfd2FybmluZygiJXM6IEFjY2Vzc2luZyB0aGUgREFTRCBmYWlsZWQgYmVjYXVzZSBvZiBhbiAiCisJCQkgICAiaW5jb3JyZWN0IGZvcm1hdCAocmM9JWQpXG4iLAorCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgcmMpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0X2xhYmVsOwogCX0KQEAgLTQ0MiwxOCArNDQ0LDE4IEBACiAJCWJsb2NrLT5zMmJfc2hpZnQrKzsKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGJsb2NrLT5icF9ibG9jaywgMCwgTlVMTCk7CiAJaWYgKHJjICYmIChyYyAhPSA0KSkgewotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJESUFHIGluaXRpYWxpemF0aW9uICIKLQkJCSJmYWlsZWQgd2l0aCByYz0lZFxuIiwgcmMpOworCQlwcl93YXJuaW5nKCIlczogRElBRyBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCByYz0lZFxuIiwKKwkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKIAkJcmMgPSAtRUlPOwogCX0gZWxzZSB7CiAJCWlmIChyYyA9PSA0KQogCQkJZGV2aWNlLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7Ci0JCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKLQkJCSAiTmV3IERBU0Qgd2l0aCAlbGQgYnl0ZS9ibG9jaywgdG90YWwgc2l6ZSAlbGQgS0Ilc1xuIiwKLQkJCSAodW5zaWduZWQgbG9uZykgYmxvY2stPmJwX2Jsb2NrLAotCQkJICh1bnNpZ25lZCBsb25nKSAoYmxvY2stPmJsb2NrcyA8PAotCQkJCQkgIGJsb2NrLT5zMmJfc2hpZnQpID4+IDEsCi0JCQkgKHJjID09IDQpID8gIiwgcmVhZC1vbmx5IGRldmljZSIgOiAiIik7CisJCXByX2luZm8oIiVzOiBOZXcgREFTRCB3aXRoICVsZCBieXRlL2Jsb2NrLCB0b3RhbCBzaXplICVsZCAiCisJCQkiS0Ilc1xuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKKwkJCSh1bnNpZ25lZCBsb25nKSBibG9jay0+YnBfYmxvY2ssCisJCQkodW5zaWduZWQgbG9uZykgKGJsb2NrLT5ibG9ja3MgPDwKKwkJCQkJIGJsb2NrLT5zMmJfc2hpZnQpID4+IDEsCisJCQkocmMgPT0gNCkgPyAiLCByZWFkLW9ubHkgZGV2aWNlIiA6ICIiKTsKIAkJcmMgPSAwOwogCX0KIG91dF9sYWJlbDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKaW5kZXggMjhlNDY0OS4uMjQ3YjJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCWlmIChJU19FUlIoaWIpKSB7CiAJCXJhdzMyNzBfcHV0X3ZpZXcoJmZwLT52aWV3KTsKIAkJcmF3MzI3MF9kZWxfdmlldygmZnAtPnZpZXcpOwotCQlyYyA9IFBUUl9FUlIoZnApOworCQlyYyA9IFBUUl9FUlIoaWIpOwogCQlnb3RvIG91dDsKIAl9CiAJZnAtPnJkYnVmID0gaWI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IDM2NTdmZTEuLmNiNzBmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC05LDYgKzksNyBAQAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGVfMzR4eCIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggMGM3MmFhZC4uOTgyMWM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTksNiArOSw3IEBACiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZV8zNTkwIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTM2LDcgKzEzNyw3IEBACiAJCW91dC0+dHlwZV9vbl90YXBlID0gVEFQRTM5MF9LRUtMX1RZUEVfTEFCRUw7CiAJbWVtY3B5KG91dC0+bGFiZWwsIGluLT5sYWJlbCwgc2l6ZW9mKGluLT5sYWJlbCkpOwogCUVCQ0FTQyhvdXQtPmxhYmVsLCBzaXplb2YoaW4tPmxhYmVsKSk7Ci0Jc3Ryc3RyaXAob3V0LT5sYWJlbCk7CisJc3RyaW0ob3V0LT5sYWJlbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGludF90b19leHRfa2VrbF9wYWlyKHN0cnVjdCB0YXBlMzU5Ml9rZWtsX3BhaXIgKmluLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDQ3OTljYzIuLjk2ODE2MTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCmluZGV4IDIzZDc3M2EuLjIxMjVlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCkBAIC0xMCw2ICsxMCw5IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKaW5kZXggZGRjOTE0Y2MuLmIyODY0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKQEAgLTcsNiArNywxMCBAQAogICogQXV0aG9yOiBTdGVmYW4gQmFkZXIgPHNoYmFkZXJAZGUuaWJtLmNvbT4KICAqIEJhc2VkIG9uIHNpbXBsZSBjbGFzcyBkZXZpY2UgY29kZSBieSBHcmVnIEstSAogICovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlICJ0YXBlX2NsYXNzLmgiCiAKIE1PRFVMRV9BVVRIT1IoIlN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwppbmRleCBmNWQ2ODAyLi44MWIwOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwpAQCAtMTIsNiArMTIsOCBAQAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CSAgICAgLy8gZm9yIGtlcm5lbCBwYXJhbWV0ZXJzCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgkgICAgIC8vIGZvciByZXF1ZXN0aW5nIG1vZHVsZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKaW5kZXggZWJkODIwYy4uMGNlYjM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKQEAgLTExLDYgKzExLDkgQEAKICAqIFBST0NGUyBGdW5jdGlvbnMKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwppbmRleCA3NTAzNTRhLi4wM2YwN2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKQEAgLTExLDYgKzExLDkgQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKaW5kZXggZDAzMzQxNC4uZTFiNzAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCkBAIC0xMCw1ICsxMCw1IEBACiBvYmotJChDT05GSUdfQ0hTQ19TQ0gpICs9IGNoc2Nfc2NoLm8KIG9iai0kKENPTkZJR19DQ1dHUk9VUCkgKz0gY2N3Z3JvdXAubwogCi1xZGlvLW9ianMgOj0gcWRpb19tYWluLm8gcWRpb190aGluaW50Lm8gcWRpb19kZWJ1Zy5vIHFkaW9fcGVyZi5vIHFkaW9fc2V0dXAubworcWRpby1vYmpzIDo9IHFkaW9fbWFpbi5vIHFkaW9fdGhpbmludC5vIHFkaW9fZGVidWcubyBxZGlvX3NldHVwLm8KIG9iai0kKENPTkZJR19RRElPKSArPSBxZGlvLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCmluZGV4IDk1MDllMzguLjdhMjhhMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYwpAQCAtNDksNyArNDksNiBAQAogICovCiBzdGF0aWMgdm9pZCBjY3dyZXFfc3RvcChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IHJjKQogewotCXN0cnVjdCBzdWJjaGFubmVsICpzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBjY3dfcmVxdWVzdCAqcmVxID0gJmNkZXYtPnByaXZhdGUtPnJlcTsKIAogCWlmIChyZXEtPmRvbmUpCkBAIC01Nyw3ICs1Niw2IEBACiAJcmVxLT5kb25lID0gMTsKIAljY3dfZGV2aWNlX3NldF90aW1lb3V0KGNkZXYsIDApOwogCW1lbXNldCgmY2Rldi0+cHJpdmF0ZS0+aXJiLCAwLCBzaXplb2Yoc3RydWN0IGlyYikpOwotCXNjaC0+bHBtID0gc2NoLT5zY2hpYi5wbWN3LnBhbTsKIAlpZiAocmMgJiYgcmMgIT0gLUVOT0RFViAmJiByZXEtPmRyYykKIAkJcmMgPSByZXEtPmRyYzsKIAlyZXEtPmNhbGxiYWNrKGNkZXYsIHJlcS0+ZGF0YSwgcmMpOwpAQCAtODAsNyArNzgsNiBAQAogCQkJY29udGludWU7CiAJCX0KIAkJLyogUGVyZm9ybSBzdGFydCBmdW5jdGlvbi4gKi8KLQkJc2NoLT5scG0gPSAweGZmOwogCQltZW1zZXQoJmNkZXYtPnByaXZhdGUtPmlyYiwgMCwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKIAkJcmMgPSBjaW9fc3RhcnQoc2NoLCBjcCwgKHU4KSByZXEtPm1hc2spOwogCQlpZiAocmMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggNzM5MDFjOS4uYTZjN2Q1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xNTE5LDYgKzE1MTksNyBAQAogCXNjaC0+ZHJpdmVyID0gJmlvX3N1YmNoYW5uZWxfZHJpdmVyOwogCS8qIEluaXRpYWxpemUgdGhlIGNjd19kZXZpY2Ugc3RydWN0dXJlLiAqLwogCWNkZXYtPmRldi5wYXJlbnQ9ICZzY2gtPmRldjsKKwlzY2hfc2V0X2NkZXYoc2NoLCBjZGV2KTsKIAlpb19zdWJjaGFubmVsX3JlY29nKGNkZXYsIHNjaCk7CiAJLyogTm93IHdhaXQgZm9yIHRoZSBhc3luYy4gcmVjb2duaXRpb24gdG8gY29tZSB0byBhbiBlbmQuICovCiAJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYwppbmRleCBhYWQxODhlLi42ZmFjYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl1OCBmbjsKIAogCS8qIFVzZSBuZXh0IGF2YWlsYWJsZSBwYXRoIHRoYXQgaXMgbm90IGFscmVhZHkgaW4gY29ycmVjdCBzdGF0ZS4gKi8KLQlyZXEtPmxwbSA9IGxwbV9hZGp1c3QocmVxLT5scG0sIHNjaC0+c2NoaWIucG1jdy5wYW0gJiB+c2NoLT52cG0pOworCXJlcS0+bHBtID0gbHBtX2FkanVzdChyZXEtPmxwbSwgY2Rldi0+cHJpdmF0ZS0+cGdpZF90b2RvX21hc2spOwogCWlmICghcmVxLT5scG0pCiAJCWdvdG8gb3V0X25vcGF0aDsKIAkvKiBDaGFubmVsIHByb2dyYW0gc2V0dXAuICovCkBAIC0yNTQsMTUgKzI1NCwxNSBAQAogCSpwID0gZmlyc3Q7CiB9CiAKLXN0YXRpYyB1OCBwZ2lkX3RvX3ZwbShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3N0YXRpYyB1OCBwZ2lkX3RvX2RvbmVwbShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcGdpZCAqcGdpZDsKIAlpbnQgaTsKIAlpbnQgbHBtOwotCXU4IHZwbSA9IDA7CisJdTggZG9uZXBtID0gMDsKIAotCS8qIFNldCBWUE0gYml0cyBmb3IgcGF0aHMgd2hpY2ggYXJlIGFscmVhZHkgaW4gdGhlIHRhcmdldCBzdGF0ZS4gKi8KKwkvKiBTZXQgYml0cyBmb3IgcGF0aHMgd2hpY2ggYXJlIGFscmVhZHkgaW4gdGhlIHRhcmdldCBzdGF0ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWxwbSA9IDB4ODAgPj4gaTsKIAkJaWYgKChjZGV2LT5wcml2YXRlLT5wZ2lkX3ZhbGlkX21hc2sgJiBscG0pID09IDApCkBAIC0yODIsMTAgKzI4MiwxMCBAQAogCQkJaWYgKHBnaWQtPmluZi5wcy5zdGF0ZTMgIT0gU05JRF9TVEFURTNfU0lOR0xFX1BBVEgpCiAJCQkJY29udGludWU7CiAJCX0KLQkJdnBtIHw9IGxwbTsKKwkJZG9uZXBtIHw9IGxwbTsKIAl9CiAKLQlyZXR1cm4gdnBtOworCXJldHVybiBkb25lcG07CiB9CiAKIHN0YXRpYyB2b2lkIHBnaWRfZmlsbChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IHBnaWQgKnBnaWQpCkBAIC0zMDcsNiArMzA3LDcgQEAKIAlpbnQgbWlzbWF0Y2ggPSAwOwogCWludCByZXNlcnZlZCA9IDA7CiAJaW50IHJlc2V0ID0gMDsKKwl1OCBkb25lcG07CiAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtMzE2LDE4ICszMTcsMjAgQEAKIAllbHNlIGlmIChtaXNtYXRjaCkKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAllbHNlIHsKLQkJc2NoLT52cG0gPSBwZ2lkX3RvX3ZwbShjZGV2KTsKKwkJZG9uZXBtID0gcGdpZF90b19kb25lcG0oY2Rldik7CisJCXNjaC0+dnBtID0gZG9uZXBtICYgc2NoLT5vcG07CisJCWNkZXYtPnByaXZhdGUtPnBnaWRfdG9kb19tYXNrICY9IH5kb25lcG07CiAJCXBnaWRfZmlsbChjZGV2LCBwZ2lkKTsKIAl9CiBvdXQ6CiAJQ0lPX01TR19FVkVOVCgyLCAic25pZDogZGV2aWNlIDAuJXguJTA0eDogcmM9JWQgcHZtPSUwMnggdnBtPSUwMnggIgotCQkgICAgICAibWlzbT0lZCByc3ZkPSVkIHJlc2V0PSVkXG4iLCBpZC0+c3NpZCwgaWQtPmRldm5vLCByYywKLQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+cGdpZF92YWxpZF9tYXNrLCBzY2gtPnZwbSwgbWlzbWF0Y2gsCi0JCSAgICAgIHJlc2VydmVkLCByZXNldCk7CisJCSAgICAgICJ0b2RvPSUwMnggbWlzbT0lZCByc3ZkPSVkIHJlc2V0PSVkXG4iLCBpZC0+c3NpZCwKKwkJICAgICAgaWQtPmRldm5vLCByYywgY2Rldi0+cHJpdmF0ZS0+cGdpZF92YWxpZF9tYXNrLCBzY2gtPnZwbSwKKwkJICAgICAgY2Rldi0+cHJpdmF0ZS0+cGdpZF90b2RvX21hc2ssIG1pc21hdGNoLCByZXNlcnZlZCwgcmVzZXQpOwogCXN3aXRjaCAocmMpIHsKIAljYXNlIDA6CiAJCS8qIEFueXRoaW5nIGxlZnQgdG8gZG8/ICovCi0JCWlmIChzY2gtPnZwbSA9PSBzY2gtPnNjaGliLnBtY3cucGFtKSB7CisJCWlmIChjZGV2LT5wcml2YXRlLT5wZ2lkX3RvZG9fbWFzayA9PSAwKSB7CiAJCQl2ZXJpZnlfZG9uZShjZGV2LCBzY2gtPnZwbSA9PSAwID8gLUVBQ0NFUyA6IDApOwogCQkJcmV0dXJuOwogCQl9CkBAIC00MTEsNiArNDE0LDcgQEAKIAlzdHJ1Y3QgY2N3X2Rldl9pZCAqZGV2aWQgPSAmY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkOwogCiAJc2NoLT52cG0gPSAwOworCXNjaC0+bHBtID0gc2NoLT5zY2hpYi5wbWN3LnBhbTsKIAkvKiBJbml0aWFsaXplIHJlcXVlc3QgZGF0YS4gKi8KIAltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwogCXJlcS0+dGltZW91dAk9IFBHSURfVElNRU9VVDsKQEAgLTQ0MiwxMSArNDQ2LDE0IEBACiAgKi8KIHZvaWQgY2N3X2RldmljZV92ZXJpZnlfc3RhcnQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisKIAlDSU9fVFJBQ0VfRVZFTlQoNCwgInZyZnkiKTsKIAlDSU9fSEVYX0VWRU5UKDQsICZjZGV2LT5wcml2YXRlLT5kZXZfaWQsIHNpemVvZihjZGV2LT5wcml2YXRlLT5kZXZfaWQpKTsKIAkvKiBJbml0aWFsaXplIFBHSUQgZGF0YS4gKi8KIAltZW1zZXQoY2Rldi0+cHJpdmF0ZS0+cGdpZCwgMCwgc2l6ZW9mKGNkZXYtPnByaXZhdGUtPnBnaWQpKTsKIAljZGV2LT5wcml2YXRlLT5wZ2lkX3ZhbGlkX21hc2sgPSAwOworCWNkZXYtPnByaXZhdGUtPnBnaWRfdG9kb19tYXNrID0gc2NoLT5zY2hpYi5wbWN3LnBhbTsKIAkvKgogCSAqIEluaXRpYWxpemUgcGF0aGdyb3VwIGFuZCBtdWx0aXBhdGggc3RhdGUgd2l0aCB0YXJnZXQgdmFsdWVzLgogCSAqIFRoZXkgbWF5IGNoYW5nZSBpbiB0aGUgY291cnNlIG9mIHBhdGggdmVyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9mY3guYyBiL2RyaXZlcnMvczM5MC9jaW8vZmN4LmMKaW5kZXggNjE2NzdkZi4uY2E1ZTliYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9mY3guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2ZjeC5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkvKiBBZGQgdGNhdCB0byB0Y2NiLiAqLwogCXRjY2IgPSB0Y3dfZ2V0X3RjY2IodGN3KTsKIAl0Y2F0ID0gKHN0cnVjdCB0Y2NiX3RjYXQgKikgJnRjY2ItPnRjYVt0Y2Ffc2l6ZSh0Y2NiKV07Ci0JbWVtc2V0KHRjYXQsIDAsIHNpemVvZih0Y2F0KSk7CisJbWVtc2V0KHRjYXQsIDAsIHNpemVvZigqdGNhdCkpOwogCS8qIENhbGN1bGF0ZSB0Y3cgaW5wdXQvb3V0cHV0IGNvdW50IGFuZCB0Y2F0IHRyYW5zcG9ydCBjb3VudC4gKi8KIAljb3VudCA9IGNhbGNfZGN3X2NvdW50KHRjY2IpOwogCWlmICh0Y3ctPncgJiYgKHRjdy0+ZmxhZ3MgJiBUQ1dfRkxBR1NfT1VUUFVUX1RJREEpKQpAQCAtMjY5LDcgKzI2OSw3IEBACiAgKi8KIHZvaWQgdHNiX2luaXQoc3RydWN0IHRzYiAqdHNiKQogewotCW1lbXNldCh0c2IsIDAsIHNpemVvZih0c2IpKTsKKwltZW1zZXQodHNiLCAwLCBzaXplb2YoKnRzYikpOwogfQogRVhQT1JUX1NZTUJPTCh0c2JfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vaW9fc2NoLmggYi9kcml2ZXJzL3MzOTAvY2lvL2lvX3NjaC5oCmluZGV4IGQ3MmFlNGMuLmI5Y2U3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vaW9fc2NoLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9pb19zY2guaApAQCAtMTUwLDYgKzE1MCw3IEBACiAJc3RydWN0IGNjd19yZXF1ZXN0IHJlcTsJCS8qIGludGVybmFsIEkvTyByZXF1ZXN0ICovCiAJaW50IGlyZXRyeTsKIAl1OCBwZ2lkX3ZhbGlkX21hc2s7CQkvKiBtYXNrIG9mIHZhbGlkIFBHSURzICovCisJdTggcGdpZF90b2RvX21hc2s7CQkvKiBtYXNrIG9mIFBHSURzIHRvIGJlIGFkanVzdGVkICovCiAJc3RydWN0IHsKIAkJdW5zaWduZWQgaW50IGZhc3Q6MTsJLyogcG9zdCB3aXRoICJjaGFubmVsIGVuZCIgKi8KIAkJdW5zaWduZWQgaW50IHJlcGFsbDoxOwkvKiByZXBvcnQgZXZlcnkgaW50ZXJydXB0IHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCBmZjc3NDhhLi40NGYyZjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMTgyLDYgKzE4MiwzNCBAQAogCXUzMjozMjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgcWRpb19kZXZfcGVyZl9zdGF0IHsKKwl1bnNpZ25lZCBpbnQgYWRhcHRlcl9pbnQ7CisJdW5zaWduZWQgaW50IHFkaW9faW50OworCXVuc2lnbmVkIGludCBwY2lfcmVxdWVzdF9pbnQ7CisKKwl1bnNpZ25lZCBpbnQgdGFza2xldF9pbmJvdW5kOworCXVuc2lnbmVkIGludCB0YXNrbGV0X2luYm91bmRfcmVzY2hlZDsKKwl1bnNpZ25lZCBpbnQgdGFza2xldF9pbmJvdW5kX3Jlc2NoZWQyOworCXVuc2lnbmVkIGludCB0YXNrbGV0X291dGJvdW5kOworCisJdW5zaWduZWQgaW50IHNpZ2FfcmVhZDsKKwl1bnNpZ25lZCBpbnQgc2lnYV93cml0ZTsKKwl1bnNpZ25lZCBpbnQgc2lnYV9zeW5jOworCisJdW5zaWduZWQgaW50IGluYm91bmRfY2FsbDsKKwl1bnNpZ25lZCBpbnQgaW5ib3VuZF9oYW5kbGVyOworCXVuc2lnbmVkIGludCBzdG9wX3BvbGxpbmc7CisJdW5zaWduZWQgaW50IGluYm91bmRfcXVldWVfZnVsbDsKKwl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfY2FsbDsKKwl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfaGFuZGxlcjsKKwl1bnNpZ25lZCBpbnQgZmFzdF9yZXF1ZXVlOworCXVuc2lnbmVkIGludCB0YXJnZXRfZnVsbDsKKwl1bnNpZ25lZCBpbnQgZXFiczsKKwl1bnNpZ25lZCBpbnQgZXFic19wYXJ0aWFsOworCXVuc2lnbmVkIGludCBzcWJzOworCXVuc2lnbmVkIGludCBzcWJzX3BhcnRpYWw7Cit9OworCiBzdHJ1Y3QgcWRpb19pbnB1dF9xIHsKIAkvKiBpbnB1dCBidWZmZXIgYWNrbm93bGVkZ2VtZW50IGZsYWcgKi8KIAlpbnQgcG9sbGluZzsKQEAgLTI2OSw2ICsyOTcsNyBAQAogCXUzMiAqZHNjaTsJCS8qIGFkZHJlc3Mgb2YgZGV2aWNlIHN0YXRlIGNoYW5nZSBpbmRpY2F0b3IgKi8KIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RldjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BlcmY7CiAKIAl1bnNpZ25lZCBsb25nIGludF9wYXJtOwogCXN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkOwpAQCAtMjg2LDkgKzMxNSwxMCBAQAogCXN0cnVjdCBjaXcgYXF1ZXVlOwogCiAJc3RydWN0IHFkaW9fc3NxZF9kZXNjIHNzcWRfZGVzYzsKLQogCXZvaWQgKCpvcmlnX2hhbmRsZXIpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgaXJiICopOwogCisJc3RydWN0IHFkaW9fZGV2X3BlcmZfc3RhdCBwZXJmX3N0YXQ7CisJaW50IHBlcmZfc3RhdF9lbmFibGVkOwogCS8qCiAJICogV2FybmluZzogTGVhdmUgdGhlc2UgbWVtYmVycyB0b2dldGhlciBhdCB0aGUgZW5kIHNvIHRoZXkgd29uJ3QgYmUKIAkgKiBjbGVhcmVkIGluIHFkaW9fc2V0dXBfaXJxLgpAQCAtMzExLDYgKzM0MSwxMCBAQAogCShpcnEtPnFpYi5xZm10ID09IFFESU9fSVFESU9fUUZNVCB8fCBcCiAJIGNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5haWZfb3NhKQogCisjZGVmaW5lIHFwZXJmKHFkZXYsYXR0cikJcWRldi0+cGVyZl9zdGF0LmF0dHIKKyNkZWZpbmUgcXBlcmZfaW5jKHEsYXR0cikJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKSBcCisJCQkJCXEtPmlycV9wdHItPnBlcmZfc3RhdC5hdHRyKysKKwogLyogdGhlIGhpZ2hlc3QgaXFkaW8gcXVldWUgaXMgdXNlZCBmb3IgbXVsdGljYXN0ICovCiBzdGF0aWMgaW5saW5lIGludCBtdWx0aWNhc3Rfb3V0Ym91bmQoc3RydWN0IHFkaW9fcSAqcSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggNzY3Njk5Ny4uZjQ5NzYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTU1LDEzICs1NSwxMSBAQAogCWlmICghcSkKIAkJcmV0dXJuIDA7CiAKLQlzZXFfcHJpbnRmKG0sICJkZXZpY2Ugc3RhdGUgaW5kaWNhdG9yOiAlZFxuIiwgKih1MzIgKilxLT5pcnFfcHRyLT5kc2NpKTsKLQlzZXFfcHJpbnRmKG0sICJucl91c2VkOiAlZFxuIiwgYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSk7Ci0Jc2VxX3ByaW50ZihtLCAiZnRjOiAlZFxuIiwgcS0+Zmlyc3RfdG9fY2hlY2spOwotCXNlcV9wcmludGYobSwgImxhc3RfbW92ZTogJWRcbiIsIHEtPmxhc3RfbW92ZSk7Ci0Jc2VxX3ByaW50ZihtLCAicG9sbGluZzogJWRcbiIsIHEtPnUuaW4ucG9sbGluZyk7Ci0Jc2VxX3ByaW50ZihtLCAiYWNrIHN0YXJ0OiAlZFxuIiwgcS0+dS5pbi5hY2tfc3RhcnQpOwotCXNlcV9wcmludGYobSwgImFjayBjb3VudDogJWRcbiIsIHEtPnUuaW4uYWNrX2NvdW50KTsKKwlzZXFfcHJpbnRmKG0sICJEU0NJOiAlZCAgIG5yX3VzZWQ6ICVkXG4iLAorCQkgICAqKHUzMiAqKXEtPmlycV9wdHItPmRzY2ksIGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpOworCXNlcV9wcmludGYobSwgImZ0YzogJWQgIGxhc3RfbW92ZTogJWRcbiIsIHEtPmZpcnN0X3RvX2NoZWNrLCBxLT5sYXN0X21vdmUpOworCXNlcV9wcmludGYobSwgInBvbGxpbmc6ICVkICBhY2sgc3RhcnQ6ICVkICBhY2sgY291bnQ6ICVkXG4iLAorCQkgICBxLT51LmluLnBvbGxpbmcsIHEtPnUuaW4uYWNrX3N0YXJ0LCBxLT51LmluLmFja19jb3VudCk7CiAJc2VxX3ByaW50ZihtLCAic2xzYiBidWZmZXIgc3RhdGVzOlxuIik7CiAJc2VxX3ByaW50ZihtLCAifDAgICAgICB8OCAgICAgIHwxNiAgICAgfDI0ICAgICB8MzIgICAgIHw0MCAgICAgfDQ4ICAgICB8NTYgIDYzfFxuIik7CiAKQEAgLTExMCw3ICsxMDgsNiBAQAogCiAJaWYgKCFxKQogCQlyZXR1cm4gMDsKLQogCWlmIChxLT5pc19pbnB1dF9xKQogCQl4Y2hnKHEtPmlycV9wdHItPmRzY2ksIDEpOwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKQEAgLTEzNCw2ICsxMzEsOTggQEAKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAorc3RhdGljIGNoYXIgKnFwZXJmX25hbWVzW10gPSB7CisJIkFzc3VtZWQgYWRhcHRlciBpbnRlcnJ1cHRzIiwKKwkiUURJTyBpbnRlcnJ1cHRzIiwKKwkiUmVxdWVzdGVkIFBDSXMiLAorCSJJbmJvdW5kIHRhc2tsZXQgcnVucyIsCisJIkluYm91bmQgdGFza2xldCByZXNjaGVkIiwKKwkiSW5ib3VuZCB0YXNrbGV0IHJlc2NoZWQyIiwKKwkiT3V0Ym91bmQgdGFza2xldCBydW5zIiwKKwkiU0lHQSByZWFkIiwKKwkiU0lHQSB3cml0ZSIsCisJIlNJR0Egc3luYyIsCisJIkluYm91bmQgY2FsbHMiLAorCSJJbmJvdW5kIGhhbmRsZXIiLAorCSJJbmJvdW5kIHN0b3BfcG9sbGluZyIsCisJIkluYm91bmQgcXVldWUgZnVsbCIsCisJIk91dGJvdW5kIGNhbGxzIiwKKwkiT3V0Ym91bmQgaGFuZGxlciIsCisJIk91dGJvdW5kIGZhc3RfcmVxdWV1ZSIsCisJIk91dGJvdW5kIHRhcmdldF9mdWxsIiwKKwkiUUVCU00gZXFicyIsCisJIlFFQlNNIGVxYnMgcGFydGlhbCIsCisJIlFFQlNNIHNxYnMiLAorCSJRRUJTTSBzcWJzIHBhcnRpYWwiCit9OworCitzdGF0aWMgaW50IHFwZXJmX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciA9IG0tPnByaXZhdGU7CisJdW5zaWduZWQgaW50ICpzdGF0OworCWludCBpOworCisJaWYgKCFpcnFfcHRyKQorCQlyZXR1cm4gMDsKKwlpZiAoIWlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKSB7CisJCXNlcV9wcmludGYobSwgImRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXN0YXQgPSAodW5zaWduZWQgaW50ICopJmlycV9wdHItPnBlcmZfc3RhdDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHFwZXJmX25hbWVzKTsgaSsrKQorCQlzZXFfcHJpbnRmKG0sICIlMjZzOlx0JXVcbiIsCisJCQkgICBxcGVyZl9uYW1lc1tpXSwgKihzdGF0ICsgaSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBxcGVyZl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHFkaW9faXJxICppcnFfcHRyID0gc2VxLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWNoYXIgYnVmWzhdOworCWludCByZXQ7CisKKwlpZiAoIWlycV9wdHIpCisJCXJldHVybiAwOworCWlmIChjb3VudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2NvdW50XSA9IDA7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCQlpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCA9IDA7CisJCW1lbXNldCgmaXJxX3B0ci0+cGVyZl9zdGF0LCAwLCBzaXplb2YoaXJxX3B0ci0+cGVyZl9zdGF0KSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQgPSAxOworCQlicmVhazsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHFwZXJmX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBxcGVyZl9zaG93LAorCQkJICAgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19wZXJmX2ZvcHMgPSB7CisJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCS5vcGVuCSA9IHFwZXJmX3NlcV9vcGVuLAorCS5yZWFkCSA9IHNlcV9yZWFkLAorCS53cml0ZQkgPSBxcGVyZl9zZXFfd3JpdGUsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CiBzdGF0aWMgdm9pZCBzZXR1cF9kZWJ1Z2ZzX2VudHJ5KHN0cnVjdCBxZGlvX3EgKnEsIHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWNoYXIgbmFtZVtRRElPX0RFQlVHRlNfTkFNRV9MRU5dOwpAQCAtMTU2LDYgKzI0NSwxNCBAQAogCQkJCQkJICBkZWJ1Z2ZzX3Jvb3QpOwogCWlmIChJU19FUlIoaXJxX3B0ci0+ZGVidWdmc19kZXYpKQogCQlpcnFfcHRyLT5kZWJ1Z2ZzX2RldiA9IE5VTEw7CisKKwlpcnFfcHRyLT5kZWJ1Z2ZzX3BlcmYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0aXN0aWNzIiwKKwkJCQlTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJaXJxX3B0ci0+ZGVidWdmc19kZXYsIGlycV9wdHIsCisJCQkJJmRlYnVnZnNfcGVyZl9mb3BzKTsKKwlpZiAoSVNfRVJSKGlycV9wdHItPmRlYnVnZnNfcGVyZikpCisJCWlycV9wdHItPmRlYnVnZnNfcGVyZiA9IE5VTEw7CisKIAlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQogCQlzZXR1cF9kZWJ1Z2ZzX2VudHJ5KHEsIGNkZXYpOwogCWZvcl9lYWNoX291dHB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQpAQCAtMTcxLDYgKzI2OCw3IEBACiAJCWRlYnVnZnNfcmVtb3ZlKHEtPmRlYnVnZnNfcSk7CiAJZm9yX2VhY2hfb3V0cHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCiAJCWRlYnVnZnNfcmVtb3ZlKHEtPmRlYnVnZnNfcSk7CisJZGVidWdmc19yZW1vdmUoaXJxX3B0ci0+ZGVidWdmc19wZXJmKTsKIAlkZWJ1Z2ZzX3JlbW92ZShpcnFfcHRyLT5kZWJ1Z2ZzX2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDRiZTZlODQuLjk5OWZlODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgImRldmljZS5oIgogI2luY2x1ZGUgInFkaW8uaCIKICNpbmNsdWRlICJxZGlvX2RlYnVnLmgiCi0jaW5jbHVkZSAicWRpb19wZXJmLmgiCiAKIE1PRFVMRV9BVVRIT1IoIlV0eiBCYWNoZXIgPHV0ei5iYWNoZXJAZGUuaWJtLmNvbT4sIlwKIAkiSmFuIEdsYXViZXIgPGphbmdAbGludXgudm5ldC5pYm0uY29tPiIpOwpAQCAtMTI2LDcgKzEyNSw3IEBACiAJaW50IHJjOwogCiAJQlVHX09OKCFxLT5pcnFfcHRyLT5zY2hfdG9rZW4pOwotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z19lcWJzX2FsbCk7CisJcXBlcmZfaW5jKHEsIGVxYnMpOwogCiAJaWYgKCFxLT5pc19pbnB1dF9xKQogCQluciArPSBxLT5pcnFfcHRyLT5ucl9pbnB1dF9xczsKQEAgLTEzOSw3ICsxMzgsNyBAQAogCSAqIGJ1ZmZlcnMgbGF0ZXIuCiAJICovCiAJaWYgKChjY3EgPT0gOTYpICYmIChjb3VudCAhPSB0bXBfY291bnQpKSB7Ci0JCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z19lcWJzX2luY29tcGxldGUpOworCQlxcGVyZl9pbmMocSwgZXFic19wYXJ0aWFsKTsKIAkJcmV0dXJuIChjb3VudCAtIHRtcF9jb3VudCk7CiAJfQogCkBAIC0xODIsNyArMTgxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlCVUdfT04oIXEtPmlycV9wdHItPnNjaF90b2tlbik7Ci0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmRlYnVnX3NxYnNfYWxsKTsKKwlxcGVyZl9pbmMocSwgc3Ficyk7CiAKIAlpZiAoIXEtPmlzX2lucHV0X3EpCiAJCW5yICs9IHEtPmlycV9wdHItPm5yX2lucHV0X3FzOwpAQCAtMTkxLDcgKzE5MCw3IEBACiAJcmMgPSBxZGlvX2NoZWNrX2NjcShxLCBjY3EpOwogCWlmIChyYyA9PSAxKSB7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJTUUJTIGFnYWluOiUyZCIsIGNjcSk7Ci0JCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z19zcWJzX2luY29tcGxldGUpOworCQlxcGVyZl9pbmMocSwgc3Fic19wYXJ0aWFsKTsKIAkJZ290byBhZ2FpbjsKIAl9CiAJaWYgKHJjIDwgMCkgewpAQCAtMjg1LDcgKzI4NCw3IEBACiAJCXJldHVybiAwOwogCiAJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtczolMWQiLCBxLT5ucik7Ci0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnNpZ2Ffc3luYyk7CisJcXBlcmZfaW5jKHEsIHNpZ2Ffc3luYyk7CiAKIAljYyA9IGRvX3NpZ2Ffc3luYyhxLT5pcnFfcHRyLT5zY2hpZCwgb3V0cHV0LCBpbnB1dCk7CiAJaWYgKGNjKQpAQCAtMzUwLDcgKzM0OSw3IEBACiAJaW50IGNjOwogCiAJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtcjolMWQiLCBxLT5ucik7Ci0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnNpZ2FfaW4pOworCXFwZXJmX2luYyhxLCBzaWdhX3JlYWQpOwogCiAJY2MgPSBkb19zaWdhX2lucHV0KHEtPmlycV9wdHItPnNjaGlkLCBxLT5tYXNrKTsKIAlpZiAoY2MpCkBAIC0zODIsNyArMzgxLDcgQEAKIAkJcmV0dXJuOwogCiAJcS0+dS5pbi5wb2xsaW5nID0gMDsKLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZGVidWdfc3RvcF9wb2xsaW5nKTsKKwlxcGVyZl9pbmMocSwgc3RvcF9wb2xsaW5nKTsKIAogCS8qIHNob3cgdGhlIGNhcmQgdGhhdCB3ZSBhcmUgbm90IHBvbGxpbmcgYW55bW9yZSAqLwogCWlmIChpc19xZWJzbShxKSkgewpAQCAtNDAwLDcgKzM5OSw3IEBACiAJLyogc3BlY2lhbCBoYW5kbGluZyBmb3Igbm8gdGFyZ2V0IGJ1ZmZlciBlbXB0eSAqLwogCWlmICgoIXEtPmlzX2lucHV0X3EgJiYKIAkgICAgKHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpID09IDB4MTApKSB7Ci0JCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5vdXRib3VuZF90YXJnZXRfZnVsbCk7CisJCXFwZXJmX2luYyhxLCB0YXJnZXRfZnVsbCk7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJPVVRGVUxMIEZUQzolMDJ4IiwKIAkJCSAgICAgIHEtPmZpcnN0X3RvX2NoZWNrKTsKIAkJcmV0dXJuOwpAQCAtNDg2LDcgKzQ4NSw4IEBACiAJY2FzZSBTTFNCX1BfSU5QVVRfUFJJTUVEOgogCQlpbmJvdW5kX3ByaW1lZChxLCBjb3VudCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwotCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOworCQlpZiAoYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKSA9PSAwKQorCQkJcXBlcmZfaW5jKHEsIGluYm91bmRfcXVldWVfZnVsbCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX0lOUFVUX0VSUk9SOgogCQlhbm5vdW5jZV9idWZmZXJfZXJyb3IocSwgY291bnQpOwpAQCAtNTY2LDkgKzU2NiwxMCBAQAogCWNvdW50ID0gc3ViX2J1ZihlbmQsIHN0YXJ0KTsKIAogCWlmIChxLT5pc19pbnB1dF9xKSB7Ci0JCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5pbmJvdW5kX2hhbmRsZXIpOworCQlxcGVyZl9pbmMocSwgaW5ib3VuZF9oYW5kbGVyKTsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpaCBzOiUwMnggYzolMDJ4Iiwgc3RhcnQsIGNvdW50KTsKIAl9IGVsc2UKKwkJcXBlcmZfaW5jKHEsIG91dGJvdW5kX2hhbmRsZXIpOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia29oOiBzOiUwMnggYzolMDJ4IiwKIAkJCSAgICAgIHN0YXJ0LCBjb3VudCk7CiAKQEAgLTU4MiwyNCArNTgzLDI4IEBACiAKIHN0YXRpYyB2b2lkIF9fcWRpb19pbmJvdW5kX3Byb2Nlc3Npbmcoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGFza2xldF9pbmJvdW5kKTsKKwlxcGVyZl9pbmMocSwgdGFza2xldF9pbmJvdW5kKTsKIGFnYWluOgogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCiAJCXJldHVybjsKIAogCXFkaW9fa2lja19oYW5kbGVyKHEpOwogCi0JaWYgKCFxZGlvX2luYm91bmRfcV9kb25lKHEpKQorCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewogCQkvKiBtZWFucyBwb2xsIHRpbWUgaXMgbm90IHlldCBvdmVyICovCisJCXFwZXJmX2luYyhxLCB0YXNrbGV0X2luYm91bmRfcmVzY2hlZCk7CiAJCWdvdG8gYWdhaW47CisJfQogCiAJcWRpb19zdG9wX3BvbGxpbmcocSk7CiAJLyoKIAkgKiBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIHRvIG5vdCBsb3NlIGluaXRpYXRpdmUgYWZ0ZXIKIAkgKiByZXNldHRpbmcgdGhlIEFDSyBzdGF0ZS4KIAkgKi8KLQlpZiAoIXFkaW9faW5ib3VuZF9xX2RvbmUocSkpCisJaWYgKCFxZGlvX2luYm91bmRfcV9kb25lKHEpKSB7CisJCXFwZXJmX2luYyhxLCB0YXNrbGV0X2luYm91bmRfcmVzY2hlZDIpOwogCQlnb3RvIGFnYWluOworCX0KIH0KIAogdm9pZCBxZGlvX2luYm91bmRfcHJvY2Vzc2luZyh1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC02ODcsNyArNjkyLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13OiUxZCIsIHEtPm5yKTsKLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuc2lnYV9vdXQpOworCXFwZXJmX2luYyhxLCBzaWdhX3dyaXRlKTsKIAogCWNjID0gcWRpb19zaWdhX291dHB1dChxLCAmYnVzeV9iaXQpOwogCXN3aXRjaCAoY2MpIHsKQEAgLTcxMCw3ICs3MTUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX3FkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZyhzdHJ1Y3QgcWRpb19xICpxKQogewotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50YXNrbGV0X291dGJvdW5kKTsKKwlxcGVyZl9pbmMocSwgdGFza2xldF9vdXRib3VuZCk7CiAJQlVHX09OKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkgPCAwKTsKIAogCWlmIChxZGlvX291dGJvdW5kX3FfbW92ZWQocSkpCkBAIC03MzgsMTIgKzc0Myw5IEBACiAJICovCiAJaWYgKHFkaW9fb3V0Ym91bmRfcV9kb25lKHEpKQogCQlkZWxfdGltZXIoJnEtPnUub3V0LnRpbWVyKTsKLQllbHNlIHsKLQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZxLT51Lm91dC50aW1lcikpIHsKKwllbHNlCisJCWlmICghdGltZXJfcGVuZGluZygmcS0+dS5vdXQudGltZXIpKQogCQkJbW9kX3RpbWVyKCZxLT51Lm91dC50aW1lciwgamlmZmllcyArIDEwICogSFopOwotCQkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmRlYnVnX3RsX291dF90aW1lcik7Ci0JCX0KLQl9CiAJcmV0dXJuOwogCiBzY2hlZDoKQEAgLTc4Myw3ICs3ODUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX3RpcWRpb19pbmJvdW5kX3Byb2Nlc3Npbmcoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kKTsKKwlxcGVyZl9pbmMocSwgdGFza2xldF9pbmJvdW5kKTsKIAlxZGlvX3N5bmNfYWZ0ZXJfdGhpbmludChxKTsKIAogCS8qCkBAIC03OTgsNyArODAwLDcgQEAKIAlxZGlvX2tpY2tfaGFuZGxlcihxKTsKIAogCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewotCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3ApOworCQlxcGVyZl9pbmMocSwgdGFza2xldF9pbmJvdW5kX3Jlc2NoZWQpOwogCQlpZiAobGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKSB7CiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAkJCXJldHVybjsKQEAgLTgxMSw3ICs4MTMsNyBAQAogCSAqIHJlc2V0dGluZyB0aGUgQUNLIHN0YXRlLgogCSAqLwogCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewotCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3AyKTsKKwkJcXBlcmZfaW5jKHEsIHRhc2tsZXRfaW5ib3VuZF9yZXNjaGVkMik7CiAJCWlmIChsaWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAl9CkBAIC04NTAsOCArODUyLDYgQEAKIAlpZiAodW5saWtlbHkoaXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCiAJCXJldHVybjsKIAotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5wY2lfaW50KTsKLQogCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCiAJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogCkBAIC05MjIsOCArOTIyLDYgQEAKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIgPSBjZGV2LT5wcml2YXRlLT5xZGlvX2RhdGE7CiAJaW50IGNzdGF0LCBkc3RhdDsKIAotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5xZGlvX2ludCk7Ci0KIAlpZiAoIWludHBhcm0gfHwgIWlycV9wdHIpIHsKIAkJREJGX0VSUk9SKCJxaW50OiU0eCIsIGNkZXYtPnByaXZhdGUtPnNjaGlkLnNjaF9ubyk7CiAJCXJldHVybjsKQEAgLTEzODIsNiArMTM4MCw4IEBACiB7CiAJaW50IHVzZWQsIGRpZmY7CiAKKwlxcGVyZl9pbmMocSwgaW5ib3VuZF9jYWxsKTsKKwogCWlmICghcS0+dS5pbi5wb2xsaW5nKQogCQlnb3RvIHNldDsKIApAQCAtMTQzNywxNCArMTQzNywxNiBAQAogCXVuc2lnbmVkIGNoYXIgc3RhdGU7CiAJaW50IHVzZWQsIHJjID0gMDsKIAotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyKTsKKwlxcGVyZl9pbmMocSwgb3V0Ym91bmRfY2FsbCk7CiAKIAljb3VudCA9IHNldF9idWZfc3RhdGVzKHEsIGJ1Zm5yLCBTTFNCX0NVX09VVFBVVF9QUklNRUQsIGNvdW50KTsKIAl1c2VkID0gYXRvbWljX2FkZF9yZXR1cm4oY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJQlVHX09OKHVzZWQgPiBRRElPX01BWF9CVUZGRVJTX1BFUl9RKTsKIAotCWlmIChjYWxsZmxhZ3MgJiBRRElPX0ZMQUdfUENJX09VVCkKKwlpZiAoY2FsbGZsYWdzICYgUURJT19GTEFHX1BDSV9PVVQpIHsKIAkJcS0+dS5vdXQucGNpX291dF9lbmFibGVkID0gMTsKKwkJcXBlcmZfaW5jKHEsIHBjaV9yZXF1ZXN0X2ludCk7CisJfQogCWVsc2UKIAkJcS0+dS5vdXQucGNpX291dF9lbmFibGVkID0gMDsKIApAQCAtMTQ4Myw3ICsxNDg1LDcgQEAKIAlpZiAoc3RhdGUgIT0gU0xTQl9DVV9PVVRQVVRfUFJJTUVEKQogCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCWVsc2UKLQkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmZhc3RfcmVxdWV1ZSk7CisJCXFwZXJmX2luYyhxLCBmYXN0X3JlcXVldWUpOwogCiBvdXQ6CiAJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CkBAIC0xNTM5LDE2ICsxNTQxLDExIEBACiAJcmMgPSBxZGlvX2RlYnVnX2luaXQoKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X3RpOwotCXJjID0gcWRpb19zZXR1cF9wZXJmX3N0YXRzKCk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF9kZWJ1ZzsKIAlyYyA9IHRpcWRpb19yZWdpc3Rlcl90aGluaW50cygpOwogCWlmIChyYykKLQkJZ290byBvdXRfcGVyZjsKKwkJZ290byBvdXRfZGVidWc7CiAJcmV0dXJuIDA7CiAKLW91dF9wZXJmOgotCXFkaW9fcmVtb3ZlX3BlcmZfc3RhdHMoKTsKIG91dF9kZWJ1ZzoKIAlxZGlvX2RlYnVnX2V4aXQoKTsKIG91dF90aToKQEAgLTE1NjIsNyArMTU1OSw2IEBACiB7CiAJdGlxZGlvX3VucmVnaXN0ZXJfdGhpbmludHMoKTsKIAl0aXFkaW9fZnJlZV9tZW1vcnkoKTsKLQlxZGlvX3JlbW92ZV9wZXJmX3N0YXRzKCk7CiAJcWRpb19kZWJ1Z19leGl0KCk7CiAJcWRpb19zZXR1cF9leGl0KCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4ZTNjNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYwotICoKLSAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKLSAqCi0gKiAgQXV0aG9yOiBKYW4gR2xhdWJlciAoamFuZ0BsaW51eC52bmV0LmlibS5jb20pCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+Ci0KLSNpbmNsdWRlICJjaW8uaCIKLSNpbmNsdWRlICJjc3MuaCIKLSNpbmNsdWRlICJkZXZpY2UuaCIKLSNpbmNsdWRlICJpb2FzbS5oIgotI2luY2x1ZGUgImNoc2MuaCIKLSNpbmNsdWRlICJxZGlvX2RlYnVnLmgiCi0jaW5jbHVkZSAicWRpb19wZXJmLmgiCi0KLWludCBxZGlvX3BlcmZvcm1hbmNlX3N0YXRzOwotc3RydWN0IHFkaW9fcGVyZl9zdGF0cyBwZXJmX3N0YXRzOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnFkaW9fcGVyZl9wZGU7Ci0jZW5kaWYKLQotLyoKLSAqIHByb2NmcyBmdW5jdGlvbnMKLSAqLwotc3RhdGljIGludCBxZGlvX3BlcmZfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgcWRpbyBpbnRlcnJ1cHRzXHRcdFx0OiAlbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMucWRpb19pbnQpKTsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgUENJIGludGVycnVwdHNcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5wY2lfaW50KSk7Ci0Jc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIGFkYXB0ZXIgaW50ZXJydXB0c1x0XHRcdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLnRoaW5faW50KSk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJJbmJvdW5kIHRhc2tsZXQgcnVuc1x0XHRcdFx0OiAlbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMudGFza2xldF9pbmJvdW5kKSk7Ci0Jc2VxX3ByaW50ZihtLCAiT3V0Ym91bmQgdGFza2xldCBydW5zXHRcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy50YXNrbGV0X291dGJvdW5kKSk7Ci0Jc2VxX3ByaW50ZihtLCAiQWRhcHRlciBpbnRlcnJ1cHQgdGFza2xldCBydW5zL2xvb3BzXHRcdDogJWxpLyVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy50YXNrbGV0X3RoaW5pbnQpLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLnRhc2tsZXRfdGhpbmludF9sb29wKSk7Ci0Jc2VxX3ByaW50ZihtLCAiQWRhcHRlciBpbnRlcnJ1cHQgaW5ib3VuZCB0YXNrbGV0IHJ1bnMvbG9vcHNcdDogJWxpLyVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy50aGluaW50X2luYm91bmQpLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLnRoaW5pbnRfaW5ib3VuZF9sb29wKSk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgU0lHQSBJbiBpc3N1ZWRcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5zaWdhX2luKSk7Ci0Jc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIFNJR0EgT3V0IGlzc3VlZFx0XHRcdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLnNpZ2Ffb3V0KSk7Ci0Jc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIFNJR0EgU3luYyBpc3N1ZWRcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5zaWdhX3N5bmMpKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOwotCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBpbmJvdW5kIHRyYW5zZmVyc1x0XHRcdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcikpOwotCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBvdXRib3VuZCB0cmFuc2ZlcnNcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyKSk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgZmFzdCByZXF1ZXVlcyAob3V0Zy4gU0JBTCB3L28gU0lHQSlcdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmZhc3RfcmVxdWV1ZSkpOwotCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBvdXRib3VuZCB0YXJnZXQgZnVsbCBjb25kaXRpb25cdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLm91dGJvdW5kX3RhcmdldF9mdWxsKSk7Ci0Jc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIG91dGJvdW5kIHRhc2tsZXQgbW9kX3RpbWVyIGNhbGxzXHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5kZWJ1Z190bF9vdXRfdGltZXIpKTsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2Ygc3RvcCBwb2xsaW5nIGNhbGxzXHRcdFx0OiAlbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMuZGVidWdfc3RvcF9wb2xsaW5nKSk7Ci0Jc2VxX3ByaW50ZihtLCAiQUkgaW5ib3VuZCB0YXNrbGV0IGxvb3BzIGFmdGVyIHN0b3AgcG9sbGluZ1x0OiAlbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3AyKSk7Ci0Jc2VxX3ByaW50ZihtLCAiUUVCU00gRVFCUyB0b3RhbC9pbmNvbXBsZXRlXHRcdFx0OiAlbGkvJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmRlYnVnX2VxYnNfYWxsKSwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5kZWJ1Z19lcWJzX2luY29tcGxldGUpKTsKLQlzZXFfcHJpbnRmKG0sICJRRUJTTSBTUUJTIHRvdGFsL2luY29tcGxldGVcdFx0XHQ6ICVsaS8lbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMuZGVidWdfc3Fic19hbGwpLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmRlYnVnX3NxYnNfaW5jb21wbGV0ZSkpOwotCXNlcV9wcmludGYobSwgIlxuIik7Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IHFkaW9fcGVyZl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgcWRpb19wZXJmX3Byb2Nfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFkaW9fcGVyZl9wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHFkaW9fcGVyZl9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIHN5c2ZzIGZ1bmN0aW9ucwotICovCi1zdGF0aWMgc3NpemVfdCBxZGlvX3BlcmZfc3RhdHNfc2hvdyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBxZGlvX3BlcmZvcm1hbmNlX3N0YXRzID8gMSA6IDApOwotfQotCi1zdGF0aWMgc3NpemVfdCBxZGlvX3BlcmZfc3RhdHNfc3RvcmUoc3RydWN0IGJ1c190eXBlICpidXMsCi0JCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxNiwgJmkpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgoaSAhPSAwKSAmJiAoaSAhPSAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGkgPT0gcWRpb19wZXJmb3JtYW5jZV9zdGF0cykKLQkJcmV0dXJuIGNvdW50OwotCi0JcWRpb19wZXJmb3JtYW5jZV9zdGF0cyA9IGk7Ci0JLyogcmVzZXQgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcyAqLwotCWlmIChpID09IDApCi0JCW1lbXNldCgmcGVyZl9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBxZGlvX3BlcmZfc3RhdHMpKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBCVVNfQVRUUihxZGlvX3BlcmZvcm1hbmNlX3N0YXRzLCAwNjQ0LCBxZGlvX3BlcmZfc3RhdHNfc2hvdywKLQkJcWRpb19wZXJmX3N0YXRzX3N0b3JlKTsKLQotaW50IF9faW5pdCBxZGlvX3NldHVwX3BlcmZfc3RhdHModm9pZCkKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGJ1c19jcmVhdGVfZmlsZSgmY2N3X2J1c190eXBlLCAmYnVzX2F0dHJfcWRpb19wZXJmb3JtYW5jZV9zdGF0cyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCW1lbXNldCgmcGVyZl9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBxZGlvX3BlcmZfc3RhdHMpKTsKLQlxZGlvX3BlcmZfcGRlID0gcHJvY19jcmVhdGUoInFkaW9fcGVyZiIsIFNfSUZSRUcgfCBTX0lSVUdPLAotCQkJCSAgICBOVUxMLCAmcWRpb19wZXJmX3Byb2NfZm9wcyk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBxZGlvX3JlbW92ZV9wZXJmX3N0YXRzKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZW1vdmVfcHJvY19lbnRyeSgicWRpb19wZXJmIiwgTlVMTCk7Ci0jZW5kaWYKLQlidXNfcmVtb3ZlX2ZpbGUoJmNjd19idXNfdHlwZSwgJmJ1c19hdHRyX3FkaW9fcGVyZm9ybWFuY2Vfc3RhdHMpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNDUwNGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaAotICoKLSAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKLSAqCi0gKiAgQXV0aG9yOiBKYW4gR2xhdWJlciAoamFuZ0BsaW51eC52bmV0LmlibS5jb20pCi0gKi8KLSNpZm5kZWYgUURJT19QRVJGX0gKLSNkZWZpbmUgUURJT19QRVJGX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1zdHJ1Y3QgcWRpb19wZXJmX3N0YXRzIHsKLQkvKiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxscyAqLwotCWF0b21pY19sb25nX3QgcWRpb19pbnQ7Ci0JYXRvbWljX2xvbmdfdCBwY2lfaW50OwotCWF0b21pY19sb25nX3QgdGhpbl9pbnQ7Ci0KLQkvKiB0YXNrbGV0IHJ1bnMgKi8KLQlhdG9taWNfbG9uZ190IHRhc2tsZXRfaW5ib3VuZDsKLQlhdG9taWNfbG9uZ190IHRhc2tsZXRfb3V0Ym91bmQ7Ci0JYXRvbWljX2xvbmdfdCB0YXNrbGV0X3RoaW5pbnQ7Ci0JYXRvbWljX2xvbmdfdCB0YXNrbGV0X3RoaW5pbnRfbG9vcDsKLQlhdG9taWNfbG9uZ190IHRoaW5pbnRfaW5ib3VuZDsKLQlhdG9taWNfbG9uZ190IHRoaW5pbnRfaW5ib3VuZF9sb29wOwotCWF0b21pY19sb25nX3QgdGhpbmludF9pbmJvdW5kX2xvb3AyOwotCi0JLyogc2lnbmFsIGFkYXB0ZXIgY2FsbHMgKi8KLQlhdG9taWNfbG9uZ190IHNpZ2Ffb3V0OwotCWF0b21pY19sb25nX3Qgc2lnYV9pbjsKLQlhdG9taWNfbG9uZ190IHNpZ2Ffc3luYzsKLQotCS8qIG1pc2MgKi8KLQlhdG9taWNfbG9uZ190IGluYm91bmRfaGFuZGxlcjsKLQlhdG9taWNfbG9uZ190IG91dGJvdW5kX2hhbmRsZXI7Ci0JYXRvbWljX2xvbmdfdCBmYXN0X3JlcXVldWU7Ci0JYXRvbWljX2xvbmdfdCBvdXRib3VuZF90YXJnZXRfZnVsbDsKLQotCS8qIGZvciBkZWJ1Z2dpbmcgKi8KLQlhdG9taWNfbG9uZ190IGRlYnVnX3RsX291dF90aW1lcjsKLQlhdG9taWNfbG9uZ190IGRlYnVnX3N0b3BfcG9sbGluZzsKLQlhdG9taWNfbG9uZ190IGRlYnVnX2VxYnNfYWxsOwotCWF0b21pY19sb25nX3QgZGVidWdfZXFic19pbmNvbXBsZXRlOwotCWF0b21pY19sb25nX3QgZGVidWdfc3Fic19hbGw7Ci0JYXRvbWljX2xvbmdfdCBkZWJ1Z19zcWJzX2luY29tcGxldGU7Ci19OwotCi1leHRlcm4gc3RydWN0IHFkaW9fcGVyZl9zdGF0cyBwZXJmX3N0YXRzOwotZXh0ZXJuIGludCBxZGlvX3BlcmZvcm1hbmNlX3N0YXRzOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcWRpb19wZXJmX3N0YXRfaW5jKGF0b21pY19sb25nX3QgKmNvdW50KQotewotCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKQotCQlhdG9taWNfbG9uZ19pbmMoY291bnQpOwotfQotCi1pbnQgcWRpb19zZXR1cF9wZXJmX3N0YXRzKHZvaWQpOwotdm9pZCBxZGlvX3JlbW92ZV9wZXJmX3N0YXRzKHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKaW5kZXggMThkNTRmYy4uOGMyZGVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIAlpZiAoIWlycV9wdHIpCiAJCXJldHVybjsKIAotCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpJmlycV9wdHItPnFpYiAmIDB4ZmYpOwogCWlycV9wdHItPnFpYi5wZm10ID0gcWliX3BhcmFtX2ZpZWxkX2Zvcm1hdDsKIAlpZiAocWliX3BhcmFtX2ZpZWxkKQogCQltZW1jcHkoaXJxX3B0ci0+cWliLnBhcm0sIHFpYl9wYXJhbV9maWVsZCwKQEAgLTgyLDE0ICs4MSwxMiBAQAogCQlxID0ga21lbV9jYWNoZV9hbGxvYyhxZGlvX3FfY2FjaGUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXEpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJV0FSTl9PTigodW5zaWduZWQgbG9uZylxICYgMHhmZik7CiAKIAkJcS0+c2xpYiA9IChzdHJ1Y3Qgc2xpYiAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICghcS0+c2xpYikgewogCQkJa21lbV9jYWNoZV9mcmVlKHFkaW9fcV9jYWNoZSwgcSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQlXQVJOX09OKCh1bnNpZ25lZCBsb25nKXEtPnNsaWIgJiAweDdmZik7CiAJCWlycV9wdHJfcXNbaV0gPSBxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEzMSw3ICsxMjgsNyBAQAogCS8qIGZpbGwgaW4gc2JhbCAqLwogCWZvciAoaiA9IDA7IGogPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBqKyspIHsKIAkJcS0+c2JhbFtqXSA9ICpzYmFsc19hcnJheSsrOwotCQlXQVJOX09OKCh1bnNpZ25lZCBsb25nKXEtPnNiYWxbal0gJiAweGZmKTsKKwkJQlVHX09OKCh1bnNpZ25lZCBsb25nKXEtPnNiYWxbal0gJiAweGZmKTsKIAl9CiAKIAkvKiBmaWxsIGluIHNsaWIgKi8KQEAgLTE0NywxMSArMTQ0LDYgQEAKIAkvKiBmaWxsIGluIHNsICovCiAJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IGorKykKIAkJcS0+c2wtPmVsZW1lbnRbal0uc2JhbCA9ICh1bnNpZ25lZCBsb25nKXEtPnNiYWxbal07Ci0KLQlEQkZfRVZFTlQoInNsLXNsc2Itc2JhbCIpOwotCURCRl9IRVgocS0+c2wsIHNpemVvZih2b2lkICopKTsKLQlEQkZfSEVYKCZxLT5zbHNiLCBzaXplb2Yodm9pZCAqKSk7Ci0JREJGX0hFWChxLT5zYmFsLCBzaXplb2Yodm9pZCAqKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHVwX3F1ZXVlcyhzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwppbmRleCA5ODFhNzdlLi4wOTFkOTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKQEAgLTEsOSArMSw3IEBACiAvKgogICogbGludXgvZHJpdmVycy9zMzkwL2Npby90aGluaW50X3FkaW8uYwogICoKLSAqIHRoaW4gaW50ZXJydXB0IHN1cHBvcnQgZm9yIHFkaW8KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMC0yMDA4IElCTSBDb3JwLgorICogQ29weXJpZ2h0IDIwMDAsMjAwOSBJQk0gQ29ycC4KICAqIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPgogICoJICAgICAgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPgogICoJICAgICAgSmFuIEdsYXViZXIgPGphbmdAbGludXgudm5ldC5pYm0uY29tPgpAQCAtMTksNyArMTcsNiBAQAogI2luY2x1ZGUgImlvYXNtLmgiCiAjaW5jbHVkZSAicWRpby5oIgogI2luY2x1ZGUgInFkaW9fZGVidWcuaCIKLSNpbmNsdWRlICJxZGlvX3BlcmYuaCIKIAogLyoKICAqIFJlc3RyaWN0aW9uOiBvbmx5IDYzIGlxZGlvIHN1YmNoYW5uZWxzIHdvdWxkIGhhdmUgaXRzIG93biBpbmRpY2F0b3IsCkBAIC0xMzIsOCArMTI5LDYgQEAKIHsKIAlzdHJ1Y3QgcWRpb19xICpxOwogCi0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnRoaW5faW50KTsKLQogCS8qCiAJICogU1ZTIG9ubHkgd2hlbiBuZWVkZWQ6IGlzc3VlIFNWUyB0byBiZW5lZml0IGZyb20gaXFkaW8gaW50ZXJydXB0CiAJICogYXZvaWRhbmNlIChTVlMgY2xlYXJzIGFkYXB0ZXIgaW50ZXJydXB0IHN1cHByZXNzaW9uIG92ZXJ3cml0ZSkKQEAgLTE1NCw2ICsxNDksNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHEsICZ0aXFfbGlzdCwgZW50cnkpCiAJCS8qIG9ubHkgcHJvY2VzcyBxdWV1ZXMgZnJvbSBjaGFuZ2VkIHNldHMgKi8KIAkJaWYgKCpxLT5pcnFfcHRyLT5kc2NpKSB7CisJCQlxcGVyZl9pbmMocSwgYWRhcHRlcl9pbnQpOwogCiAJCQkvKiBvbmx5IGNsZWFyIGl0IGlmIHRoZSBpbmRpY2F0b3IgaXMgbm9uLXNoYXJlZCAqLwogCQkJaWYgKCFzaGFyZWRfaW5kKHEtPmlycV9wdHIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2VudmN0cmwuYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19lbnZjdHJsLmMKaW5kZXggN2M4MTVkMy4uMjhkODZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2VudmN0cmwuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9iYmNfZW52Y3RybC5jCkBAIC01MjIsNiArNTIyLDQwIEBACiAJc2V0X2Zhbl9zcGVlZHMoZnApOwogfQogCitzdGF0aWMgdm9pZCBkZXN0cm95X29uZV90ZW1wKHN0cnVjdCBiYmNfY3B1X3RlbXBlcmF0dXJlICp0cCkKK3sKKwliYmNfaTJjX2RldGFjaCh0cC0+Y2xpZW50KTsKKwlrZnJlZSh0cCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYWxsX3RlbXBzKHN0cnVjdCBiYmNfaTJjX2J1cyAqYnApCit7CisJc3RydWN0IGJiY19jcHVfdGVtcGVyYXR1cmUgKnRwLCAqdHBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0cCwgdHBvcywgJmJwLT50ZW1wcywgYnBfbGlzdCkgeworCQlsaXN0X2RlbCgmdHAtPmJwX2xpc3QpOworCQlsaXN0X2RlbCgmdHAtPmdsb2JfbGlzdCk7CisJCWRlc3Ryb3lfb25lX3RlbXAodHApOworCX0KK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9vbmVfZmFuKHN0cnVjdCBiYmNfZmFuX2NvbnRyb2wgKmZwKQoreworCWJiY19pMmNfZGV0YWNoKGZwLT5jbGllbnQpOworCWtmcmVlKGZwKTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9hbGxfZmFucyhzdHJ1Y3QgYmJjX2kyY19idXMgKmJwKQoreworCXN0cnVjdCBiYmNfZmFuX2NvbnRyb2wgKmZwLCAqZnBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmcCwgZnBvcywgJmJwLT5mYW5zLCBicF9saXN0KSB7CisJCWxpc3RfZGVsKCZmcC0+YnBfbGlzdCk7CisJCWxpc3RfZGVsKCZmcC0+Z2xvYl9saXN0KTsKKwkJZGVzdHJveV9vbmVfZmFuKGZwKTsKKwl9Cit9CisKIGludCBiYmNfZW52Y3RybF9pbml0KHN0cnVjdCBiYmNfaTJjX2J1cyAqYnApCiB7CiAJc3RydWN0IG9mX2RldmljZSAqb3A7CkBAIC01NDEsNiArNTc1LDggQEAKIAkJCWludCBlcnIgPSBQVFJfRVJSKGtlbnZjdHJsZF90YXNrKTsKIAogCQkJa2VudmN0cmxkX3Rhc2sgPSBOVUxMOworCQkJZGVzdHJveV9hbGxfdGVtcHMoYnApOworCQkJZGVzdHJveV9hbGxfZmFucyhicCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQpAQCAtNTQ4LDM1ICs1ODQsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGVzdHJveV9vbmVfdGVtcChzdHJ1Y3QgYmJjX2NwdV90ZW1wZXJhdHVyZSAqdHApCi17Ci0JYmJjX2kyY19kZXRhY2godHAtPmNsaWVudCk7Ci0Ja2ZyZWUodHApOwotfQotCi1zdGF0aWMgdm9pZCBkZXN0cm95X29uZV9mYW4oc3RydWN0IGJiY19mYW5fY29udHJvbCAqZnApCi17Ci0JYmJjX2kyY19kZXRhY2goZnAtPmNsaWVudCk7Ci0Ja2ZyZWUoZnApOwotfQotCiB2b2lkIGJiY19lbnZjdHJsX2NsZWFudXAoc3RydWN0IGJiY19pMmNfYnVzICpicCkKIHsKLQlzdHJ1Y3QgYmJjX2NwdV90ZW1wZXJhdHVyZSAqdHAsICp0cG9zOwotCXN0cnVjdCBiYmNfZmFuX2NvbnRyb2wgKmZwLCAqZnBvczsKLQogCWlmIChrZW52Y3RybGRfdGFzaykKIAkJa3RocmVhZF9zdG9wKGtlbnZjdHJsZF90YXNrKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0cCwgdHBvcywgJmJwLT50ZW1wcywgYnBfbGlzdCkgewotCQlsaXN0X2RlbCgmdHAtPmJwX2xpc3QpOwotCQlsaXN0X2RlbCgmdHAtPmdsb2JfbGlzdCk7Ci0JCWRlc3Ryb3lfb25lX3RlbXAodHApOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmcCwgZnBvcywgJmJwLT5mYW5zLCBicF9saXN0KSB7Ci0JCWxpc3RfZGVsKCZmcC0+YnBfbGlzdCk7Ci0JCWxpc3RfZGVsKCZmcC0+Z2xvYl9saXN0KTsKLQkJZGVzdHJveV9vbmVfZmFuKGZwKTsKLQl9CisJZGVzdHJveV9hbGxfdGVtcHMoYnApOworCWRlc3Ryb3lfYWxsX2ZhbnMoYnApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCmluZGV4IDI2ZmZkY2QuLjE1YTAwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKQEAgLTE0NDAsNiArMTQ0MCwxMCBAQAogc3RhdGljIGludCBpc19jeGdiM19kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY3hnYjNpX3NkZXZfZGF0YSAqY2RhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXY7CisKKwlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQorCQluZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoZGV2KTsKIAogCXdyaXRlX2xvY2soJmNkYXRhX3J3bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjZGF0YSwgJmNkYXRhX2xpc3QsIGxpc3QpIHsKQEAgLTE0NDcsNyArMTQ1MSw3IEBACiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBwb3J0cy0+bnBvcnRzOyBpKyspCi0JCQlpZiAoZGV2ID09IHBvcnRzLT5sbGRldnNbaV0pIHsKKwkJCWlmIChuZGV2ID09IHBvcnRzLT5sbGRldnNbaV0pIHsKIAkJCQl3cml0ZV91bmxvY2soJmNkYXRhX3J3bG9jayk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CkBAIC0xNTY2LDYgKzE1NzAsMjYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorLyoqCisgKiBjeGdiM2lfZmluZF9kZXYgLSBmaW5kIHRoZSBpbnRlcmZhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzCisgKiBAaXBhZGRyOiBpcCBhZGRyZXNzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqCitjeGdiM2lfZmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgZmxvd2kgZmw7CisJaW50IGVycjsKKwlzdHJ1Y3QgcnRhYmxlICpydDsKKworCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOworCWZsLm5sX3UuaXA0X3UuZGFkZHIgPSBpcGFkZHI7CisKKwllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldiA/IGRldl9uZXQoZGV2KSA6ICZpbml0X25ldCwgJnJ0LCAmZmwpOworCWlmICghZXJyKQorCQlyZXR1cm4gKCZydC0+dS5kc3QpLT5kZXY7CisKKwlyZXR1cm4gTlVMTDsKK30KIAogLyoqCiAgKiBjeGdiM2lfYzNjbl9jb25uZWN0IC0gaW5pdGlhdGVzIGFuIGlzY3NpIHRjcCBjb25uZWN0aW9uIHRvIGEgZ2l2ZW4gYWRkcmVzcwpAQCAtMTU4MSw2ICsxNjA1LDcgQEAKIAlzdHJ1Y3QgY3hnYjNpX3NkZXZfZGF0YSAqY2RhdGE7CiAJc3RydWN0IHQzY2RldiAqY2RldjsKIAlfX2JlMzIgc2lwdjQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRzdGRldjsKIAlpbnQgZXJyOwogCiAJYzNjbl9jb25uX2RlYnVnKCJjM2NuIDB4JXAsIGRldiAweCVwLlxuIiwgYzNjbiwgZGV2KTsKQEAgLTE1OTEsNiArMTYxNiwxMyBAQAogCWMzY24tPmRhZGRyLnNpbl9wb3J0ID0gdXNpbi0+c2luX3BvcnQ7CiAJYzNjbi0+ZGFkZHIuc2luX2FkZHIuc19hZGRyID0gdXNpbi0+c2luX2FkZHIuc19hZGRyOwogCisJZHN0ZGV2ID0gY3hnYjNpX2ZpbmRfZGV2KGRldiwgdXNpbi0+c2luX2FkZHIuc19hZGRyKTsKKwlpZiAoIWRzdGRldiB8fCAhaXNfY3hnYjNfZGV2KGRzdGRldikpCisJCXJldHVybiAtRU5FVFVOUkVBQ0g7CisKKwlpZiAoZHN0ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQorCQlkZXYgPSBkc3RkZXY7CisKIAlydCA9IGZpbmRfcm91dGUoZGV2LCBjM2NuLT5zYWRkci5zaW5fYWRkci5zX2FkZHIsCiAJCQljM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIsCiAJCQljM2NuLT5zYWRkci5zaW5fcG9ydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggYjc2ODlmMy4uYzI4YTcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTUxNyw3ICs1MTcsNyBAQAogCWlmIChjb25uLT5sb2dpbl90YXNrID09IHRhc2spCiAJCXJldHVybjsKIAotCV9fa2ZpZm9fcHV0KHNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmdGFzaywgc2l6ZW9mKHZvaWQqKSk7CisJa2ZpZm9faW4oJnNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmdGFzaywgc2l6ZW9mKHZvaWQqKSk7CiAKIAlpZiAoc2MpIHsKIAkJdGFzay0+c2MgPSBOVUxMOwpAQCAtNzM3LDcgKzczNyw3IEBACiAJCUJVR19PTihjb25uLT5jX3N0YWdlID09IElTQ1NJX0NPTk5fSU5JVElBTF9TVEFHRSk7CiAJCUJVR19PTihjb25uLT5jX3N0YWdlID09IElTQ1NJX0NPTk5fU1RPUFBFRCk7CiAKLQkJaWYgKCFfX2tmaWZvX2dldChzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAorCQlpZiAoIWtmaWZvX291dCgmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwKIAkJCQkgKHZvaWQqKSZ0YXNrLCBzaXplb2Yodm9pZCopKSkKIAkJCXJldHVybiBOVUxMOwogCX0KQEAgLTE1NjcsNyArMTU2Nyw3IEBACiB7CiAJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2s7CiAKLQlpZiAoIV9fa2ZpZm9fZ2V0KGNvbm4tPnNlc3Npb24tPmNtZHBvb2wucXVldWUsCisJaWYgKCFrZmlmb19vdXQoJmNvbm4tPnNlc3Npb24tPmNtZHBvb2wucXVldWUsCiAJCQkgKHZvaWQgKikgJnRhc2ssIHNpemVvZih2b2lkICopKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTI0NjEsMTIgKzI0NjEsNyBAQAogCWlmIChxLT5wb29sID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcS0+cXVldWUgPSBrZmlmb19pbml0KCh2b2lkKilxLT5wb29sLCBtYXggKiBzaXplb2Yodm9pZCopLAotCQkJICAgICAgR0ZQX0tFUk5FTCwgTlVMTCk7Ci0JaWYgKElTX0VSUihxLT5xdWV1ZSkpIHsKLQkJcS0+cXVldWUgPSBOVUxMOwotCQlnb3RvIGVub21lbTsKLQl9CisJa2ZpZm9faW5pdCgmcS0+cXVldWUsICh2b2lkKilxLT5wb29sLCBtYXggKiBzaXplb2Yodm9pZCopKTsKIAogCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgewogCQlxLT5wb29sW2ldID0ga3phbGxvYyhpdGVtX3NpemUsIEdGUF9LRVJORUwpOwpAQCAtMjQ3NCw3ICsyNDY5LDcgQEAKIAkJCXEtPm1heCA9IGk7CiAJCQlnb3RvIGVub21lbTsKIAkJfQotCQlfX2tmaWZvX3B1dChxLT5xdWV1ZSwgKHZvaWQqKSZxLT5wb29sW2ldLCBzaXplb2Yodm9pZCopKTsKKwkJa2ZpZm9faW4oJnEtPnF1ZXVlLCAodm9pZCopJnEtPnBvb2xbaV0sIHNpemVvZih2b2lkKikpOwogCX0KIAogCWlmIChpdGVtcykgewpAQCAtMjQ5Nyw3ICsyNDkyLDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcS0+bWF4OyBpKyspCiAJCWtmcmVlKHEtPnBvb2xbaV0pOwogCWtmcmVlKHEtPnBvb2wpOwotCWtmcmVlKHEtPnF1ZXVlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Bvb2xfZnJlZSk7CiAKQEAgLTI4MjUsNyArMjgxOSw3IEBACiAKIAkvKiBhbGxvY2F0ZSBsb2dpbl90YXNrIHVzZWQgZm9yIHRoZSBsb2dpbi90ZXh0IHNlcXVlbmNlcyAqLwogCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Ci0JaWYgKCFfX2tmaWZvX2dldChzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAorCWlmICgha2ZpZm9fb3V0KCZzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKIAkJCSBzaXplb2Yodm9pZCopKSkgewogCQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CkBAIC0yODQ1LDcgKzI4MzksNyBAQAogCXJldHVybiBjbHNfY29ubjsKIAogbG9naW5fdGFza19kYXRhX2FsbG9jX2ZhaWw6Ci0JX19rZmlmb19wdXQoc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl90YXNrLAorCWtmaWZvX2luKCZzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLCAodm9pZCopJmNvbm4tPmxvZ2luX3Rhc2ssCiAJCSAgICBzaXplb2Yodm9pZCopKTsKIGxvZ2luX3Rhc2tfYWxsb2NfZmFpbDoKIAlpc2NzaV9kZXN0cm95X2Nvbm4oY2xzX2Nvbm4pOwpAQCAtMjkwOCw3ICsyOTAyLDcgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBjb25uLT5kYXRhLAogCQkgICBnZXRfb3JkZXIoSVNDU0lfREVGX01BWF9SRUNWX1NFR19MRU4pKTsKIAlrZnJlZShjb25uLT5wZXJzaXN0ZW50X2FkZHJlc3MpOwotCV9fa2ZpZm9fcHV0KHNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKKwlrZmlmb19pbigmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl90YXNrLAogCQkgICAgc2l6ZW9mKHZvaWQqKSk7CiAJaWYgKHNlc3Npb24tPmxlYWRjb25uID09IGNvbm4pCiAJCXNlc3Npb24tPmxlYWRjb25uID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYwppbmRleCBjYTI1ZWU1Li5kYjY4NTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jCkBAIC00NDUsMTUgKzQ0NSwxNSBAQAogCQlyZXR1cm47CiAKIAkvKiBmbHVzaCB0YXNrJ3MgcjJ0IHF1ZXVlcyAqLwotCXdoaWxlIChfX2tmaWZvX2dldCh0Y3BfdGFzay0+cjJ0cXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKSkgewotCQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCisJd2hpbGUgKGtmaWZvX291dCgmdGNwX3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSkpIHsKKwkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJSVNDU0lfREJHX1RDUCh0YXNrLT5jb25uLCAicGVuZGluZyByMnQgZHJvcHBlZFxuIik7CiAJfQogCiAJcjJ0ID0gdGNwX3Rhc2stPnIydDsKIAlpZiAocjJ0ICE9IE5VTEwpIHsKLQkJX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAorCQlrZmlmb19pbigmdGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAogCQkJICAgIHNpemVvZih2b2lkKikpOwogCQl0Y3BfdGFzay0+cjJ0ID0gTlVMTDsKIAl9CkBAIC01NDEsNyArNTQxLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmMgPSBfX2tmaWZvX2dldCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpOworCXJjID0ga2ZpZm9fb3V0KCZ0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpOwogCWlmICghcmMpIHsKIAkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sICJDb3VsZCBub3QgYWxsb2NhdGUgUjJULiAiCiAJCQkJICAiVGFyZ2V0IGhhcyBzZW50IG1vcmUgUjJUcyB0aGFuIGl0ICIKQEAgLTU1NCw3ICs1NTQsNyBAQAogCWlmIChyMnQtPmRhdGFfbGVuZ3RoID09IDApIHsKIAkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sCiAJCQkJICAiaW52YWxpZCBSMlQgd2l0aCB6ZXJvIGRhdGEgbGVuXG4iKTsKLQkJX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAorCQlrZmlmb19pbigmdGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAogCQkJICAgIHNpemVvZih2b2lkKikpOwogCQlyZXR1cm4gSVNDU0lfRVJSX0RBVEFMRU47CiAJfQpAQCAtNTcwLDcgKzU3MCw3IEBACiAJCQkJICAiaW52YWxpZCBSMlQgd2l0aCBkYXRhIGxlbiAldSBhdCBvZmZzZXQgJXUgIgogCQkJCSAgImFuZCB0b3RhbCBsZW5ndGggJWRcbiIsIHIydC0+ZGF0YV9sZW5ndGgsCiAJCQkJICByMnQtPmRhdGFfb2Zmc2V0LCBzY3NpX291dCh0YXNrLT5zYyktPmxlbmd0aCk7Ci0JCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKKwkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBTEVOOwogCX0KQEAgLTU4MCw3ICs1ODAsNyBAQAogCXIydC0+c2VudCA9IDA7CiAKIAl0Y3BfdGFzay0+ZXhwX2RhdGFzbiA9IHIydHNuICsgMTsKLQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKTsKKwlrZmlmb19pbigmdGNwX3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSk7CiAJY29ubi0+cjJ0X3BkdXNfY250Kys7CiAKIAlpc2NzaV9yZXF1ZXVlX3Rhc2sodGFzayk7CkBAIC05NTEsNyArOTUxLDcgQEAKIAkJcmV0dXJuIGNvbm4tPnNlc3Npb24tPnR0LT5pbml0X3BkdSh0YXNrLCAwLCB0YXNrLT5kYXRhX2NvdW50KTsKIAl9CiAKLQlCVUdfT04oX19rZmlmb19sZW4odGNwX3Rhc2stPnIydHF1ZXVlKSk7CisJQlVHX09OKGtmaWZvX2xlbigmdGNwX3Rhc2stPnIydHF1ZXVlKSk7CiAJdGNwX3Rhc2stPmV4cF9kYXRhc24gPSAwOwogCiAJLyogUHJlcGFyZSBQRFUsIG9wdGlvbmFsbHkgdy8gaW1tZWRpYXRlIGRhdGEgKi8KQEAgLTk4Miw3ICs5ODIsNyBAQAogCQkJaWYgKHIydC0+ZGF0YV9sZW5ndGggPD0gcjJ0LT5zZW50KSB7CiAJCQkJSVNDU0lfREJHX1RDUCh0YXNrLT5jb25uLAogCQkJCQkgICAgICAiICBkb25lIHdpdGggcjJ0ICVwXG4iLCByMnQpOwotCQkJCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLAorCQkJCWtmaWZvX2luKCZ0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwKIAkJCQkJICAgICh2b2lkICopJnRjcF90YXNrLT5yMnQsCiAJCQkJCSAgICBzaXplb2Yodm9pZCAqKSk7CiAJCQkJdGNwX3Rhc2stPnIydCA9IHIydCA9IE5VTEw7CkBAIC05OTAsOCArOTkwLDEzIEBACiAJCX0KIAogCQlpZiAocjJ0ID09IE5VTEwpIHsKLQkJCV9fa2ZpZm9fZ2V0KHRjcF90YXNrLT5yMnRxdWV1ZSwKLQkJCQkgICAgKHZvaWQgKikmdGNwX3Rhc2stPnIydCwgc2l6ZW9mKHZvaWQgKikpOworCQkJaWYgKGtmaWZvX291dCgmdGNwX3Rhc2stPnIydHF1ZXVlLAorCQkJICAgICh2b2lkICopJnRjcF90YXNrLT5yMnQsIHNpemVvZih2b2lkICopKSAhPQorCQkJICAgIHNpemVvZih2b2lkICopKSB7CisJCQkJV0FSTl9PTkNFKDEsICJ1bmV4cGVjdGVkIGZpZm8gc3RhdGUiKTsKKwkJCQlyMnQgPSBOVUxMOworCQkJfQorCiAJCQlyMnQgPSB0Y3BfdGFzay0+cjJ0OwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKQEAgLTExMjcsOSArMTEzMiw4IEBACiAJCX0KIAogCQkvKiBSMlQgeG1pdCBxdWV1ZSAqLwotCQl0Y3BfdGFzay0+cjJ0cXVldWUgPSBrZmlmb19hbGxvYygKLQkJICAgICAgc2Vzc2lvbi0+bWF4X3IydCAqIDQgKiBzaXplb2Yodm9pZCopLCBHRlBfS0VSTkVMLCBOVUxMKTsKLQkJaWYgKHRjcF90YXNrLT5yMnRxdWV1ZSA9PSBFUlJfUFRSKC1FTk9NRU0pKSB7CisJCWlmIChrZmlmb19hbGxvYygmdGNwX3Rhc2stPnIydHF1ZXVlLAorCQkgICAgICBzZXNzaW9uLT5tYXhfcjJ0ICogNCAqIHNpemVvZih2b2lkKiksIEdGUF9LRVJORUwpKSB7CiAJCQlpc2NzaV9wb29sX2ZyZWUoJnRjcF90YXNrLT5yMnRwb29sKTsKIAkJCWdvdG8gcjJ0X2FsbG9jX2ZhaWw7CiAJCX0KQEAgLTExNDIsNyArMTE0Niw3IEBACiAJCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrID0gc2Vzc2lvbi0+Y21kc1tpXTsKIAkJc3RydWN0IGlzY3NpX3RjcF90YXNrICp0Y3BfdGFzayA9IHRhc2stPmRkX2RhdGE7CiAKLQkJa2ZpZm9fZnJlZSh0Y3BfdGFzay0+cjJ0cXVldWUpOworCQlrZmlmb19mcmVlKCZ0Y3BfdGFzay0+cjJ0cXVldWUpOwogCQlpc2NzaV9wb29sX2ZyZWUoJnRjcF90YXNrLT5yMnRwb29sKTsKIAl9CiAJcmV0dXJuIC1FTk9NRU07CkBAIC0xMTU3LDcgKzExNjEsNyBAQAogCQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IHNlc3Npb24tPmNtZHNbaV07CiAJCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCi0JCWtmaWZvX2ZyZWUodGNwX3Rhc2stPnIydHF1ZXVlKTsKKwkJa2ZpZm9fZnJlZSgmdGNwX3Rhc2stPnIydHF1ZXVlKTsKIAkJaXNjc2lfcG9vbF9mcmVlKCZ0Y3BfdGFzay0+cjJ0cG9vbCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNycC5jIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCmluZGV4IDlhZDM4ZTguLmFiMTliM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic3JwLmMKQEAgLTU4LDE5ICs1OCwxNSBAQAogCQlnb3RvIGZyZWVfcG9vbDsKIAogCXNwaW5fbG9ja19pbml0KCZxLT5sb2NrKTsKLQlxLT5xdWV1ZSA9IGtmaWZvX2luaXQoKHZvaWQgKikgcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQgKiksCi0JCQkgICAgICBHRlBfS0VSTkVMLCAmcS0+bG9jayk7Ci0JaWYgKElTX0VSUihxLT5xdWV1ZSkpCi0JCWdvdG8gZnJlZV9pdGVtOworCWtmaWZvX2luaXQoJnEtPnF1ZXVlLCAodm9pZCAqKSBxLT5wb29sLCBtYXggKiBzaXplb2Yodm9pZCAqKSk7CiAKIAlmb3IgKGkgPSAwLCBpdWUgPSBxLT5pdGVtczsgaSA8IG1heDsgaSsrKSB7Ci0JCV9fa2ZpZm9fcHV0KHEtPnF1ZXVlLCAodm9pZCAqKSAmaXVlLCBzaXplb2Yodm9pZCAqKSk7CisJCWtmaWZvX2luKCZxLT5xdWV1ZSwgKHZvaWQgKikgJml1ZSwgc2l6ZW9mKHZvaWQgKikpOwogCQlpdWUtPnNidWYgPSByaW5nW2ldOwogCQlpdWUrKzsKIAl9CiAJcmV0dXJuIDA7CiAKLWZyZWVfaXRlbToKIAlrZnJlZShxLT5pdGVtcyk7CiBmcmVlX3Bvb2w6CiAJa2ZyZWUocS0+cG9vbCk7CkBAIC0xNjcsNyArMTYzLDExIEBACiB7CiAJc3RydWN0IGl1X2VudHJ5ICppdWUgPSBOVUxMOwogCi0Ja2ZpZm9fZ2V0KHRhcmdldC0+aXVfcXVldWUucXVldWUsICh2b2lkICopICZpdWUsIHNpemVvZih2b2lkICopKTsKKwlpZiAoa2ZpZm9fb3V0X2xvY2tlZCgmdGFyZ2V0LT5pdV9xdWV1ZS5xdWV1ZSwgKHZvaWQgKikgJml1ZSwKKwkJc2l6ZW9mKHZvaWQgKiksICZ0YXJnZXQtPml1X3F1ZXVlLmxvY2spICE9IHNpemVvZih2b2lkICopKSB7CisJCQlXQVJOX09OQ0UoMSwgInVuZXhwZWN0ZWQgZmlmbyBzdGF0ZSIpOworCQkJcmV0dXJuIE5VTEw7CisJfQogCWlmICghaXVlKQogCQlyZXR1cm4gaXVlOwogCWl1ZS0+dGFyZ2V0ID0gdGFyZ2V0OwpAQCAtMTc5LDcgKzE3OSw4IEBACiAKIHZvaWQgc3JwX2l1X3B1dChzdHJ1Y3QgaXVfZW50cnkgKml1ZSkKIHsKLQlrZmlmb19wdXQoaXVlLT50YXJnZXQtPml1X3F1ZXVlLnF1ZXVlLCAodm9pZCAqKSAmaXVlLCBzaXplb2Yodm9pZCAqKSk7CisJa2ZpZm9faW5fbG9ja2VkKCZpdWUtPnRhcmdldC0+aXVfcXVldWUucXVldWUsICh2b2lkICopICZpdWUsCisJCQlzaXplb2Yodm9pZCAqKSwgJml1ZS0+dGFyZ2V0LT5pdV9xdWV1ZS5sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNycF9pdV9wdXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCBjZTUyMjcwLi4yY2MzOTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTQxNDIsOCArNDE0Miw4IEBACiAJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAodnBvcnQtPmZjX3JzY25fZmx1c2gpIHsKIAkJLyogQW5vdGhlciB0aHJlYWQgaXMgd2Fsa2luZyBmY19yc2NuX2lkX2xpc3Qgb24gdGhpcyB2cG9ydCAqLwotCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1JTQ05fRElTQ09WRVJZOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCS8qIFNlbmQgYmFjayBBQ0MgKi8KIAkJbHBmY19lbHNfcnNwX2FjYyh2cG9ydCwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwpOwogCQlyZXR1cm4gMDsKQEAgLTU5NDgsOCArNTk0OCw4IEBACiAJCQkJbHBmY19pbml0aWFsX2ZkaXNjKHZwb3J0KTsKIAkJCWJyZWFrOwogCQl9Ci0KIAl9IGVsc2UgeworCQl2cG9ydC0+dnBpX3N0YXRlIHw9IExQRkNfVlBJX1JFR0lTVEVSRUQ7CiAJCWlmICh2cG9ydCA9PSBwaGJhLT5wcG9ydCkKIAkJCWlmIChwaGJhLT5zbGlfcmV2IDwgTFBGQ19TTElfUkVWNCkKIAkJCQlscGZjX2lzc3VlX2ZhYnJpY19yZWdsb2dpbih2cG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IDNiOTQyNDQuLjI0NDVlMzkgMTAwNzU1Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC03NDcsNiArNzQ3LDEwIEBACiAKIAlpZiAocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0xJTktfRE9XTikKIAkJcmV0dXJuIDA7CisKKwkvKiBCbG9jayBhbGwgU0NTSSBzdGFjayBJL09zICovCisJbHBmY19zY3NpX2Rldl9ibG9jayhwaGJhKTsKKwogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfRElTQ09WRVJFRCk7CiAJaWYgKHBoYmEtPmxpbmtfc3RhdGUgPiBMUEZDX0xJTktfRE9XTikgewpAQCAtMTU1NSwxMCArMTU1OSwxNiBAQAogCSAqIHRvIGJvb2sga2VlcGluZyB0aGUgRkNGSXMgY2FuIGJlIHVzZWQuCiAJICovCiAJaWYgKHNoZHJfc3RhdHVzIHx8IHNoZHJfYWRkX3N0YXR1cykgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIyNTIxIFJFQURfRkNGX1JFQ09SRCBtYWlsYm94IGZhaWxlZCAiCi0JCQkJIndpdGggc3RhdHVzIHgleCBhZGRfc3RhdHVzIHgleCwgbWJ4XG4iLAotCQkJCXNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXMpOworCQlpZiAoc2hkcl9zdGF0dXMgPT0gU1RBVFVTX0ZDRl9UQUJMRV9FTVBUWSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJIjI3MjYgUkVBRF9GQ0ZfUkVDT1JEIEluZGljYXRlcyBlbXB0eSAiCisJCQkJCSJGQ0YgdGFibGUuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJCSIyNTIxIFJFQURfRkNGX1JFQ09SRCBtYWlsYm94IGZhaWxlZCAiCisJCQkJCSJ3aXRoIHN0YXR1cyB4JXggYWRkX3N0YXR1cyB4JXgsIG1ieFxuIiwKKwkJCQkJc2hkcl9zdGF0dXMsIHNoZHJfYWRkX3N0YXR1cyk7CisJCX0KIAkJZ290byBvdXQ7CiAJfQogCS8qIEludGVycHJldGluZyB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gb2YgRkNGIHJlY29yZHMgKi8KQEAgLTE2OTgsNyArMTcwOCw5IEBACiAJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9GQUlMRUQpOwogCQlyZXR1cm47CiAJfQorCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXZwb3J0LT5mY19mbGFnICY9IH5GQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCiAJaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX05QSVZfRkFCX1NVUFBPUlRFRCkKIAkJbHBmY19pbml0aWFsX2ZkaXNjKHZwb3J0KTsKQEAgLTIyNTksNyArMjI3MSwxMCBAQAogCQkJCSBtYi0+bWJ4U3RhdHVzKTsKIAkJYnJlYWs7CiAJfQorCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXZwb3J0LT52cGlfc3RhdGUgJj0gfkxQRkNfVlBJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXZwb3J0LT51bnJlZ192cGlfY21wbCA9IFZQT1JUX09LOwogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCS8qCkBAIC00NDc1LDggKzQ0OTAsMTAgQEAKIAkJKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpKQogCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgewogCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0c1tpXSk7CisJCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKIAkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOworCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJfQogCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMTU4NTE0OC4uOGEyYTFjNQotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKQEAgLTEwMTMsNyArMTAxMyw3IEBACiB9OwogCiAjZGVmaW5lIExQRkNfSERSX0JVRl9TSVpFIDEyOAotI2RlZmluZSBMUEZDX0RBVEFfQlVGX1NJWkUgNDA5NgorI2RlZmluZSBMUEZDX0RBVEFfQlVGX1NJWkUgMjA0OAogc3RydWN0IHJxX2NvbnRleHQgewogCXVpbnQzMl90IHdvcmQwOwogI2RlZmluZSBscGZjX3JxX2NvbnRleHRfcnFfc2l6ZV9TSElGVAkxNgpAQCAtMTM3MSw2ICsxMzcxLDcgQEAKICNkZWZpbmUgU1RBVFVTX0VSUk9SX0FDSVRNQUlOCQkJCTB4MmEKICNkZWZpbmUgU1RBVFVTX1JFQk9PVF9SRVFVSVJFRAkJCQkweDJjCiAjZGVmaW5lIFNUQVRVU19GQ0ZfSU5fVVNFCQkJCTB4M2EKKyNkZWZpbmUgU1RBVFVTX0ZDRl9UQUJMRV9FTVBUWQkJCQkweDQzCiAKIHN0cnVjdCBscGZjX21ieF9zbGk0X2NvbmZpZyB7CiAJc3RydWN0IG1ib3hfaGVhZGVyIGhlYWRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggZDRkYTZiZC4uYjhlYjFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTMwMDYsNiArMzAwNiw3IEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0OwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKKwl1aW50MzJfdCBsaW5rX3N0YXRlOwogCiAJcGhiYS0+ZmNfZXZlbnRUYWcgPSBhY3FlX2Zjb2UtPmV2ZW50X3RhZzsKIAlwaGJhLT5mY29lX2V2ZW50dGFnID0gYWNxZV9mY29lLT5ldmVudF90YWc7CkBAIC0zMDUyLDkgKzMwNTMsMTIgQEAKIAkJCWJyZWFrOwogCQkvKgogCQkgKiBDdXJyZW50bHksIGRyaXZlciBzdXBwb3J0IG9ubHkgb25lIEZDRiAtIHNvIHRyZWF0IHRoaXMgYXMKLQkJICogYSBsaW5rIGRvd24uCisJCSAqIGEgbGluayBkb3duLCBidXQgc2F2ZSB0aGUgbGluayBzdGF0ZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQKKwkJICogaXQgdG8gYmUgY2hhbmdlZCB0byBMaW5rIERvd24gdW5sZXNzIGl0IGlzIGFscmVhZHkgZG93bi4KIAkJICovCisJCWxpbmtfc3RhdGUgPSBwaGJhLT5saW5rX3N0YXRlOwogCQlscGZjX2xpbmtkb3duKHBoYmEpOworCQlwaGJhLT5saW5rX3N0YXRlID0gbGlua19zdGF0ZTsKIAkJLyogVW5yZWdpc3RlciBGQ0YgaWYgbm8gZGV2aWNlcyBjb25uZWN0ZWQgdG8gaXQgKi8KIAkJbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2YocGhiYSk7CiAJCWJyZWFrOwpAQCAtNzIyNiw4ICs3MjMwLDYgQEAKIHsKIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJIjI3MTEgUENJIGNoYW5uZWwgcGVybWFuZW50IGRpc2FibGUgZm9yIGZhaWx1cmVcbiIpOwotCS8qIEJsb2NrIGFsbCBTQ1NJIGRldmljZXMnIEkvT3Mgb24gdGhlIGhvc3QgKi8KLQlscGZjX3Njc2lfZGV2X2Jsb2NrKHBoYmEpOwogCS8qIENsZWFuIHVwIGFsbCBkcml2ZXIncyBvdXRzdGFuZGluZyBTQ1NJIEkvT3MgKi8KIAlscGZjX3NsaV9mbHVzaF9mY3BfcmluZ3MocGhiYSk7CiB9CkBAIC03MjU2LDYgKzcyNTgsOSBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9ICgoc3RydWN0IGxwZmNfdnBvcnQgKilzaG9zdC0+aG9zdGRhdGEpLT5waGJhOwogCisJLyogQmxvY2sgYWxsIFNDU0kgZGV2aWNlcycgSS9PcyBvbiB0aGUgaG9zdCAqLworCWxwZmNfc2NzaV9kZXZfYmxvY2socGhiYSk7CisKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19ub3JtYWw6CiAJCS8qIE5vbi1mYXRhbCBlcnJvciwgcHJlcGFyZSBmb3IgcmVjb3ZlcnkgKi8KQEAgLTc1MDcsNiArNzUxMiw5IEBACiAJCQllcnJvciA9IC1FTk9ERVY7CiAJCQlnb3RvIG91dF9mcmVlX3N5c2ZzX2F0dHI7CiAJCX0KKwkJLyogRGVmYXVsdCB0byBzaW5nbGUgRkNQIEVRIGZvciBub24tTVNJLVggKi8KKwkJaWYgKHBoYmEtPmludHJfdHlwZSAhPSBNU0lYKQorCQkJcGhiYS0+Y2ZnX2ZjcF9lcV9jb3VudCA9IDE7CiAJCS8qIFNldCB1cCBTTEktNCBIQkEgKi8KIAkJaWYgKGxwZmNfc2xpNF9oYmFfc2V0dXAocGhiYSkpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCA3OTM1NjY3Li41ODk1NDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKQEAgLTEzODMsNyArMTM4Myw3IEBACiAvKiBIQlEgZm9yIEVMUyBhbmQgQ1QgdHJhZmZpYy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19oYnFfaW5pdCBscGZjX2Vsc19oYnEgPSB7CiAJLnJuID0gMSwKLQkuZW50cnlfY291bnQgPSAyMDAsCisJLmVudHJ5X2NvdW50ID0gMjU2LAogCS5tYXNrX2NvdW50ID0gMCwKIAkucHJvZmlsZSA9IDAsCiAJLnJpbmdfbWFzayA9ICgxIDw8IExQRkNfRUxTX1JJTkcpLApAQCAtMTQ4Miw4ICsxNDgyLDExIEBACiBpbnQKIGxwZmNfc2xpX2hicWJ1Zl9hZGRfaGJxcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IHFubykKIHsKLQlyZXR1cm4obHBmY19zbGlfaGJxYnVmX2ZpbGxfaGJxcyhwaGJhLCBxbm8sCi0JCQkJCSBscGZjX2hicV9kZWZzW3Fub10tPmFkZF9jb3VudCkpOworCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGxwZmNfc2xpX2hicWJ1Zl9maWxsX2hicXMocGhiYSwgcW5vLAorCQkJCQkgbHBmY19oYnFfZGVmc1txbm9dLT5hZGRfY291bnQpOwogfQogCiAvKioKQEAgLTE0OTgsOCArMTUwMSwxMiBAQAogc3RhdGljIGludAogbHBmY19zbGlfaGJxYnVmX2luaXRfaGJxcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IHFubykKIHsKLQlyZXR1cm4obHBmY19zbGlfaGJxYnVmX2ZpbGxfaGJxcyhwaGJhLCBxbm8sCi0JCQkJCSBscGZjX2hicV9kZWZzW3Fub10tPmluaXRfY291bnQpKTsKKwlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQorCQlyZXR1cm4gbHBmY19zbGlfaGJxYnVmX2ZpbGxfaGJxcyhwaGJhLCBxbm8sCisJCQkJCSBscGZjX2hicV9kZWZzW3Fub10tPmVudHJ5X2NvdW50KTsKKwllbHNlCisJCXJldHVybiBscGZjX3NsaV9oYnFidWZfZmlsbF9oYnFzKHBoYmEsIHFubywKKwkJCQkJIGxwZmNfaGJxX2RlZnNbcW5vXS0+aW5pdF9jb3VudCk7CiB9CiAKIC8qKgpAQCAtNDExMCw2ICs0MTE3LDcgQEAKIAlpZiAocmMpIHsKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJnBoYmEtPnBjaWRldi0+ZGV2LCBkbWFfc2l6ZSwKIAkJCQkgIGRtYWJ1Zi0+dmlydCwgZG1hYnVmLT5waHlzKTsKKwkJa2ZyZWUoZG1hYnVmKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC01ODQ4LDcgKzU4NTYsNiBAQAogCQkJCQlpb2NicS0+aW9jYi51bi51bHBXb3JkWzNdKTsKIAkJd3FlLT5nZW5lcmljLndvcmQzID0gMDsKIAkJYmZfc2V0KHdxZV9yY3ZveGlkLCAmd3FlLT5nZW5lcmljLCBpb2NicS0+aW9jYi51bHBDb250ZXh0KTsKLQkJYmZfc2V0KHdxZV94YywgJndxZS0+Z2VuZXJpYywgMSk7CiAJCS8qIFRoZSBlbnRpcmUgc2VxdWVuY2UgaXMgdHJhbnNtaXR0ZWQgZm9yIHRoaXMgSU9DQiAqLwogCQl4bWl0X2xlbiA9IHRvdGFsX2xlbjsKIAkJY21uZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1I7CkBAIC0xMDk0NCw3ICsxMDk1MSw4IEBACiAJCXJldHVybiBkbWFidWY7CiAJfQogCXRlbXBfaGRyID0gc2VxX2RtYWJ1Zi0+aGJ1Zi52aXJ0OwotCWlmIChuZXdfaGRyLT5maF9zZXFfY250IDwgdGVtcF9oZHItPmZoX3NlcV9jbnQpIHsKKwlpZiAoYmUxNl90b19jcHUobmV3X2hkci0+Zmhfc2VxX2NudCkgPAorCQliZTE2X3RvX2NwdSh0ZW1wX2hkci0+Zmhfc2VxX2NudCkpIHsKIAkJbGlzdF9kZWxfaW5pdCgmc2VxX2RtYWJ1Zi0+aGJ1Zi5saXN0KTsKIAkJbGlzdF9hZGRfdGFpbCgmZG1hYnVmLT5oYnVmLmxpc3QsICZ2cG9ydC0+cmN2X2J1ZmZlcl9saXN0KTsKIAkJbGlzdF9hZGRfdGFpbCgmZG1hYnVmLT5kYnVmLmxpc3QsICZzZXFfZG1hYnVmLT5kYnVmLmxpc3QpOwpAQCAtMTA5NTUsNiArMTA5NjMsMTEgQEAKIAlsaXN0X21vdmVfdGFpbCgmc2VxX2RtYWJ1Zi0+aGJ1Zi5saXN0LCAmdnBvcnQtPnJjdl9idWZmZXJfbGlzdCk7CiAJc2VxX2RtYWJ1Zi0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJbHBmY191cGRhdGVfcmN2X3RpbWVfc3RhbXAodnBvcnQpOworCWlmIChsaXN0X2VtcHR5KCZzZXFfZG1hYnVmLT5kYnVmLmxpc3QpKSB7CisJCXRlbXBfaGRyID0gZG1hYnVmLT5oYnVmLnZpcnQ7CisJCWxpc3RfYWRkX3RhaWwoJmRtYWJ1Zi0+ZGJ1Zi5saXN0LCAmc2VxX2RtYWJ1Zi0+ZGJ1Zi5saXN0KTsKKwkJcmV0dXJuIHNlcV9kbWFidWY7CisJfQogCS8qIGZpbmQgdGhlIGNvcnJlY3QgcGxhY2UgaW4gdGhlIHNlcXVlbmNlIHRvIGluc2VydCB0aGlzIGZyYW1lICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGRfYnVmLCAmc2VxX2RtYWJ1Zi0+ZGJ1Zi5saXN0LCBsaXN0KSB7CiAJCXRlbXBfZG1hYnVmID0gY29udGFpbmVyX29mKGRfYnVmLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiwgZGJ1Zik7CkBAIC0xMDk2Myw3ICsxMDk3Niw4IEBACiAJCSAqIElmIHRoZSBmcmFtZSdzIHNlcXVlbmNlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgZnJhbWUgb24KIAkJICogdGhlIGxpc3QgdGhlbiBpbnNlcnQgdGhlIGZyYW1lIHJpZ2h0IGFmdGVyIHRoaXMgZnJhbWUKIAkJICovCi0JCWlmIChuZXdfaGRyLT5maF9zZXFfY250ID4gdGVtcF9oZHItPmZoX3NlcV9jbnQpIHsKKwkJaWYgKGJlMTZfdG9fY3B1KG5ld19oZHItPmZoX3NlcV9jbnQpID4KKwkJCWJlMTZfdG9fY3B1KHRlbXBfaGRyLT5maF9zZXFfY250KSkgewogCQkJbGlzdF9hZGQoJmRtYWJ1Zi0+ZGJ1Zi5saXN0LCAmdGVtcF9kbWFidWYtPmRidWYubGlzdCk7CiAJCQlyZXR1cm4gc2VxX2RtYWJ1ZjsKIAkJfQpAQCAtMTEyMTAsNyArMTEyMjQsNyBAQAogCQlzZXFfZG1hYnVmID0gY29udGFpbmVyX29mKGRfYnVmLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiwgZGJ1Zik7CiAJCWhkciA9IChzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICopc2VxX2RtYWJ1Zi0+aGJ1Zi52aXJ0OwogCQkvKiBJZiB0aGVyZSBpcyBhIGhvbGUgaW4gdGhlIHNlcXVlbmNlIGNvdW50IHRoZW4gZmFpbC4gKi8KLQkJaWYgKCsrc2VxX2NvdW50ICE9IGhkci0+Zmhfc2VxX2NudCkKKwkJaWYgKCsrc2VxX2NvdW50ICE9IGJlMTZfdG9fY3B1KGhkci0+Zmhfc2VxX2NudCkpCiAJCQlyZXR1cm4gMDsKIAkJZmN0bCA9IChoZHItPmZoX2ZfY3RsWzBdIDw8IDE2IHwKIAkJCWhkci0+ZmhfZl9jdGxbMV0gPDwgOCB8CkBAIC0xMTI0Miw2ICsxMTI1Niw3IEBACiAJc3RydWN0IGxwZmNfaW9jYnEgKmZpcnN0X2lvY2JxLCAqaW9jYnE7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmNfaGRyOwogCXVpbnQzMl90IHNpZDsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpwYmRlOwogCiAJZmNfaGRyID0gKHN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKilzZXFfZG1hYnVmLT5oYnVmLnZpcnQ7CiAJLyogcmVtb3ZlIGZyb20gcmVjZWl2ZSBidWZmZXIgbGlzdCAqLwpAQCAtMTEyODMsOCArMTEyOTgsOSBAQAogCQlpZiAoIWlvY2JxLT5jb250ZXh0MykgewogCQkJaW9jYnEtPmNvbnRleHQzID0gZF9idWY7CiAJCQlpb2NicS0+aW9jYi51bHBCZGVDb3VudCsrOwotCQkJaW9jYnEtPmlvY2IudW5zbGkzLnJjdnNsaTMuYmRlMi50dXMuZi5iZGVTaXplID0KLQkJCQkJCQlMUEZDX0RBVEFfQlVGX1NJWkU7CisJCQlwYmRlID0gKHN0cnVjdCB1bHBfYmRlNjQgKikKKwkJCQkJJmlvY2JxLT5pb2NiLnVuc2xpMy5zbGkzV29yZHNbNF07CisJCQlwYmRlLT50dXMuZi5iZGVTaXplID0gTFBGQ19EQVRBX0JVRl9TSVpFOwogCQkJZmlyc3RfaW9jYnEtPmlvY2IudW5zbGkzLnJjdnNsaTMuYWNjX2xlbiArPQogCQkJCWJmX2dldChscGZjX3JjcWVfbGVuZ3RoLAogCQkJCSAgICAgICAmc2VxX2RtYWJ1Zi0+Y3FfZXZlbnQuY3FlLnJjcWVfY21wbCk7CkBAIC0xMTQwMSwxNSArMTE0MTcsOSBAQAogCQlyZXR1cm47CiAJfQogCS8qIElmIG5vdCBsYXN0IGZyYW1lIGluIHNlcXVlbmNlIGNvbnRpbnVlIHByb2Nlc3NpbmcgZnJhbWVzLiAqLwotCWlmICghbHBmY19zZXFfY29tcGxldGUoc2VxX2RtYWJ1ZikpIHsKLQkJLyoKLQkJICogV2hlbiBzYXZpbmcgb2ZmIGZyYW1lcyBwb3N0IGEgbmV3IG9uZSBhbmQgbWFyayB0aGlzCi0JCSAqIGZyYW1lIHRvIGJlIGZyZWVkIHdoZW4gaXQgaXMgZmluaXNoZWQuCi0JCSAqKi8KLQkJbHBmY19zbGlfaGJxYnVmX2ZpbGxfaGJxcyhwaGJhLCBMUEZDX0VMU19IQlEsIDEpOwotCQlkbWFidWYtPnRhZyA9IC0xOworCWlmICghbHBmY19zZXFfY29tcGxldGUoc2VxX2RtYWJ1ZikpCiAJCXJldHVybjsKLQl9CisKIAkvKiBTZW5kIHRoZSBjb21wbGV0ZSBzZXF1ZW5jZSB0byB0aGUgdXBwZXIgbGF5ZXIgcHJvdG9jb2wgKi8KIAlscGZjX3NsaTRfc2VuZF9zZXFfdG9fdWxwKHZwb3J0LCBzZXFfZG1hYnVmKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKaW5kZXggMjVkNjZkMC4uNDRlNWY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKQEAgLTI4LDcgKzI4LDcgQEAKIC8qIE11bHRpLXF1ZXVlIGFycmFuZ2VtZW50IGZvciBmYXN0LXBhdGggRkNQIHdvcmsgcXVldWVzICovCiAjZGVmaW5lIExQRkNfRk5fRVFOX01BWCAgICAgICA4CiAjZGVmaW5lIExQRkNfU1BfRVFOX0RFRiAgICAgICAxCi0jZGVmaW5lIExQRkNfRlBfRVFOX0RFRiAgICAgICAxCisjZGVmaW5lIExQRkNfRlBfRVFOX0RFRiAgICAgICA0CiAjZGVmaW5lIExQRkNfRlBfRVFOX01JTiAgICAgICAxCiAjZGVmaW5lIExQRkNfRlBfRVFOX01BWCAgICAgICAoTFBGQ19GTl9FUU5fTUFYIC0gTFBGQ19TUF9FUU5fREVGKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IGM3ZjNhZWQuLjc5MmY3MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4zLjYiCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy43IgogI2RlZmluZSBMUEZDX0RSSVZFUl9OQU1FCQkibHBmYyIKICNkZWZpbmUgTFBGQ19TUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOnNwIgogI2RlZmluZSBMUEZDX0ZQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6ZnAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKaW5kZXggN2Q2ZGQ4My4uZTNjN2ZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwpAQCAtNTEyLDggKzUxMiwxMCBAQAogCQlyZXR1cm4gVlBPUlRfT0s7CiAJfQogCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJdnBvcnQtPmxvYWRfZmxhZyB8PSBGQ19MT0FESU5HOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCS8qIFVzZSB0aGUgUGh5c2ljYWwgbm9kZXMgRmFicmljIE5ETFAgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsaW5rIGlzCiAJICogdXAgYW5kIHJlYWR5IHRvIEZESVNDLgpAQCAtNzAwLDcgKzcwMiw3IEBACiAJCQl9CiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPm5kbHBfbG9jayk7CiAJCX0KLQkJaWYgKHZwb3J0LT52cGlfc3RhdGUgIT0gTFBGQ19WUElfUkVHSVNURVJFRCkKKwkJaWYgKCEodnBvcnQtPnZwaV9zdGF0ZSAmIExQRkNfVlBJX1JFR0lTVEVSRUQpKQogCQkJZ290byBza2lwX2xvZ287CiAJCXZwb3J0LT51bnJlZ192cGlfY21wbCA9IFZQT1JUX0lOVkFMOwogCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhwaGJhLT5mY19yYXRvdiAqIDIwMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggZTdkMjY4OC4uYjZmMWVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0yNDgzLDE0ICsyNDgzLDEyIEBACiAJCQlzZW5zZV9jb3BpZWQgPSAxOwogCQl9CiAKLQkJaWYgKFJFU19JU19HU0NTSShyZXMtPmNmZ19lbnRyeSkpIHsKKwkJaWYgKFJFU19JU19HU0NTSShyZXMtPmNmZ19lbnRyeSkpCiAJCQlwbWNyYWlkX2NhbmNlbF9hbGwoY21kLCBzZW5zZV9jb3BpZWQpOwotCQl9IGVsc2UgaWYgKHNlbnNlX2NvcGllZCkgeworCQllbHNlIGlmIChzZW5zZV9jb3BpZWQpCiAJCQlwbWNyYWlkX2VycF9kb25lKGNtZCk7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlICB7CisJCWVsc2UKIAkJCXBtY3JhaWRfcmVxdWVzdF9zZW5zZShjbWQpOwotCQl9CiAKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IDIxZTJiYzQuLjNhOWY1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMjMyLDYgKzIzMiw5IEBACiAJaWYgKG9mZikKIAkJcmV0dXJuIDA7CiAKKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKQorCQlyZXR1cm4gMDsKKwogCWlmIChzc2NhbmYoYnVmLCAiJWQ6JXg6JXgiLCAmdmFsLCAmc3RhcnQsICZzaXplKSA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChzdGFydCA+IGhhLT5vcHRyb21fc2l6ZSkKQEAgLTM3OSw2ICszODIsOSBAQAogCSAgICBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSkpOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAwOwogCkBAIC0zOTgsNiArNDA0LDkgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAl1aW50OF90ICp0bXBfZGF0YTsKIAorCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkpCisJCXJldHVybiAwOworCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IG9mZiAhPSAwIHx8IGNvdW50ICE9IGhhLT52cGRfc2l6ZSB8fAogCSAgICAhaGEtPmlzcF9vcHMtPndyaXRlX252cmFtKQogCQlyZXR1cm4gMDsKQEAgLTEyMzgsMTAgKzEyNDcsMTEgQEAKICAgICBjaGFyICpidWYpCiB7CiAJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOwotCWludCBydmFsOworCWludCBydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl1aW50MTZfdCBzdGF0ZVs1XTsKIAotCXJ2YWwgPSBxbGEyeDAwX2dldF9maXJtd2FyZV9zdGF0ZSh2aGEsIHN0YXRlKTsKKwlpZiAoIXZoYS0+aHctPmZsYWdzLmVlaF9idXN5KQorCQlydmFsID0gcWxhMngwMF9nZXRfZmlybXdhcmVfc3RhdGUodmhhLCBzdGF0ZSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCiAJCW1lbXNldChzdGF0ZSwgLTEsIHNpemVvZihzdGF0ZSkpOwogCkBAIC0xNDUyLDEwICsxNDYyLDEzIEBACiAJaWYgKCFmY3BvcnQpCiAJCXJldHVybjsKIAotCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGZjcG9ydC0+dmhhLT5ody0+cGRldikpKQorCWlmICh0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmZmNwb3J0LT52aGEtPmRwY19mbGFncykpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGZjcG9ydC0+dmhhLT5ody0+cGRldikpKSB7CiAJCXFsYTJ4MDBfYWJvcnRfYWxsX2NtZHMoZmNwb3J0LT52aGEsIERJRF9OT19DT05ORUNUIDw8IDE2KTsKLQllbHNlCi0JCXFsYTJ4MDBfYWJvcnRfZmNwb3J0X2NtZHMoZmNwb3J0KTsKKwkJcmV0dXJuOworCX0KIAogCS8qCiAJICogVHJhbnNwb3J0IGhhcyBlZmZlY3RpdmVseSAnZGVsZXRlZCcgdGhlIHJwb3J0LCBjbGVhcgpAQCAtMTQ3NSw2ICsxNDg4LDkgQEAKIAlpZiAoIWZjcG9ydCkKIAkJcmV0dXJuOwogCisJaWYgKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZmY3BvcnQtPnZoYS0+ZHBjX2ZsYWdzKSkKKwkJcmV0dXJuOworCiAJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoZmNwb3J0LT52aGEtPmh3LT5wZGV2KSkpIHsKIAkJcWxhMngwMF9hYm9ydF9hbGxfY21kcyhmY3BvcnQtPnZoYSwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOwogCQlyZXR1cm47CkBAIC0xNTE1LDYgKzE1MzEsMTIgQEAKIAlwZmNfaG9zdF9zdGF0ID0gJmhhLT5mY19ob3N0X3N0YXQ7CiAJbWVtc2V0KHBmY19ob3N0X3N0YXQsIC0xLCBzaXplb2Yoc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcykpOwogCisJaWYgKHRlc3RfYml0KFVOTE9BRElORywgJnZoYS0+ZHBjX2ZsYWdzKSkKKwkJZ290byBkb25lOworCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKSkKKwkJZ290byBkb25lOworCiAJc3RhdHMgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJnN0YXRzX2RtYSk7CiAJaWYgKHN0YXRzID09IE5VTEwpIHsKIAkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5LlxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaAppbmRleCBmNjYwZGQ3Li5kNmQ5Yzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCkBAIC0yNiw3ICsyNiw3IEBACiAvKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzE0ICovIC8qIE91dHB1dCBSU0NOIHRyYWNlIG1zZ3MgKi8KIC8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMTUgKi8gLyogT3V0cHV0IE5QSVYgdHJhY2UgbXNncyAqLwogLyogI2RlZmluZSBRTF9ERUJVR19MRVZFTF8xNiAqLyAvKiBPdXRwdXQgSVNQODRYWCB0cmFjZSBtc2dzICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzE3ICovIC8qIE91dHB1dCBNVUxUSS1RIHRyYWNlIG1lc3NhZ2VzICovCisvKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzE3ICovIC8qIE91dHB1dCBFRUggdHJhY2UgbWVzc2FnZXMgKi8KIAogLyoKICogTWFjcm9zIHVzZSBmb3IgZGVidWdnaW5nIHRoZSBkcml2ZXIuCkBAIC0xMzIsNiArMTMyLDEzIEBACiAjZWxzZQogI2RlZmluZSBERUJVRzE2KHgpCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCisKKyNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzE3KQorI2RlZmluZSBERUJVRzE3KHgpCWRvIHt4O30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBERUJVRzE3KHgpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKIC8qCiAgKiBGaXJtd2FyZSBEdW1wIHN0cnVjdHVyZSBkZWZpbml0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCAzODRhZmRhLi42MDhlNjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0yMjU2LDExICsyMjU2LDEzIEBACiAJCXVpbnQzMl90CWRpc2FibGVfc2VyZGVzCQk6MTsKIAkJdWludDMyX3QJZ3BzY19zdXBwb3J0ZWQJCToxOwogCQl1aW50MzJfdAlucGl2X3N1cHBvcnRlZAkJOjE7CisJCXVpbnQzMl90CXBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZQk6MTsKIAkJdWludDMyX3QJZmNlX2VuYWJsZWQJCToxOwogCQl1aW50MzJfdAlmYWNfc3VwcG9ydGVkCQk6MTsKIAkJdWludDMyX3QJY2hpcF9yZXNldF9kb25lCQk6MTsKIAkJdWludDMyX3QJcG9ydDAJCQk6MTsKIAkJdWludDMyX3QJcnVubmluZ19nb2xkX2Z3CQk6MTsKKwkJdWludDMyX3QJZWVoX2J1c3kJCToxOwogCQl1aW50MzJfdAljcHVfYWZmaW5pdHlfZW5hYmxlZAk6MTsKIAkJdWludDMyX3QJZGlzYWJsZV9tc2l4X2hhbmRzaGFrZQk6MTsKIAl9IGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IDBiNjgwMWYuLmY2MWZiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTMyNCw2ICszMjQsNyBAQAogZXh0ZXJuIGludAogcWxhMngwMF93cml0ZV9yYW1fd29yZChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIAorZXh0ZXJuIGludCBxbGEyeDAwX2dldF9kYXRhX3JhdGUoc2NzaV9xbGFfaG9zdF90ICopOwogLyoKICAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV9pc3IuYyBzb3VyY2UgZmlsZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggNzNhNzkzNS4uYjRhMGVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0yNjksNiArMjY5LDggQEAKIAl2aGEtPmZsYWdzLm9ubGluZSA9IDA7CiAJaGEtPmZsYWdzLmNoaXBfcmVzZXRfZG9uZSA9IDA7CiAJdmhhLT5mbGFncy5yZXNldF9hY3RpdmUgPSAwOworCWhhLT5mbGFncy5wY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUgPSAwOworCWhhLT5mbGFncy5lZWhfYnVzeSA9IDA7CiAJYXRvbWljX3NldCgmdmhhLT5sb29wX2Rvd25fdGltZXIsIExPT1BfRE9XTl9USU1FKTsKIAlhdG9taWNfc2V0KCZ2aGEtPmxvb3Bfc3RhdGUsIExPT1BfRE9XTik7CiAJdmhhLT5kZXZpY2VfZmxhZ3MgPSBERkxHX05PX0NBQkxFOwpAQCAtNTgxLDYgKzU4Myw5IEBACiAJdWludDMyX3QJY250OwogCXVpbnQxNl90CWNtZDsKIAorCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkpCisJCXJldHVybjsKKwogCWhhLT5pc3Bfb3BzLT5kaXNhYmxlX2ludHJzKGhhKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwpAQCAtNzg2LDYgKzc5MSwxMiBAQAogcWxhMjR4eF9yZXNldF9jaGlwKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogewogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpICYmCisJICAgIGhhLT5mbGFncy5wY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHsKKwkJcmV0dXJuOworCX0KKwogCWhhLT5pc3Bfb3BzLT5kaXNhYmxlX2ludHJzKGhhKTsKIAogCS8qIFBlcmZvcm0gUklTQyByZXNldC4gKi8KQEAgLTIyNjYsNiArMjI3Nyw4IEBACiAJY2xlYXJfYml0KExPQ0FMX0xPT1BfVVBEQVRFLCAmdmhhLT5kcGNfZmxhZ3MpOwogCWNsZWFyX2JpdChSU0NOX1VQREFURSwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAorCXFsYTJ4MDBfZ2V0X2RhdGFfcmF0ZSh2aGEpOworCiAJLyogRGV0ZXJtaW5lIHdoYXQgd2UgbmVlZCB0byBkbyAqLwogCWlmIChoYS0+Y3VycmVudF90b3BvbG9neSA9PSBJU1BfQ0ZHX0ZMICYmCiAJICAgICh0ZXN0X2JpdChMT0NBTF9MT09QX1VQREFURSwgJmZsYWdzKSkpIHsKQEAgLTM1NjAsNiArMzU3MywxMyBAQAogCQkvKiBSZXF1ZXVlIGFsbCBjb21tYW5kcyBpbiBvdXRzdGFuZGluZyBjb21tYW5kIGxpc3QuICovCiAJCXFsYTJ4MDBfYWJvcnRfYWxsX2NtZHModmhhLCBESURfUkVTRVQgPDwgMTYpOwogCisJCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSAmJgorCQkgICAgaGEtPmZsYWdzLnBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkpIHsKKwkJCWNsZWFyX2JpdChJU1BfQUJPUlRfUkVUUlksICZ2aGEtPmRwY19mbGFncyk7CisJCQlzdGF0dXMgPSAwOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCiAJCWhhLT5pc3Bfb3BzLT5nZXRfZmxhc2hfdmVyc2lvbih2aGEsIHJlcS0+cmluZyk7CiAKIAkJaGEtPmlzcF9vcHMtPm52cmFtX2NvbmZpZyh2aGEpOwpAQCAtNDQ1OCw2ICs0NDc4LDggQEAKIAlpbnQgcmV0LCByZXRyaWVzOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJaWYgKGhhLT5mbGFncy5wY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCXJldHVybjsKIAlpZiAoIUlTX0ZXSTJfQ0FQQUJMRShoYSkpCiAJCXJldHVybjsKIAlpZiAoIWhhLT5md19tYWpvcl92ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IDE2OTJhODguLmZmZDBlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCWZvciAoaXRlciA9IDUwOyBpdGVyLS07ICkgewogCQlzdGF0ID0gUkRfUkVHX0RXT1JEKCZyZWctPnUuaXNwMjMwMC5ob3N0X3N0YXR1cyk7CiAJCWlmIChzdGF0ICYgSFNSX1JJU0NfUEFVU0VEKSB7Ci0JCQlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpCisJCQlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKQogCQkJCWJyZWFrOwogCiAJCQloY2NyID0gUkRfUkVHX1dPUkQoJnJlZy0+aGNjcik7CkBAIC0xODQ2LDEyICsxODQ2LDE1IEBACiAJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OwogCXN0YXR1cyA9IDA7CiAKKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAl2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCWZvciAoaXRlciA9IDUwOyBpdGVyLS07ICkgewogCQlzdGF0ID0gUkRfUkVHX0RXT1JEKCZyZWctPmhvc3Rfc3RhdHVzKTsKIAkJaWYgKHN0YXQgJiBIU1JYX1JJU0NfUEFVU0VEKSB7Ci0JCQlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpCisJCQlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKQogCQkJCWJyZWFrOwogCiAJCQloY2NyID0gUkRfUkVHX0RXT1JEKCZyZWctPmhjY3IpOwpAQCAtMTk5Miw3ICsxOTk1LDcgQEAKIAlkbyB7CiAJCXN0YXQgPSBSRF9SRUdfRFdPUkQoJnJlZy0+aG9zdF9zdGF0dXMpOwogCQlpZiAoc3RhdCAmIEhTUlhfUklTQ19QQVVTRUQpIHsKLQkJCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkKKwkJCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkpCiAJCQkJYnJlYWs7CiAKIAkJCWhjY3IgPSBSRF9SRUdfRFdPUkQoJnJlZy0+aGNjcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggMDVkNTk1ZC4uMDU2ZTRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtNTYsNiArNTYsMTIgQEAKIAogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGJhc2VfdmhhLT5ob3N0X25vKSk7CiAKKwlpZiAoaGEtPmZsYWdzLnBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgeworCQlERUJVRyhwcmludGsoIiVzKCVsZCk6IFBlcm0gZmFpbHVyZSBvbiBFRUgsIHRpbWVvdXQgTUJYICIKKwkJCSAgICAgIkV4aXRpbmcuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXJldHVybiBRTEFfRlVOQ1RJT05fVElNRU9VVDsKKwl9CisKIAkvKgogCSAqIFdhaXQgZm9yIGFjdGl2ZSBtYWlsYm94IGNvbW1hbmRzIHRvIGZpbmlzaCBieSB3YWl0aW5nIGF0IG1vc3QgdG92CiAJICogc2Vjb25kcy4gVGhpcyBpcyB0byBzZXJpYWxpemUgYWN0dWFsIGlzc3Vpbmcgb2YgbWFpbGJveCBjbWRzIGR1cmluZwpAQCAtMTU0LDEwICsxNjAsMTQgQEAKIAkJCS8qIENoZWNrIGZvciBwZW5kaW5nIGludGVycnVwdHMuICovCiAJCQlxbGEyeDAwX3BvbGwoaGEtPnJzcF9xX21hcFswXSk7CiAKLQkJCWlmIChjb21tYW5kICE9IE1CQ19MT0FEX1JJU0NfUkFNX0VYVEVOREVEICYmCi0JCQkgICAgIWhhLT5mbGFncy5tYm94X2ludCkKKwkJCWlmICghaGEtPmZsYWdzLm1ib3hfaW50ICYmCisJCQkgICAgIShJU19RTEEyMjAwKGhhKSAmJgorCQkJICAgIGNvbW1hbmQgPT0gTUJDX0xPQURfUklTQ19SQU1fRVhURU5ERUQpKQogCQkJCW1zbGVlcCgxMCk7CiAJCX0gLyogd2hpbGUgKi8KKwkJREVCVUcxNyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkiV2FpdGVkICVkIHNlY1xuIiwKKwkJCSh1aW50KSgoamlmZmllcyAtICh3YWl0X3RpbWUgLSAobWNwLT50b3YgKiBIWikpKS9IWikpKTsKIAl9CiAKIAkvKiBDaGVjayB3aGV0aGVyIHdlIHRpbWVkIG91dCAqLwpAQCAtMjI3LDcgKzIzNyw4IEBACiAKIAlpZiAocnZhbCA9PSBRTEFfRlVOQ1RJT05fVElNRU9VVCAmJgogCSAgICBtY3AtPm1iWzBdICE9IE1CQ19HRU5fU1lTVEVNX0VSUk9SKSB7Ci0JCWlmICghaW9fbG9ja19vbiB8fCAobWNwLT5mbGFncyAmIElPQ1RMX0NNRCkpIHsKKwkJaWYgKCFpb19sb2NrX29uIHx8IChtY3AtPmZsYWdzICYgSU9DVExfQ01EKSB8fAorCQkgICAgaGEtPmZsYWdzLmVlaF9idXN5KSB7CiAJCQkvKiBub3QgaW4gZHBjLiBzY2hlZHVsZSBpdCBmb3IgZHBjIHRvIHRha2Ugb3Zlci4gKi8KIAkJCURFQlVHKHByaW50aygiJXMoJWxkKTogdGltZW91dCBzY2hlZHVsZSAiCiAJCQkiaXNwX2Fib3J0X25lZWRlZC5cbiIsIF9fZnVuY19fLApAQCAtMjM3LDcgKzI0OCw3IEBACiAJCQliYXNlX3ZoYS0+aG9zdF9ubykpOwogCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cnJlZC4gU2NoZWR1bGluZyBJU1AgIgotCQkJICAgICJhYm9ydC5cbiIpOworCQkJICAgICJhYm9ydC4gZWVoX2J1c3k6IDB4JXhcbiIsIGhhLT5mbGFncy5lZWhfYnVzeSk7CiAJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKIAkJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKIAkJfSBlbHNlIGlmICghYWJvcnRfYWN0aXZlKSB7CkBAIC0yNTMwLDYgKzI1NDEsOSBAQAogCWlmICghSVNfRldJMl9DQVBBQkxFKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAorCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHZoYS0+aHctPnBkZXYpKSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CisKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfVFJBQ0VfQ09OVFJPTDsKQEAgLTI1NjUsNiArMjU3OSw5IEBACiAJaWYgKCFJU19GV0kyX0NBUEFCTEUodmhhLT5odykpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUodmhhLT5ody0+cGRldikpKQorCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19UUkFDRV9DT05UUk9MOwpAQCAtMjU5NSw2ICsyNjEyLDkgQEAKIAlpZiAoIUlTX1FMQTI1WFgodmhhLT5odykgJiYgIUlTX1FMQTgxWFgodmhhLT5odykpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUodmhhLT5ody0+cGRldikpKQorCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19UUkFDRV9DT05UUk9MOwpAQCAtMjYzOSw2ICsyNjU5LDkgQEAKIAlpZiAoIUlTX0ZXSTJfQ0FQQUJMRSh2aGEtPmh3KSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZSh2aGEtPmh3LT5wZGV2KSkpCisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCiAJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX1RSQUNFX0NPTlRST0w7CkBAIC0zNjQzLDMgKzM2NjYsMzYgQEAKIAogCXJldHVybiBydmFsOwogfQorCitpbnQKK3FsYTJ4MDBfZ2V0X2RhdGFfcmF0ZShzY3NpX3FsYV9ob3N0X3QgKnZoYSkKK3sKKwlpbnQgcnZhbDsKKwltYnhfY21kX3QgbWM7CisJbWJ4X2NtZF90ICptY3AgPSAmbWM7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlpZiAoIUlTX0ZXSTJfQ0FQQUJMRShoYSkpCisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCisJREVCVUcxMShwcmludGsoS0VSTl9JTkZPICIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCisJbWNwLT5tYlswXSA9IE1CQ19EQVRBX1JBVEU7CisJbWNwLT5tYlsxXSA9IDA7CisJbWNwLT5vdXRfbWIgPSBNQlhfMXxNQlhfMDsKKwltY3AtPmluX21iID0gTUJYXzJ8TUJYXzF8TUJYXzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CisJbWNwLT5mbGFncyA9IDA7CisJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzJfM18xMShwcmludGsoS0VSTl9JTkZPICIlcyglbGQpOiBmYWlsZWQ9JXggbWJbMF09JXguXG4iLAorCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOworCX0gZWxzZSB7CisJCURFQlVHMTEocHJpbnRrKEtFUk5fSU5GTworCQkgICAgIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCWlmIChtY3AtPm1iWzFdICE9IDB4NykKKwkJCWhhLT5saW5rX2RhdGFfcmF0ZSA9IG1jcC0+bWJbMV07CisJfQorCisJcmV0dXJuIHJ2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKaW5kZXggMmE0YzdmNC4uYjkwMWFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwpAQCAtNjM5LDggKzYzOSwxMCBAQAogCXN0cnVjdCByc3BfcXVlICpyc3AgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJzcF9xdWUsIHFfd29yayk7CiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYTsKIAorCXNwaW5fbG9ja19pcnEoJnJzcC0+aHctPmhhcmR3YXJlX2xvY2spOwogCXZoYSA9IHFsYTI1eHhfZ2V0X2hvc3QocnNwKTsKIAlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUodmhhLCByc3ApOworCXNwaW5fdW5sb2NrX2lycSgmcnNwLT5ody0+aGFyZHdhcmVfbG9jayk7CiB9CiAKIC8qIGNyZWF0ZSByZXNwb25zZSBxdWV1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCAyZjg3M2QyLi4yMDlmNTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtNDc1LDExICs0NzUsMTEgQEAKIAlzcmJfdCAqc3A7CiAJaW50IHJ2YWw7CiAKLQlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKSB7Ci0JCWlmIChoYS0+cGRldi0+ZXJyb3Jfc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fZnJvemVuKQotCQkJY21kLT5yZXN1bHQgPSBESURfUkVRVUVVRSA8PCAxNjsKLQkJZWxzZQorCWlmIChoYS0+ZmxhZ3MuZWVoX2J1c3kpIHsKKwkJaWYgKGhhLT5mbGFncy5wY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQllbHNlCisJCQljbWQtPnJlc3VsdCA9IERJRF9SRVFVRVVFIDw8IDE2OwogCQlnb3RvIHFjMjRfZmFpbF9jb21tYW5kOwogCX0KIApAQCAtNTUyLDggKzU1MiwxNSBAQAogI2RlZmluZSBBQk9SVF9QT0xMSU5HX1BFUklPRAkxMDAwCiAjZGVmaW5lIEFCT1JUX1dBSVRfSVRFUgkJKCgxMCAqIDEwMDApIC8gKEFCT1JUX1BPTExJTkdfUEVSSU9EKSkKIAl1bnNpZ25lZCBsb25nIHdhaXRfaXRlciA9IEFCT1JUX1dBSVRfSVRFUjsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCWludCByZXQgPSBRTEFfU1VDQ0VTUzsKIAorCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkgfHwgaGEtPmZsYWdzLmVlaF9idXN5KSB7CisJCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAicmV0dXJuOmVoX3dhaXRcbiIpKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAl3aGlsZSAoQ01EX1NQKGNtZCkgJiYgd2FpdF9pdGVyLS0pIHsKIAkJbXNsZWVwKEFCT1JUX1BPTExJTkdfUEVSSU9EKTsKIAl9CkBAIC0xODEwLDYgKzE4MTcsMTMgQEAKIAogCS8qIFNldCBJU1AtdHlwZSBpbmZvcm1hdGlvbi4gKi8KIAlxbGEyeDAwX3NldF9pc3BfZmxhZ3MoaGEpOworCisJLyogU2V0IEVFSCByZXNldCB0eXBlIHRvIGZ1bmRhbWVudGFsIGlmIHJlcXVpcmVkIGJ5IGhiYSAqLworCWlmICggSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpIHsKKwkJcGRldi0+bmVlZHNfZnJlc2V0ID0gMTsKKwkJcGNpX3NhdmVfc3RhdGUocGRldik7CisJfQorCiAJLyogQ29uZmlndXJlIFBDSSBJL08gc3BhY2UgKi8KIAlyZXQgPSBxbGEyeDAwX2lvc3BhY2VfY29uZmlnKGhhKTsKIAlpZiAocmV0KQpAQCAtMjE3NCw2ICsyMTg4LDI0IEBACiB7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKKwlxbGEyeDAwX2Fib3J0X2FsbF9jbWRzKHZoYSwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOworCisJLyogRGlzYWJsZSB0aW1lciAqLworCWlmICh2aGEtPnRpbWVyX2FjdGl2ZSkKKwkJcWxhMngwMF9zdG9wX3RpbWVyKHZoYSk7CisKKwkvKiBLaWxsIHRoZSBrZXJuZWwgdGhyZWFkIGZvciB0aGlzIGhvc3QgKi8KKwlpZiAoaGEtPmRwY190aHJlYWQpIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gaGEtPmRwY190aHJlYWQ7CisKKwkJLyoKKwkJICogcWxhMnh4eF93YWtlX2RwYyBjaGVja3MgZm9yIC0+ZHBjX3RocmVhZAorCQkgKiBzbyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0LgorCQkgKi8KKwkJaGEtPmRwY190aHJlYWQgPSBOVUxMOworCQlrdGhyZWFkX3N0b3AodCk7CisJfQorCiAJcWxhMjV4eF9kZWxldGVfcXVldWVzKHZoYSk7CiAKIAlpZiAoaGEtPmZsYWdzLmZjZV9lbmFibGVkKQpAQCAtMjE4NSw2ICsyMjE3LDggQEAKIAkvKiBTdG9wIGN1cnJlbnRseSBleGVjdXRpbmcgZmlybXdhcmUuICovCiAJcWxhMngwMF90cnlfdG9fc3RvcF9maXJtd2FyZSh2aGEpOwogCisJdmhhLT5mbGFncy5vbmxpbmUgPSAwOworCiAJLyogdHVybi1vZmYgaW50ZXJydXB0cyBvbiB0aGUgY2FyZCAqLwogCWlmIChoYS0+aW50ZXJydXB0c19vbikKIAkJaGEtPmlzcF9vcHMtPmRpc2FibGVfaW50cnMoaGEpOwpAQCAtMjg1OSw2ICsyODkzLDEzIEBACiAJCWlmICghYmFzZV92aGEtPmZsYWdzLmluaXRfZG9uZSkKIAkJCWNvbnRpbnVlOwogCisJCWlmIChoYS0+ZmxhZ3MuZWVoX2J1c3kpIHsKKwkJCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJICAgICJxbGEyeDAwX2RvX2RwYzogZHBjX2ZsYWdzOiAlbHhcbiIsCisJCQkgICAgYmFzZV92aGEtPmRwY19mbGFncykpOworCQkJY29udGludWU7CisJCX0KKwogCQlERUJVRzMocHJpbnRrKCJzY3NpKCVsZCk6IERQQyBoYW5kbGVyXG4iLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwogCiAJCWhhLT5kcGNfYWN0aXZlID0gMTsKQEAgLTMwNDksOCArMzA5MCwxMyBAQAogCWludAkJaW5kZXg7CiAJc3JiX3QJCSpzcDsKIAlpbnQJCXQ7CisJdWludDE2X3QgICAgICAgIHc7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcTsKKworCS8qIEhhcmR3YXJlIHJlYWQgdG8gcmFpc2UgcGVuZGluZyBFRUggZXJyb3JzIGR1cmluZyBtYWlsYm94IHdhaXRzLiAqLworCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBQQ0lfVkVORE9SX0lELCAmdyk7CiAJLyoKIAkgKiBQb3J0cyAtIFBvcnQgZG93biB0aW1lci4KIAkgKgpAQCAtMzI1MiwxNiArMzI5OCwyMyBAQAogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QKIHFsYTJ4eHhfcGNpX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQogewotCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiZXJyb3JfZGV0ZWN0ZWQ6c3RhdGUgJXhcbiIsCisJICAgIHN0YXRlKSk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19ub3JtYWw6CisJCWhhLT5mbGFncy5lZWhfYnVzeSA9IDA7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9DQU5fUkVDT1ZFUjsKIAljYXNlIHBjaV9jaGFubmVsX2lvX2Zyb3plbjoKKwkJaGEtPmZsYWdzLmVlaF9idXN5ID0gMTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKIAljYXNlIHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZToKLQkJcWxhMngwMF9hYm9ydF9hbGxfY21kcyhiYXNlX3ZoYSwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOworCQloYS0+ZmxhZ3MucGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlID0gMTsKKwkJcWxhMngwMF9hYm9ydF9hbGxfY21kcyh2aGEsIERJRF9OT19DT05ORUNUIDw8IDE2KTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwpAQCAtMzMxMiw2ICszMzY1LDggQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gYmFzZV92aGEtPmh3OwogCWludCByYzsKIAorCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2xvdF9yZXNldFxuIikpOworCiAJaWYgKGhhLT5tZW1fb25seSkKIAkJcmMgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJZWxzZQpAQCAtMzMyMCwxOSArMzM3NSwzMyBAQAogCWlmIChyYykgewogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCSAgICAiQ2FuJ3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKLQogCQlyZXR1cm4gcmV0OwogCX0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCWlmIChoYS0+aXNwX29wcy0+cGNpX2NvbmZpZyhiYXNlX3ZoYSkpCiAJCXJldHVybiByZXQ7CiAKKyNpZmRlZiBRTF9ERUJVR19MRVZFTF8xNworCXsKKwkJdWludDhfdCBiOworCQl1aW50MzJfdCBpOworCisJCXByaW50aygic2xvdF9yZXNldF8xOiAiKTsKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShoYS0+cGRldiwgaSwgJmIpOworCQkJcHJpbnRrKCIlcyUwMngiLCAoaSUxNikgPyAiICIgOiAiXG4iLCBiKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorI2VuZGlmCiAJc2V0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJaWYgKHFsYTJ4MDBfYWJvcnRfaXNwKGJhc2VfdmhhKSA9PSBRTEFfU1VDQ0VTUykKIAkJcmV0ID0gIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAljbGVhcl9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCisJREVCVUcxNyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJICAgICJzbG90X3Jlc2V0LXJldHVybjpyZXQ9JXhcbiIsIHJldCkpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzM0MywxMiArMzQxMiwxNyBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSBiYXNlX3ZoYS0+aHc7CiAJaW50IHJldDsKIAorCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAicGNpX3Jlc3VtZVxuIikpOworCiAJcmV0ID0gcWxhMngwMF93YWl0X2Zvcl9oYmFfb25saW5lKGJhc2VfdmhhKTsKIAlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7CiAJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAogCQkgICAgInRoZSBkZXZpY2UgZmFpbGVkIHRvIHJlc3VtZSBJL08gIgogCQkgICAgImZyb20gc2xvdC9saW5rX3Jlc2V0Iik7CiAJfQorCisJaGEtPmZsYWdzLmVlaF9idXN5ID0gMDsKKwogCXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCBjNDgyMjIwLi5hNjVkZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMS1rOCIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDEtazkiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3RleC5jIGIvZHJpdmVycy9zY3NpL3N0ZXguYwppbmRleCAzMDU4YmIxLi5mZDdiMTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3RleC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdGV4LmMKQEAgLTYyMyw2ICs2MjMsMTEgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIElOUVVJUlk6CisJCWlmIChsdW4gPj0gaG9zdC0+bWF4X2x1bikgeworCQkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJCWRvbmUoY21kKTsKKwkJCXJldHVybiAwOworCQl9CiAJCWlmIChpZCAhPSBob3N0LT5tYXhfaWQgLSAxKQogCQkJYnJlYWs7CiAJCWlmICghbHVuICYmICFjbWQtPmRldmljZS0+Y2hhbm5lbCAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCA2OGM3ZjZjLi4zN2YwZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtMjIyLDkgKzIyMiw5IEBACiAJCSAgIFNldCBTQ1A2TUQxLDAgPSB7MDF9IChvdXRwdXQpICAqLwogCQlfX3Jhd193cml0ZXcoKGRhdGEgJiAweDBmY2YpIHwgMHgxMDAwLCBTQ1BDUik7CiAKLQkJZGF0YSA9IGN0cmxfaW5iKFNDUERSKTsKKwkJZGF0YSA9IF9fcmF3X3JlYWRiKFNDUERSKTsKIAkJLyogU2V0IC9SVFMyIChiaXQ2KSA9IDAgKi8KLQkJY3RybF9vdXRiKGRhdGEgJiAweGJmLCBTQ1BEUik7CisJCV9fcmF3X3dyaXRlYihkYXRhICYgMHhiZiwgU0NQRFIpOwogCX0KIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKQEAgLTg5NywxMSArODk3LDIxIEBACiBzdGF0aWMgdm9pZCBzY2lfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAogCQkJICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewotCXVuc2lnbmVkIGludCBzdGF0dXMsIGJhdWQsIHNtcl92YWw7CisJdW5zaWduZWQgaW50IHN0YXR1cywgYmF1ZCwgc21yX3ZhbCwgbWF4X2JhdWQ7CiAJaW50IHQgPSAtMTsKIAotCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsKLQlpZiAobGlrZWx5KGJhdWQpKQorCS8qCisJICogZWFybHlwcmludGsgY29tZXMgaGVyZSBlYXJseSBvbiB3aXRoIHBvcnQtPnVhcnRjbGsgc2V0IHRvIHplcm8uCisJICogdGhlIGNsb2NrIGZyYW1ld29yayBpcyBub3QgdXAgYW5kIHJ1bm5pbmcgYXQgdGhpcyBwb2ludCBzbyBoZXJlCisJICogd2UgYXNzdW1lIHRoYXQgMTE1MjAwIGlzIHRoZSBtYXhpbXVtIGJhdWQgcmF0ZS4gcGxlYXNlIG5vdGUgdGhhdAorCSAqIHRoZSBiYXVkIHJhdGUgaXMgbm90IHByb2dyYW1tZWQgZHVyaW5nIGVhcmx5cHJpbnRrIC0gaXQgaXMgYXNzdW1lZAorCSAqIHRoYXQgdGhlIHByZXZpb3VzIGJvb3QgbG9hZGVyIGhhcyBlbmFibGVkIHJlcXVpcmVkIGNsb2NrcyBhbmQKKwkgKiBzZXR1cCB0aGUgYmF1ZCByYXRlIGdlbmVyYXRvciBoYXJkd2FyZSBmb3IgdXMgYWxyZWFkeS4KKwkgKi8KKwltYXhfYmF1ZCA9IHBvcnQtPnVhcnRjbGsgPyBwb3J0LT51YXJ0Y2xrIC8gMTYgOiAxMTUyMDA7CisKKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgbWF4X2JhdWQpOworCWlmIChsaWtlbHkoYmF1ZCAmJiBwb3J0LT51YXJ0Y2xrKSkKIAkJdCA9IFNDQlJSX1ZBTFVFKGJhdWQsIHBvcnQtPnVhcnRjbGspOwogCiAJZG8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCBhMzIwOTRlZS4uMGVmY2RlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTUxNywyMCArNTE3LDIwIEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZmZmU4MCkKLQkJcmV0dXJuIGN0cmxfaW5iKFNDUERSKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDAwMDE1MCkKLQkJcmV0dXJuIGN0cmxfaW5iKFNDUERSKSYweDEwID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSKSYweDEwID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0MDAwMTQwKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IFNDSUYwKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IFNDSUYyKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIpCkBAIC01NTcsNjggKzU1Nyw2OCBAQAogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2luYihTQ1NQVFIxKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMSkmMHgwMSA/IDEgOiAwOyAvKiBTQ0kgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTgwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpJjB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlODAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NykKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTRjMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU0ZDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNjAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU2MTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTMwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2luYihTQ1BEUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYwICovCisJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYwICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBTRFIpICYgMHgwMiA/IDEgOiAwOyAvKiBTQ0lGMCAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUFNEUikgJiAweDAyID8gMSA6IDA7IC8qIFNDSUYwICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBBRFIpICYgMHg0MCA/IDEgOiAwOyAvKiBTQ0lGMSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUEFEUikgJiAweDQwID8gMSA6IDA7IC8qIFNDSUYxICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBXRFIpICYgMHgwNCA/IDEgOiAwOyAvKiBTQ0lGMiAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUFdEUikgJiAweDA0ID8gMSA6IDA7IC8qIFNDSUYyICovCiAKIAlyZXR1cm4gMTsKIH0KQEAgLTYyNiwxNyArNjI2LDE3IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjApICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUYwICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjApICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUYwICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjEpICYgMHgwMDIwID8gMSA6IDA7IC8qIFNDSUYxICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjEpICYgMHgwMDIwID8gMSA6IDA7IC8qIFNDSUYxICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMjAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYyICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYyICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlMzAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYzICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYzICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlNDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUY0ICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUY0ICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlNTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjUpICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUY1ICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjUpICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUY1ICovCiAgICAgICAgIHJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQpAQCAtNjQ1LDkgKzY0NSw5IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGKQotCQlyZXR1cm4gY3RybF9pbncoKHBvcnQtPm1hcGJhc2UgKyBTQ0ZTUikpICAmIFNDSUZfQlJLID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdygocG9ydC0+bWFwYmFzZSArIFNDRlNSKSkgICYgU0NJRl9CUksgPyAxIDogMDsKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKQotCQlyZXR1cm4gY3RybF9pbncoKHBvcnQtPm1hcGJhc2UgKyBTQ0FTU1IpKSAmIFNDSUZfQlJLID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdygocG9ydC0+bWFwYmFzZSArIFNDQVNTUikpICYgU0NJRl9CUksgPyAxIDogMDsKIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMpCkBAIC02NjUsMTEgKzY2NSwxMSBAQAogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwODAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRi9JUkRBICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGL0lSREEgKi8KIAogCXJldHVybiAxOwogfQpAQCAtNjc3LDIwICs2NzcsMjAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTIzMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmY5MjQwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZjkyNTAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKQEAgLTY5OCwxNyArNjk4LDE3IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVhMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYzAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVkMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWUwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlZjAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFI1KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFI1KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpIHx8IFwKQEAgLTcxOCwyMiArNzE4LDIyIEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlODAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU4ODAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTkwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlOTgwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQTAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVBODAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUIwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQjgwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KICNlbmRpZgogCXJldHVybiAxOwogfQpAQCAtNzQxLDI0ICs3NDEsMjQgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4Zjg0MTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmODQyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmMzMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzQwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjNTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmM2MDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCAwOTNmNTdhLi45NGViODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtODcsOCArODcsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9kcmVhbS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZyIKQEAgLTE0NSw1ICsxNDMsNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9uZXR3YXZlL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWciCisKIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggMDY5ODY0Zi4uYjVlNjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMjYsNyArMjYsNiBAQAogb2JqLSQoQ09ORklHX0lOUFVUX01JTUlPKQkrPSBtaW1pby8KIG9iai0kKENPTkZJR19UUkFOWlBPUlQpCQkrPSBmcm9udGllci8KIG9iai0kKENPTkZJR19EUkVBTSkJCSs9IGRyZWFtLwotb2JqLSQoQ09ORklHX0RTVCkJCSs9IGRzdC8KIG9iai0kKENPTkZJR19QT0hNRUxGUykJCSs9IHBvaG1lbGZzLwogb2JqLSQoQ09ORklHX0IzREZHKQkJKz0gYjNkZmcvCiBvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLwpAQCAtNTMsMyArNTIsNCBAQAogb2JqLSQoQ09ORklHX1dBVkVMQU4pCQkrPSB3YXZlbGFuLwogb2JqLSQoQ09ORklHX1BDTUNJQV9XQVZFTEFOKQkrPSB3YXZlbGFuLwogb2JqLSQoQ09ORklHX1BDTUNJQV9ORVRXQVZFKQkrPSBuZXR3YXZlLworb2JqLSQoQ09ORklHX0ZCX1NNN1hYKQkJKz0gc203eHgvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZwppbmRleCA3NjMyZjU3Li4xZDc0ZGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIGNvbmZpZyBCQVRNQU5fQURWCiAJdHJpc3RhdGUgIkIuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sIgorCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBQQUNLRVQKICAgICAgICAgZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKaW5kZXggZDcyNDc5OC4uZWI2MTc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYwpAQCAtMzYzLDggKzM2MywxMCBAQAogCQlyZXR1cm47CiAKIAlmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYgPSBrbWFsbG9jKHBhY2tldF9sZW4sIEdGUF9BVE9NSUMpOwotCWlmICghZm9yd19wYWNrZXQtPnBhY2tldF9idWZmKQorCWlmICghZm9yd19wYWNrZXQtPnBhY2tldF9idWZmKSB7CisJCWtmcmVlKGZvcndfcGFja2V0KTsKIAkJcmV0dXJuOworCX0KIAogCWZvcndfcGFja2V0LT5wYWNrZXRfbGVuID0gcGFja2V0X2xlbjsKIAltZW1jcHkoZm9yd19wYWNrZXQtPnBhY2tldF9idWZmLCBwYWNrZXRfYnVmZiwgZm9yd19wYWNrZXQtPnBhY2tldF9sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmgKaW5kZXggY2NjNWNkYy4uYjU1OWE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oCkBAIC00NTEsNyArNDUxLDcgQEAKIAogI2RlZmluZSBDT01FRElfQ0JfRU9TCQkxCS8qIGVuZCBvZiBzY2FuICovCiAjZGVmaW5lIENPTUVESV9DQl9FT0EJCTIJLyogZW5kIG9mIGFjcXVpc2l0aW9uICovCi0jZGVmaW5lIENPTUVESV9DQl9CTE9DSwkJNAkvKiBERVBSRUNBVEVEOiBjb252ZW5pZW50IGJsb2NrIHNpemUgKi8KKyNkZWZpbmUgQ09NRURJX0NCX0JMT0NLCQk0CS8qIGRhdGEgaGFzIGFycml2ZWQ6IHdha2VzIHVwIHJlYWQoKSAvIHdyaXRlKCkgKi8KICNkZWZpbmUgQ09NRURJX0NCX0VPQlVGCQk4CS8qIERFUFJFQ0FURUQ6IGVuZCBvZiBidWZmZXIgKi8KICNkZWZpbmUgQ09NRURJX0NCX0VSUk9SCQkxNgkvKiBjYXJkIGVycm9yIGR1cmluZyBhY3F1aXNpdGlvbiAqLwogI2RlZmluZSBDT01FRElfQ0JfT1ZFUkZMT1cJMzIJLyogYnVmZmVyIG92ZXJmbG93L3VuZGVyZmxvdyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKaW5kZXggMGQyYzJlYjIzLi5iZDM5Nzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKQEAgLTg0OSw4ICs4NDksMTEgQEAKIAl9CiAKIAlkZXZwcml2LT5wY2lfZW5hYmxlZCA9IDE7Ci0JZGV2cHJpdi0+aW9iYXNlID0KLQkgICAgaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoY2FyZCwgMCksIHNpemVvZihzdHJ1Y3QganIzX3QpKTsKKwlkZXZwcml2LT5pb2Jhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwKKwkJCW9mZnNldG9mKHN0cnVjdCBqcjNfdCwgY2hhbm5lbFtkZXZwcml2LT5uX2NoYW5uZWxzXSkpOworCWlmICghZGV2cHJpdi0+aW9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJlc3VsdCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBkZXZwcml2LT5uX2NoYW5uZWxzKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKaW5kZXggMDZjMDIwNC4uOWExYjU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwpAQCAtMSw0ICsxLDQgQEAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi40IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlN0aXJsaW5nL0lUTCBVU0ItRFVYIC0tIEJlcm5kLlBvcnJAZjJzLmNvbSIKIC8qCkBAIC04MSw2ICs4MSw4IEBACiAgKiAyLjE6ICBjaGFuZ2VkIFBXTSBBUEkKICAqIDIuMjogIGFkZGVkIGZpcm13YXJlIGtlcm5lbCByZXF1ZXN0IHRvIGZpeCBhbiB1ZGV2IHByb2JsZW0KICAqIDIuMzogIGNvcnJlY3RlZCBhIGJ1ZyBpbiBidWxrIHRpbWVvdXRzIHdoaWNoIHdlcmUgZmFyIHRvbyBzaG9ydAorICogMi40OiAgZml4ZWQgYSBidWcgd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8gaGFuZyB3aGVuIGl0IHJhbiBvdXQgb2YgZGF0YS4KKyAqICAgICAgIFRoYW5rcyB0byBKYW4tTWF0dGhpYXMgQnJhdW4gYW5kIElhbiB0byBzcG90IHRoZSBidWcgYW5kIGZpeCBpdC4KICAqCiAgKi8KIApAQCAtNTMyLDYgKzUzNCw3IEBACiAJCX0KIAl9CiAJLyogdGVsbCBjb21lZGkgdGhhdCBkYXRhIGlzIHRoZXJlICovCisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOwogCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eHN1Yi0+Y29tZWRpZGV2LCBzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDhkMzQyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLWNvbmZpZyBEU1QKLQl0cmlzdGF0ZSAiRGlzdHJpYnV0ZWQgc3RvcmFnZSIKLQlkZXBlbmRzIG9uIE5FVCAmJiBDUllQVE8gJiYgU1lTRlMgJiYgQkxLX0RFVgotCXNlbGVjdCBDT05ORUNUT1IKLQktLS1oZWxwLS0tCi0JRFNUIGlzIGEgbmV0d29yayBibG9jayBkZXZpY2Ugc3RvcmFnZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb3JnYW5pemUKLQlleHBvcnRlZCBzdG9yYWdlIG9uIHRoZSByZW1vdGUgbm9kZXMgaW50byB0aGUgbG9jYWwgYmxvY2sgZGV2aWNlLgotCi0JRFNUIHdvcmtzIG9uIHRvcCBvZiBhbnkgbmV0d29yayBtZWRpYSBhbmQgcHJvdG9jb2w7IGl0IGlzIGp1c3QgYSBtYXR0ZXIKLQlvZiBjb25maWd1cmF0aW9uIHV0aWxpdHkgdG8gdW5kZXJzdGFuZCB0aGUgY29ycmVjdCBhZGRyZXNzZXMuIFRoZSBtb3N0Ci0JY29tbW9uIGV4YW1wbGUgaXMgVENQIG92ZXIgSVAsIHdoaWNoIGFsbG93cyB0byBwYXNzIHRocm91Z2ggZmlyZXdhbGxzIGFuZAotCWNyZWF0ZSByZW1vdGUgYmFja3VwIHN0b3JhZ2UgaW4gYSBkaWZmZXJlbnQgZGF0YWNlbnRlci4gRFNUIHJlcXVpcmVzCi0Jc2luZ2xlIHBvcnQgdG8gYmUgZW5hYmxlZCBvbiB0aGUgZXhwb3J0aW5nIG5vZGUgYW5kIG91dGdvaW5nIGNvbm5lY3Rpb25zCi0Jb24gdGhlIGxvY2FsIG5vZGUuCi0KLQlEU1Qgd29ya3Mgd2l0aCBpbi1rZXJuZWwgY2xpZW50IGFuZCBzZXJ2ZXIsIHdoaWNoIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5Ci0JZWxpbWluYXRpbmcgdW5uZWRlZCBkYXRhIGNvcGllcyBhbmQgYnkgbm90IGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbgotCW9mIHRoZSBleHRlcm5hbCBJTyBjb21wb25lbnRzLiBJdCByZXF1aXJlcyB1c2Vyc3BhY2UgY29uZmlndXJhdGlvbiB1dGlsaXR5Ci0JdGhvdWdoLgotCi0JRFNUIHVzZXMgdHJhbnNhY3Rpb24gbW9kZWwsIHdoZW4gZWFjaCBzdG9yZSBoYXMgdG8gYmUgZXhwbGljaXRseSBhY2tlZAotCWZyb20gdGhlIHJlbW90ZSBub2RlIHRvIGJlIGNvbnNpZGVyZWQgYXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uIFRoZXJlCi0JbWF5IGJlIGxvdHMgb2YgaW4tZmxpZ2h0IHRyYW5zYWN0aW9ucy4gV2hlbiByZW1vdGUgaG9zdCBkb2VzIG5vdCBhY2sKLQl0aGUgdHJhbnNhY3Rpb24gaXQgd2lsbCBiZSByZXNlbnQgcHJlZGVmaW5lZCBudW1iZXIgb2YgdGltZXMgd2l0aCBzcGVjaWZpZWQKLQl0aW1lb3V0cyBiZXR3ZWVuIHRoZW0uIEFsbCB0aG9zZSBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmFibGUuIFRyYW5zYWN0aW9ucwotCWFyZSBtYXJrZWQgYXMgZmFpbGVkIGFmdGVyIGFsbCByZXNlbmRzIGNvbXBsZXRlIHVuc3VjY2Vzc2Z1bGx5OyBoYXZpbmcKLQlsb25nIGVub3VnaCByZXNlbmQgdGltZW91dCBhbmQvb3IgbGFyZ2UgbnVtYmVyIG9mIHJlc2VuZHMgYWxsb3dzIG5vdCB0bwotCXJldHVybiBlcnJvciB0byB0aGUgaGlnaGVyIChGUyB1c3VhbGx5KSBsYXllciBpbiBjYXNlIG9mIHNob3J0IG5ldHdvcmsKLQlwcm9ibGVtcyBvciByZW1vdGUgbm9kZSBvdXRhZ2VzLiBJbiBjYXNlIG9mIG5ldHdvcmsgUkFJRCBzZXR1cCB0aGlzIG1lYW5zCi0JdGhhdCBzdG9yYWdlIHdpbGwgbm90IGRlZ3JhZGUgdW50aWwgdHJhbnNhY3Rpb25zIGFyZSBtYXJrZWQgYXMgZmFpbGVkLCBhbmQKLQl0aHVzIHdpbGwgbm90IGZvcmNlIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gYW5kIGRhdGEgcmVidWlsZC4gSW4gY2FzZSBvZgotCWNvbm5lY3Rpb24gZmFpbHVyZSBEU1Qgd2lsbCB0cnkgdG8gcmVjb25uZWN0IHRvIHRoZSByZW1vdGUgbm9kZSBhdXRvbWF0aWNhbGx5LgotCURTVCBzZW5kcyBwaW5nIGNvbW1hbmRzIGF0IGlkbGUgdGltZSB0byBkZXRlY3QgaWYgcmVtb3RlIG5vZGUgaXMgYWxpdmUuCi0KLQlCZWNhdXNlIG9mIHRyYW5zYWN0aW9uYWwgbW9kZWwgaXQgaXMgcG9zc2libGUgdG8gdXNlIHplcm8tY29weSBzZW5kaW5nCi0Jd2l0aG91dCB3b3JyeSBvZiBkYXRhIGNvcnJ1cHRpb24gKHdoaWNoIGluIHR1cm4gY291bGQgYmUgZGV0ZWN0ZWQgYnkgdGhlCi0Jc3Ryb25nIGNoZWNrc3VtcyB0aG91Z2gpLgotCi0JRFNUIG1heSBmdWxseSBlbmNyeXB0IHRoZSBkYXRhIGNoYW5uZWwgaW4gY2FzZSBvZiB1bnRydXN0ZWQgY2hhbm5lbCBhbmQgaW1wbGVtZW50Ci0Jc3Ryb25nIGNoZWNrc3VtIG9mIHRoZSB0cmFuc2ZlcnJlZCBkYXRhLiBJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgYWxnb3JpdGhtcwotCWFuZCBjcnlwdG8ga2V5czsgdGhleSBzaG91bGQgbWF0Y2ggb24gYm90aCBzaWRlcyBvZiB0aGUgbmV0d29yayBjaGFubmVsLgotCUNyeXB0byBwcm9jZXNzaW5nIGRvZXMgbm90IGludHJvZHVjZSBub3RpY2VibGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIHNpbmNlIERTVAotCXVzZXMgY29uZmlndXJhYmxlIHBvb2wgb2YgdGhyZWFkcyB0byBwZXJmb3JtIGNyeXB0byBwcm9jZXNzaW5nLgotCi0JRFNUIHV0aWxpemVzIG1lbW9yeSBwb29sIG1vZGVsIG9mIGFsbCBpdHMgdHJhbnNhY3Rpb24gYWxsb2NhdGlvbnMgKGl0IGlzIHRoZQotCW9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIG9uIHRoZSBjbGllbnQpIGFuZCBzZXJ2ZXIgYWxsb2NhdGlvbnMgKGJpbyBwb29scywKLQl3aGlsZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIHNsYWIpLgotCi0JQXQgc3RhcnR1cCBEU1QgcGVyZm9ybXMgYSBzaW1wbGUgbmVnb3RpYXRpb24gd2l0aCB0aGUgZXhwb3J0IG5vZGUgdG8gZGV0ZXJtaW5lCi0JYWNjZXNzIHBlcm1pc3Npb25zIGFuZCBzaXplIG9mIHRoZSBleHBvcnRlZCBzdG9yYWdlLiBJdCBjYW4gYmUgZXh0ZW5kZWQgaWYKLQluZXcgcGFyYW1ldGVycyBzaG91bGQgYmUgYXV0b25lZ290aWF0ZWQuCi0KLQlEU1QgY2FycmllcyBibG9jayBJTyBmbGFncyBpbiB0aGUgcHJvdG9jb2wsIHdoaWNoIGFsbG93cyB0byB0cmFuc3BhcmVudGx5IGltcGxlbWVudAotCWJhcnJpZXJzIGFuZCBzeW5jL2ZsdXNoIG9wZXJhdGlvbnMuIFRob3NlIGZsYWdzIGFyZSB1c2VkIGluIHRoZSBleHBvcnQgbm9kZSB3aGVyZQotCUlPIGFnYWluc3QgdGhlIGxvY2FsIHN0b3JhZ2UgaXMgcGVyZm9ybWVkLCB3aGljaCBtZWFucyB0aGF0IHN5bmMgd3JpdGUgd2lsbCBiZSBzeW5jCi0Jb24gdGhlIHJlbW90ZSBub2RlIHRvbywgd2hpY2ggaW4gdHVybiBpbXByb3ZlcyBkYXRhIGludGVncml0eSBhbmQgaW1wcm92ZWQgcmVzaXN0YW5jZQotCXRvIGVycm9ycyBhbmQgZGF0YSBjb3JydXB0aW9uIGR1cmluZyBwb3dlciBvdXRhZ2VzIG9yIHN0b3JhZ2UgZGFtYWdlcy4KLQotCUhvbWVwYWdlOiBodHRwOi8vd3d3LmlvcmVtYXAubmV0L3Byb2plY3RzL2RzdAotCVVzZXJzcGFjZSBjb25maWd1cmF0aW9uIHV0aWxpdHkgYW5kIHRoZSBsYXRlc3QgcmVsZWFzZXM6IGh0dHA6Ly93d3cuaW9yZW1hcC5uZXQvYXJjaGl2ZS9kc3QvCi0KLWNvbmZpZyBEU1RfREVCVUcKLQlib29sICJEU1QgZGVidWciCi0JZGVwZW5kcyBvbiBEU1QKLQktLS1oZWxwLS0tCi0JVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgSEVBVlkgZGVidWdnaW5nIG9mIHRoZSBEU1QuCi0JVHVybiBpdCBvbiBPTkxZIGlmIHlvdSBoYXZlIHRvIGRlYnVnIHNvbWUgcmVhbGx5IG9ic2N1cmUgcHJvYmxlbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYThiMGNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai0kKENPTkZJR19EU1QpICs9IG5zdC5vCi0KLW5zdC15IDo9IGRjb3JlLm8gc3RhdGUubyBleHBvcnQubyB0aHJlYWRfcG9vbC5vIGNyeXB0by5vIHRyYW5zLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTEyOTVjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzMgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0vKgotICogVHJpY2t5IGJhc3RhcmQsIGJ1dCBJViBjYW4gYmUgbW9yZSBjb21wbGV4IHdpdGggdGltZS4uLgotICovCi1zdGF0aWMgaW5saW5lIHU2NCBkc3RfZ2VuX2l2KHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JcmV0dXJuIHQtPmdlbjsKLX0KLQotLyoKLSAqIENyeXB0byBtYWNoaW5lcnk6IGhhc2gvY2lwaGVyIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBjcnlwdG8gY29udHJvbHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2hhc2ggKmRzdF9pbml0X2hhc2goc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwsIHU4ICprZXkpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2g7Ci0KLQloYXNoID0gY3J5cHRvX2FsbG9jX2hhc2goY3RsLT5oYXNoX2FsZ28sIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmIChJU19FUlIoaGFzaCkpIHsKLQkJZXJyID0gUFRSX0VSUihoYXNoKTsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBoYXNoICclcycsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBjdGwtPmhhc2hfYWxnbywgZXJyKTsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JY3RsLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoaGFzaCk7Ci0KLQlpZiAoIWN0bC0+aGFzaF9rZXlzaXplKQotCQlyZXR1cm4gaGFzaDsKLQotCWVyciA9IGNyeXB0b19oYXNoX3NldGtleShoYXNoLCBrZXksIGN0bC0+aGFzaF9rZXlzaXplKTsKLQlpZiAoZXJyKSB7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgaGFzaCAnJXMnLCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgY3RsLT5oYXNoX2FsZ28sIGVycik7Ci0JCWdvdG8gZXJyX291dF9mcmVlOwotCX0KLQotCXJldHVybiBoYXNoOwotCi1lcnJfb3V0X2ZyZWU6Ci0JY3J5cHRvX2ZyZWVfaGFzaChoYXNoKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpkc3RfaW5pdF9jaXBoZXIoc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwsCi0JCXU4ICprZXkpCi17Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0Jc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXI7Ci0KLQlpZiAoIWN0bC0+Y2lwaGVyX2tleXNpemUpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JY2lwaGVyID0gY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIoY3RsLT5jaXBoZXJfYWxnbywgMCwgMCk7Ci0JaWYgKElTX0VSUihjaXBoZXIpKSB7Ci0JCWVyciA9IFBUUl9FUlIoY2lwaGVyKTsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIGN0bC0+Y2lwaGVyX2FsZ28sIGVycik7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWNyeXB0b19hYmxrY2lwaGVyX2NsZWFyX2ZsYWdzKGNpcGhlciwgfjApOwotCi0JZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KGNpcGhlciwga2V5LCBjdGwtPmNpcGhlcl9rZXlzaXplKTsKLQlpZiAoZXJyKSB7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgY2lwaGVyICclcycsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBjdGwtPmNpcGhlcl9hbGdvLCBlcnIpOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQl9Ci0KLQlyZXR1cm4gY2lwaGVyOwotCi1lcnJfb3V0X2ZyZWU6Ci0JY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihjaXBoZXIpOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLS8qCi0gKiBDcnlwdG8gZW5naW5lIGhhcyBhIHBvb2wgb2YgcGFnZXMgdG8gZW5jcnlwdCBkYXRhIGludG8gYmVmb3JlIHNlbmRpbmcKLSAqIGl0IG92ZXIgdGhlIG5ldHdvcmsuIFRoaXMgcG9vbCBpcyBmcmVlZC9hbGxvY2F0ZWQgaGVyZS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X2NyeXB0b19wYWdlc19mcmVlKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBlLT5wYWdlX251bTsgKytpKQotCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7Ci0Ja2ZyZWUoZS0+cGFnZXMpOwotfQotCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fcGFnZXNfYWxsb2Moc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBpbnQgbnVtKQotewotCWludCBpOwotCi0JZS0+cGFnZXMgPSBrbWFsbG9jKG51bSAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKiksIEdGUF9LRVJORUwpOwotCWlmICghZS0+cGFnZXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0JCWUtPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFlLT5wYWdlc1tpXSkKLQkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOwotCX0KLQotCWUtPnBhZ2VfbnVtID0gbnVtOwotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfcGFnZXM6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7Ci0KLQlrZnJlZShlLT5wYWdlcyk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGNyeXB0byBlbmdpbmUgZm9yIGdpdmVuIG5vZGUuCi0gKiBTZXR1cCBjaXBoZXIvaGFzaCwga2V5cywgcG9vbCBvZiB0aHJlYWRzIGFuZCBwcml2YXRlIGRhdGEuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19lbmdpbmVfaW5pdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCXN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsID0gJm4tPmNyeXB0bzsKLQotCWVyciA9IGRzdF9jcnlwdG9fcGFnZXNfYWxsb2MoZSwgbi0+bWF4X3BhZ2VzKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWUtPnNpemUgPSBQQUdFX1NJWkU7Ci0JZS0+ZGF0YSA9IGttYWxsb2MoZS0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlLT5kYXRhKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOwotCX0KLQotCWlmIChjdGwtPmhhc2hfYWxnb1swXSkgewotCQllLT5oYXNoID0gZHN0X2luaXRfaGFzaChjdGwsIG4tPmhhc2hfa2V5KTsKLQkJaWYgKElTX0VSUihlLT5oYXNoKSkgewotCQkJZXJyID0gUFRSX0VSUihlLT5oYXNoKTsKLQkJCWUtPmhhc2ggPSBOVUxMOwotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JCX0KLQl9Ci0KLQlpZiAoY3RsLT5jaXBoZXJfYWxnb1swXSkgewotCQllLT5jaXBoZXIgPSBkc3RfaW5pdF9jaXBoZXIoY3RsLCBuLT5jaXBoZXJfa2V5KTsKLQkJaWYgKElTX0VSUihlLT5jaXBoZXIpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGUtPmNpcGhlcik7Ci0JCQllLT5jaXBoZXIgPSBOVUxMOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfaGFzaDoKLQljcnlwdG9fZnJlZV9oYXNoKGUtPmhhc2gpOwotZXJyX291dF9mcmVlOgotCWtmcmVlKGUtPmRhdGEpOwotZXJyX291dF9mcmVlX3BhZ2VzOgotCWRzdF9jcnlwdG9fcGFnZXNfZnJlZShlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfY3J5cHRvX2VuZ2luZV9leGl0KHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKLXsKLQlpZiAoZS0+aGFzaCkKLQkJY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKLQlpZiAoZS0+Y2lwaGVyKQotCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGUtPmNpcGhlcik7Ci0JZHN0X2NyeXB0b19wYWdlc19mcmVlKGUpOwotCWtmcmVlKGUtPmRhdGEpOwotfQotCi0vKgotICogV2FpdGluZyBmb3IgY2lwaGVyIHByb2Nlc3NpbmcgdG8gYmUgY29tcGxldGVkLgotICovCi1zdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uIHsKLQlzdHJ1Y3QgY29tcGxldGlvbgkJY29tcGxldGU7Ci0JaW50CQkJCWVycm9yOwotfTsKLQotc3RhdGljIHZvaWQgZHN0X2NyeXB0b19jb21wbGV0ZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgaW50IGVycikKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uICpjID0gcmVxLT5kYXRhOwotCi0JaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpCi0JCXJldHVybjsKLQotCWRwcmludGsoIiVzOiByZXE6ICVwLCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHJlcSwgZXJyKTsKLQljLT5lcnJvciA9IGVycjsKLQljb21wbGV0ZSgmYy0+Y29tcGxldGUpOwotfQotCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fcHJvY2VzcyhzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEsCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYywKLQkJdm9pZCAqaXYsIGludCBlbmMsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uIGM7Ci0JaW50IGVycjsKLQotCWluaXRfY29tcGxldGlvbigmYy5jb21wbGV0ZSk7Ci0JYy5lcnJvciA9IC1FSU5QUk9HUkVTUzsKLQotCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRywKLQkJCQkJZHN0X2NyeXB0b19jb21wbGV0ZSwgJmMpOwotCi0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnX3NyYywgc2dfZHN0LCBzZ19zcmMtPmxlbmd0aCwgaXYpOwotCi0JaWYgKGVuYykKLQkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdChyZXEpOwotCWVsc2UKLQkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChyZXEpOwotCi0Jc3dpdGNoIChlcnIpIHsKLQljYXNlIC1FSU5QUk9HUkVTUzoKLQljYXNlIC1FQlVTWToKLQkJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmMuY29tcGxldGUsCi0JCQkJdGltZW91dCk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gLUVUSU1FRE9VVDsKLQkJZWxzZQotCQkJZXJyID0gYy5lcnJvcjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIERTVCB1c2VzIGdlbmVyaWMgaXRlcmF0aW9uIGFwcHJvYWNoIGZvciBkYXRhIGNyeXB0byBwcm9jZXNzaW5nLgotICogU2luZ2xlIGJsb2NrIElPIHJlcXVlc3QgaXMgc3dpdGNoZWQgaW50byBhcnJheSBvZiBzY2F0dGVybGlzdHMsCi0gKiB3aGljaCBhcmUgc3VibWl0dGVkIHRvIHRoZSBjcnlwdG8gcHJvY2Vzc2luZyBpdGVyYXRvci4KLSAqCi0gKiBJbnB1dCBhbmQgb3V0cHV0IGl0ZXJhdG9yIGluaXRpYWxpemF0aW9uIGFyZSBkaWZmZXJlbnQsIHNpbmNlCi0gKiBpbiBvdXRwdXQgY2FzZSB3ZSBjYW4gbm90IGVuY3J5cHQgZGF0YSBpbi1wbGFjZSBhbmQgbmVlZCBhCi0gKiB0ZW1wb3Jhcnkgc3RvcmFnZSwgd2hpY2ggaXMgdGhlbiBiZWluZyBzZW50IHRvIHRoZSByZW1vdGUgcGVlci4KLSAqLwotc3RhdGljIGludCBkc3RfdHJhbnNfaXRlcl9vdXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCWludCAoKml0ZXJhdG9yKSAoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCi0JCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYykpCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCWludCBlcnIsIGk7Ci0KLQlzZ19pbml0X3RhYmxlKGUtPnNyYywgYmlvLT5iaV92Y250KTsKLQlzZ19pbml0X3RhYmxlKGUtPmRzdCwgYmlvLT5iaV92Y250KTsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJc2dfc2V0X3BhZ2UoJmUtPnNyY1tpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCQlzZ19zZXRfcGFnZSgmZS0+ZHN0W2ldLCBlLT5wYWdlc1tpXSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7Ci0KLQkJZXJyID0gaXRlcmF0b3IoZSwgJmUtPmRzdFtpXSwgJmUtPnNyY1tpXSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF90cmFuc19pdGVyX2luKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlpbnQgKCppdGVyYXRvcikgKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAotCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMpKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgZXJyLCBpOwotCi0Jc2dfaW5pdF90YWJsZShlLT5zcmMsIGJpby0+YmlfdmNudCk7Ci0Jc2dfaW5pdF90YWJsZShlLT5kc3QsIGJpby0+YmlfdmNudCk7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCXNnX3NldF9wYWdlKCZlLT5zcmNbaV0sIGJ2LT5idl9wYWdlLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKLQkJc2dfc2V0X3BhZ2UoJmUtPmRzdFtpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCi0JCWVyciA9IGl0ZXJhdG9yKGUsICZlLT5kc3RbaV0sICZlLT5zcmNbaV0pOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc3RfY3J5cHRfaXRlcmF0b3Ioc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCi17Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKLQl1OCBpdlszMl07Ci0KLQltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOwotCi0JbWVtY3B5KGl2LCAmZS0+aXYsIHNpemVvZihlLT5pdikpOwotCi0JcmV0dXJuIGRzdF9jcnlwdG9fcHJvY2VzcyhyZXEsIHNnX2RzdCwgc2dfc3JjLCBpdiwgZS0+ZW5jLCBlLT50aW1lb3V0KTsKLX0KLQotc3RhdGljIGludCBkc3RfY3J5cHQoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKLQotCW1lbXNldChyZXEsIDAsIHNpemVvZihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0KSk7Ci0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0ocmVxLCBlLT5jaXBoZXIpOwotCi0JaWYgKGUtPmVuYykKLQkJcmV0dXJuIGRzdF90cmFuc19pdGVyX291dChiaW8sIGUsIGRzdF9jcnlwdF9pdGVyYXRvcik7Ci0JZWxzZQotCQlyZXR1cm4gZHN0X3RyYW5zX2l0ZXJfaW4oYmlvLCBlLCBkc3RfY3J5cHRfaXRlcmF0b3IpOwotfQotCi1zdGF0aWMgaW50IGRzdF9oYXNoX2l0ZXJhdG9yKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjKQotewotCXJldHVybiBjcnlwdG9faGFzaF91cGRhdGUoZS0+ZGF0YSwgc2dfc3JjLCBzZ19zcmMtPmxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2hhc2goc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRzdCkKLXsKLQlzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjID0gZS0+ZGF0YTsKLQlpbnQgZXJyOwotCi0JZGVzYy0+dGZtID0gZS0+aGFzaDsKLQlkZXNjLT5mbGFncyA9IDA7Ci0KLQllcnIgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBkc3RfdHJhbnNfaXRlcl9pbihiaW8sIGUsIGRzdF9oYXNoX2l0ZXJhdG9yKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgZHN0KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplL2NsZWFudXAgYSBjcnlwdG8gdGhyZWFkLiBUaGUgb25seSB0aGluZyBpdCBzaG91bGQKLSAqIGRvIGlzIHRvIGFsbG9jYXRlIGEgcG9vbCBvZiBwYWdlcyBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4KLSAqIEFuZCB0byBzZXR1cCBjaXBoZXIgYW5kL29yIGhhc2guCi0gKi8KLXN0YXRpYyB2b2lkICpkc3RfY3J5cHRvX3RocmVhZF9pbml0KHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gZGF0YTsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmU7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQllID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQllLT5zcmMgPSBrY2FsbG9jKDIgKiBuLT5tYXhfcGFnZXMsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlLT5zcmMpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZS0+ZHN0ID0gZS0+c3JjICsgbi0+bWF4X3BhZ2VzOwotCi0JZXJyID0gZHN0X2NyeXB0b19lbmdpbmVfaW5pdChlLCBuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9hbGw7Ci0KLQlyZXR1cm4gZTsKLQotZXJyX291dF9mcmVlX2FsbDoKLQlrZnJlZShlLT5zcmMpOwotZXJyX291dF9mcmVlOgotCWtmcmVlKGUpOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9jcnlwdG9fdGhyZWFkX2NsZWFudXAodm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBwcml2YXRlOwotCi0JZHN0X2NyeXB0b19lbmdpbmVfZXhpdChlKTsKLQlrZnJlZShlLT5zcmMpOwotCWtmcmVlKGUpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBjcnlwdG8gZW5naW5lIGZvciBnaXZlbiBub2RlOiBzdG9yZSBrZXlzLCBjcmVhdGUgcG9vbAotICogb2YgdGhyZWFkcywgaW5pdGlhbGl6ZSBlYWNoIG9uZS4KLSAqCi0gKiBFYWNoIHRocmVhZCBoYXMgdW5pcXVlIElELCBidXQgMCBhbmQgMSBhcmUgcmVzZXJ2ZWQgZm9yIHJlY2VpdmluZyBhbmQKLSAqIGFjY2VwdGluZyB0aHJlYWRzIChpZiBleHBvcnQgbm9kZSksIHNvIElEcyBjb3VsZCBzdGFydCBmcm9tIDIsIGJ1dCBzdGFydGluZwotICogdGhlbSBmcm9tIDEwIGFsbG93cyBlYXNpbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGhyZWFkIGlzIGZvci4KLSAqLwotaW50IGRzdF9ub2RlX2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwpCi17Ci0Jdm9pZCAqa2V5ID0gKGN0bCArIDEpOwotCWludCBlcnIgPSAtRU5PTUVNLCBpOwotCWNoYXIgbmFtZVszMl07Ci0KLQlpZiAoY3RsLT5oYXNoX2tleXNpemUpIHsKLQkJbi0+aGFzaF9rZXkgPSBrbWFsbG9jKGN0bC0+aGFzaF9rZXlzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuLT5oYXNoX2tleSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCQltZW1jcHkobi0+aGFzaF9rZXksIGtleSwgY3RsLT5oYXNoX2tleXNpemUpOwotCX0KLQotCWlmIChjdGwtPmNpcGhlcl9rZXlzaXplKSB7Ci0JCW4tPmNpcGhlcl9rZXkgPSBrbWFsbG9jKGN0bC0+Y2lwaGVyX2tleXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW4tPmNpcGhlcl9rZXkpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9oYXNoOwotCQltZW1jcHkobi0+Y2lwaGVyX2tleSwga2V5LCBjdGwtPmNpcGhlcl9rZXlzaXplKTsKLQl9Ci0JbWVtY3B5KCZuLT5jcnlwdG8sIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCkpOwotCi0JZm9yIChpID0gMDsgaSA8IGN0bC0+dGhyZWFkX251bTsgKytpKSB7Ci0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLWNyeXB0by0lZCIsIG4tPm5hbWUsIGkpOwotCQkvKiBVbmlxdWUgaWRzLi4uICovCi0JCWVyciA9IHRocmVhZF9wb29sX2FkZF93b3JrZXIobi0+cG9vbCwgbmFtZSwgaSArIDEwLAotCQkJZHN0X2NyeXB0b190aHJlYWRfaW5pdCwgZHN0X2NyeXB0b190aHJlYWRfY2xlYW51cCwgbik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV90aHJlYWRzOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfdGhyZWFkczoKLQl3aGlsZSAoLS1pID49IDApCi0JCXRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQobi0+cG9vbCwgaSsxMCk7Ci0KLQlpZiAoY3RsLT5jaXBoZXJfa2V5c2l6ZSkKLQkJa2ZyZWUobi0+Y2lwaGVyX2tleSk7Ci0JY3RsLT5jaXBoZXJfa2V5c2l6ZSA9IDA7Ci1lcnJfb3V0X2ZyZWVfaGFzaDoKLQlpZiAoY3RsLT5oYXNoX2tleXNpemUpCi0JCWtmcmVlKG4tPmhhc2hfa2V5KTsKLQljdGwtPmhhc2hfa2V5c2l6ZSA9IDA7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBkc3Rfbm9kZV9jcnlwdG9fZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwgPSAmbi0+Y3J5cHRvOwotCi0JaWYgKGN0bC0+Y2lwaGVyX2FsZ29bMF0gfHwgY3RsLT5oYXNoX2FsZ29bMF0pIHsKLQkJa2ZyZWUobi0+aGFzaF9rZXkpOwotCQlrZnJlZShuLT5jaXBoZXJfa2V5KTsKLQl9Ci19Ci0KLS8qCi0gKiBUaHJhZCBwb29sIHNldHVwIGNhbGxiYWNrLiBKdXN0IHN0b3JlcyBhIHRyYW5zYWN0aW9uIGluIHByaXZhdGUgZGF0YS4KLSAqLwotc3RhdGljIGludCBkc3RfdHJhbnNfY3J5cHRvX3NldHVwKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnRyYW5zKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0KLQllLT5wcml2YXRlID0gdHJhbnM7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCBkc3RfZHVtcF9iaW8oc3RydWN0IGJpbyAqYmlvKQotewotCXU4ICpwOwotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgaTsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJZHByaW50aygiJXM6ICVsbHUvJXU6IHNpemU6ICV1LCBvZmZzZXQ6ICV1LCBkYXRhOiAiLAotCQkJCV9fZnVuY19fLCBiaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJCWJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCi0JCXAgPSBrbWFwKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBidi0+YnZfbGVuOyArK2kpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyeCAiLCBwW2ldKTsKLQkJa3VubWFwKGJ2LT5idl9wYWdlKTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLX0KLSNlbmRpZgotCi0vKgotICogRW5jcnlwdC9oYXNoIGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzX3NlbmRpbmcoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3QgYmlvICpiaW8sIHU4ICpoYXNoKQotewotCWludCBlcnI7Ci0KLQlpZiAoZS0+Y2lwaGVyKSB7Ci0JCWVyciA9IGRzdF9jcnlwdChlLCBiaW8pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JaWYgKGUtPmhhc2gpIHsKLQkJZXJyID0gZHN0X2hhc2goZSwgYmlvLCBoYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0jaWZkZWYgQ09ORklHX0RTVF9ERUJVRwotCQl7Ci0JCQl1bnNpZ25lZCBpbnQgaTsKLQotCQkJLyogZHN0X2R1bXBfYmlvKGJpbyk7ICovCi0KLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBoYXNoOiAiLAotCQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJCWJpby0+Ymlfc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOwotCQkJZm9yIChpID0gMDsgaSA8IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7ICsraSkKLQkJCQkJcHJpbnRrKCIlMDJ4ICIsIGhhc2hbaV0pOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiByZWNlaXZlZCBkYXRhIGlzIHZhbGlkLiBEZWNpcGhlciBpZiBpdCBpcy4KLSAqLwotc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IGJpbyAqYmlvLCB1OCAqaGFzaCwgdTggKnJlY3ZfaGFzaCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKGUtPmhhc2gpIHsKLQkJaW50IG1pc21hdGNoOwotCi0JCWVyciA9IGRzdF9oYXNoKGUsIGJpbywgaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQltaXNtYXRjaCA9ICEhbWVtY21wKHJlY3ZfaGFzaCwgaGFzaCwKLQkJCQljcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpKTsKLSNpZmRlZiBDT05GSUdfRFNUX0RFQlVHCi0JCS8qIGRzdF9kdW1wX2JpbyhiaW8pOyAqLwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBoYXNoIG1pc21hdGNoOiAlZCIsCi0JCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJYmlvX2RhdGFfZGlyKGJpbyksIG1pc21hdGNoKTsKLQkJaWYgKG1pc21hdGNoKSB7Ci0JCQl1bnNpZ25lZCBpbnQgaTsKLQotCQkJcHJpbnRrKCIsIHJlY3YvY2FsYzogIik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsgKytpKQotCQkJCXByaW50aygiJTAyeC8lMDJ4ICIsIHJlY3ZfaGFzaFtpXSwgaGFzaFtpXSk7Ci0KLQkJfQotCQlwcmludGsoIlxuIik7Ci0jZW5kaWYKLQkJZXJyID0gLTE7Ci0JCWlmIChtaXNtYXRjaCkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWlmIChlLT5jaXBoZXIpIHsKLQkJZXJyID0gZHN0X2NyeXB0KGUsIGJpbyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBUaHJlYWQgcG9vbCBjYWxsYmFjayB0byBlbmNyeXB0IGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldG93b3JrLgotICovCi1zdGF0aWMgaW50IGRzdF90cmFuc19jcnlwdG9fYWN0aW9uKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0ID0gc2NoZWR1bGVfZGF0YTsKLQlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87Ci0JaW50IGVycjsKLQotCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBjaXBoZXI6ICVwLCBoYXNoOiAlcC5cbiIsCi0JCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBlLT5jaXBoZXIsIGUtPmhhc2gpOwotCi0JZS0+ZW5jID0gdC0+ZW5jOwotCWUtPml2ID0gZHN0X2dlbl9pdih0KTsKLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhlLCBiaW8sIHQtPmNtZC5oYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWlmIChlLT5oYXNoKSB7Ci0JCQl0LT5jbWQuY3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOwotCQkJdC0+Y21kLnNpemUgKz0gdC0+Y21kLmNzaXplOwotCQl9Ci0KLQkJcmV0dXJuIGRzdF90cmFuc19zZW5kKHQpOwotCX0gZWxzZSB7Ci0JCXU4ICpoYXNoID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKLQotCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKGUsIGJpbywgaGFzaCwgdC0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJZHN0X3RyYW5zX3JlbW92ZSh0KTsKLQkJZHN0X3RyYW5zX3B1dCh0KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXQtPmVycm9yID0gZXJyOwotCWRzdF90cmFuc19wdXQodCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNjaGVkdWxlIGNyeXB0byBwcm9jZXNzaW5nIGZvciBnaXZlbiB0cmFuc2FjdGlvbi4KLSAqLwotaW50IGRzdF90cmFuc19jcnlwdG8oc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOwotCWludCBlcnI7Ci0KLQllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLAotCQlkc3RfdHJhbnNfY3J5cHRvX3NldHVwLCBkc3RfdHJhbnNfY3J5cHRvX2FjdGlvbiwKLQkJdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlkc3RfdHJhbnNfcHV0KHQpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDcnlwdG8gbWFjaGluZXJ5IGZvciB0aGUgZXhwb3J0IG5vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF9jcnlwdG9fc2V0dXAodm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqYmlvKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0KLQllLT5wcml2YXRlID0gYmlvOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfY3J5cHRvX2FjdGlvbih2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICpzY2hlZHVsZV9kYXRhKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0Jc3RydWN0IGJpbyAqYmlvID0gc2NoZWR1bGVfZGF0YTsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOwotCWludCBlcnI7Ci0KLQlkcHJpbnRrKCIlczogZTogJXAsIGRhdGE6ICVwLCBiaW86ICVsbHUvJXUsIGRpcjogJWx1LlxuIiwKLQkJCV9fZnVuY19fLCBlLCBlLT5kYXRhLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJYmlvLT5iaV9zaXplLCBiaW9fZGF0YV9kaXIoYmlvKSk7Ci0KLQllLT5lbmMgPSAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCk7Ci0JZS0+aXYgPSBwLT5jbWQuaWQ7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJdTggKmhhc2ggPSBlLT5kYXRhICsgZS0+c2l6ZS8yOwotCi0JCWVyciA9IGRzdF9jcnlwdG9fcHJvY2Vzc19yZWNlaXZpbmcoZSwgYmlvLCBoYXNoLCBwLT5jbWQuaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9jcnlwdG9fcHJvY2Vzc19zZW5kaW5nKGUsIGJpbywgcC0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJaWYgKGUtPmhhc2gpIHsKLQkJCXAtPmNtZC5jc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7Ci0JCQlwLT5jbWQuc2l6ZSArPSBwLT5jbWQuY3NpemU7Ci0JCX0KLQotCQllcnIgPSBkc3RfZXhwb3J0X3NlbmRfYmlvKGJpbyk7Ci0JfQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JYmlvX3B1dChiaW8pOwotCXJldHVybiBlcnI7Ci19Ci0KLWludCBkc3RfZXhwb3J0X2NyeXB0byhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gdGhyZWFkX3Bvb2xfc2NoZWR1bGUobi0+cG9vbCwKLQkJZHN0X2V4cG9ydF9jcnlwdG9fc2V0dXAsIGRzdF9leHBvcnRfY3J5cHRvX2FjdGlvbiwKLQkJYmlvLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODNjYTdlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDk2OCArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi1zdGF0aWMgaW50IGRzdF9tYWpvcjsKLQotc3RhdGljIERFRklORV9NVVRFWChkc3RfaGFzaF9sb2NrKTsKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfaGFzaHRhYmxlOwotc3RhdGljIHVuc2lnbmVkIGludCBkc3RfaGFzaHRhYmxlX3NpemUgPSAxMjg7Ci1tb2R1bGVfcGFyYW0oZHN0X2hhc2h0YWJsZV9zaXplLCB1aW50LCAwNjQ0KTsKLQotc3RhdGljIGNoYXIgZHN0X25hbWVbXSA9ICJEZW1lbnRpYW50aW5nIGdvbGRmaXNoIjsKLQotc3RhdGljIERFRklORV9JRFIoZHN0X2luZGV4X2lkcik7Ci1zdGF0aWMgc3RydWN0IGNiX2lkIGNuX2RzdF9pZCA9IHsgQ05fRFNUX0lEWCwgQ05fRFNUX1ZBTCB9OwotCi0vKgotICogRFNUIHN5c2ZzIHRyZWUgZm9yIGRldmljZSBjYWxsZWQgJ3N0b3JhZ2UnOgotICoKLSAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2UvCi0gKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL3R5cGUgOiAxOTIuMTY4LjQuODA6MTAyNQotICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS9zaXplIDogODAwCi0gKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL25hbWUgOiBzdG9yYWdlCi0gKi8KLQotc3RhdGljIGludCBkc3RfZGV2X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBidXNfdHlwZSBkc3RfZGV2X2J1c190eXBlID0gewotCS5uYW1lIAkJPSAiZHN0IiwKLQkubWF0Y2ggCQk9ICZkc3RfZGV2X21hdGNoLAotfTsKLQotc3RhdGljIHZvaWQgZHN0X25vZGVfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOwotCi0Ja2ZyZWUoaW5mbyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlIGRzdF9ub2RlX2RldiA9IHsKLQkuYnVzIAkJPSAmZHN0X2Rldl9idXNfdHlwZSwKLQkucmVsZWFzZSAJPSAmZHN0X25vZGVfcmVsZWFzZQotfTsKLQotLyoKLSAqIFNldHRpbmcgc2l6ZSBvZiB0aGUgbm9kZSBhZnRlciBpdCB3YXMgY2hhbmdlZC4KLSAqLwotc3RhdGljIHZvaWQgZHN0X25vZGVfc2V0X3NpemUoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7Ci0KLQlzZXRfY2FwYWNpdHkobi0+ZGlzaywgbi0+c2l6ZSA+PiA5KTsKLQotCWJkZXYgPSBiZGdldF9kaXNrKG4tPmRpc2ssIDApOwotCWlmIChiZGV2KSB7Ci0JCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKLQkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCBuLT5zaXplKTsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7Ci0JCWJkcHV0KGJkZXYpOwotCX0KLX0KLQotLyoKLSAqIERpc3RyaWJ1dGVkIHN0b3JhZ2UgcmVxdWVzdCBwcm9jZXNzaW5nIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW50IGRzdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gcS0+cXVldWVkYXRhOwotCWludCBlcnIgPSAtRUlPOwotCi0JaWYgKGJpb19lbXB0eV9iYXJyaWVyKGJpbykgJiYgIWJsa19xdWV1ZV9kaXNjYXJkKHEpKSB7Ci0JCS8qCi0JCSAqIFRoaXMgaXMgYSBkaXJ0eV5XbmljZSBoYWNrLCBidXQgaWYgd2UgY29tcGxldGUgdGhpcwotCQkgKiBvcGVyYXRpb24gd2l0aCAtRU9QTk9UU1VQUCBsaWtlIGludGVuZGVkLCBYRlMKLQkJICogd2lsbCBzdHVjayBhbmQgZnJlZXplIHRoZSBtYWNoaW5lLiBUaGlzIG1heSBiZQotCQkgKiBub3QgcGFydGljdWxhcnkgWEZTIHByb2JsZW0gdGhvdWdoLCBidXQgaXQgaXMgdGhlCi0JCSAqIG9ubHkgRlMgd2hpY2ggc2VuZHMgZW1wdHkgYmFycmllciBhdCB1bW91bnQgdGltZQotCQkgKiBJIHdvcmtlZCB3aXRoLgotCQkgKgotCQkgKiBFbXB0eSBiYXJyaWVycyBhcmUgbm90IGFsbG93ZWQgYW55d2F5LCBzZWUgNTFmZDc3YmQ5ZjUxMgotCQkgKiBmb3IgZXhhbXBsZSwgYWx0aG91Z2ggbGF0ZXIgaXQgd2FzIGNoYW5nZWQgdG8KLQkJICogYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgb25seSwgd2hpY2ggZG9lcyBub3QKLQkJICogd29yayBpbiB0aGlzIGNhc2UuCi0JCSAqLwotCQkvKiBlcnIgPSAtRU9QTk9UU1VQUDsgKi8KLQkJZXJyID0gMDsKLQkJZ290byBlbmRfaW87Ci0JfQotCi0JYmlvX2dldChiaW8pOwotCi0JcmV0dXJuIGRzdF9wcm9jZXNzX2JpbyhuLCBiaW8pOwotCi1lbmRfaW86Ci0JYmlvX2VuZGlvKGJpbywgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogT3Blbi9jbG9zZSBjYWxsYmFja3MgZm9yIGFwcHJvcHJpYXRlIGJsb2NrIGRldmljZS4KLSAqLwotc3RhdGljIGludCBkc3RfYmRldl9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQlkc3Rfbm9kZV9nZXQobik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2JkZXZfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGRpc2stPnByaXZhdGVfZGF0YTsKLQotCWRzdF9ub2RlX3B1dChuKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkc3RfYmxrX29wcyA9IHsKLQkub3BlbgkJPSBkc3RfYmRldl9vcGVuLAotCS5yZWxlYXNlCT0gZHN0X2JkZXZfcmVsZWFzZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi19OwotCi0vKgotICogQmxvY2sgbGF5ZXIgYmluZGluZyAtIGRpc2sgaXMgY3JlYXRlZCB3aGVuIGFycmF5IGlzIGZ1bGx5IGNvbmZpZ3VyZWQKLSAqIGJ5IHVzZXJzcGFjZSByZXF1ZXN0LgotICovCi1zdGF0aWMgaW50IGRzdF9ub2RlX2NyZWF0ZV9kaXNrKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQl1MzIgaW5kZXggPSAwOwotCi0Jbi0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShOVUxMLCBOVUxMKTsKLQlpZiAoIW4tPnF1ZXVlKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCW4tPnF1ZXVlLT5xdWV1ZWRhdGEgPSBuOwotCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3Qobi0+cXVldWUsIGRzdF9yZXF1ZXN0KTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMobi0+cXVldWUsIG4tPm1heF9wYWdlcyk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhuLT5xdWV1ZSwgbi0+bWF4X3BhZ2VzKTsKLQotCWVyciA9IC1FTk9NRU07Ci0Jbi0+ZGlzayA9IGFsbG9jX2Rpc2soMSk7Ci0JaWYgKCFuLT5kaXNrKQotCQlnb3RvIGVycl9vdXRfZnJlZV9xdWV1ZTsKLQotCWlmICghKG4tPnN0YXRlLT5wZXJtaXNzaW9ucyAmIERTVF9QRVJNX1dSSVRFKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJEU1Qgbm9kZSAlcyBhdHRhY2hlZCByZWFkLW9ubHkuXG4iLCBuLT5uYW1lKTsKLQkJc2V0X2Rpc2tfcm8obi0+ZGlzaywgMSk7Ci0JfQotCi0JaWYgKCFpZHJfcHJlX2dldCgmZHN0X2luZGV4X2lkciwgR0ZQX0tFUk5FTCkpCi0JCWdvdG8gZXJyX291dF9wdXQ7Ci0KLQltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQllcnIgPSBpZHJfZ2V0X25ldygmZHN0X2luZGV4X2lkciwgTlVMTCwgJmluZGV4KTsKLQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9wdXQ7Ci0KLQluLT5kaXNrLT5tYWpvciA9IGRzdF9tYWpvcjsKLQluLT5kaXNrLT5maXJzdF9taW5vciA9IGluZGV4OwotCW4tPmRpc2stPmZvcHMgPSAmZHN0X2Jsa19vcHM7Ci0Jbi0+ZGlzay0+cXVldWUgPSBuLT5xdWV1ZTsKLQluLT5kaXNrLT5wcml2YXRlX2RhdGEgPSBuOwotCXNucHJpbnRmKG4tPmRpc2stPmRpc2tfbmFtZSwgc2l6ZW9mKG4tPmRpc2stPmRpc2tfbmFtZSksCi0JCQkiZHN0LSVzIiwgbi0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9wdXQ6Ci0JcHV0X2Rpc2sobi0+ZGlzayk7Ci1lcnJfb3V0X2ZyZWVfcXVldWU6Ci0JYmxrX2NsZWFudXBfcXVldWUobi0+cXVldWUpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTeXNmcyBtYWNoaW5lcnk6IHNob3cgZGV2aWNlJ3Mgc2l6ZS4KLSAqLwotc3RhdGljIHNzaXplX3QgZHN0X3Nob3dfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgaW5mby0+c2l6ZSk7Ci19Ci0KLS8qCi0gKiBTaG93IGxvY2FsIGV4cG9ydGVkIGRldmljZS4KLSAqLwotc3RhdGljIHNzaXplX3QgZHN0X3Nob3dfbG9jYWwoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbmZvLT5sb2NhbCk7Ci19Ci0KLS8qCi0gKiBTaG93cyB0eXBlIG9mIHRoZSByZW1vdGUgbm9kZSAtIGRldmljZSBtYWpvci9taW5vciBudW1iZXIKLSAqIGZvciBsb2NhbCBub2RlcyBhbmQgYWRkcmVzcyAoYWZfaW5ldCBpcHY0L2lwdjYgb25seSkgZm9yIHJlbW90ZSBub2Rlcy4KLSAqLwotc3RhdGljIHNzaXplX3QgZHN0X3Nob3dfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOwotCWludCBmYW1pbHkgPSBpbmZvLT5uZXQuYWRkci5zYV9mYW1pbHk7Ci0KLQlpZiAoZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmluZm8tPm5ldC5hZGRyOwotCQlyZXR1cm4gc3ByaW50ZihidWYsICIldS4ldS4ldS4ldTolZFxuIiwKLQkJCU5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7Ci0JfSBlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikKLQkJCQkmaW5mby0+bmV0LmFkZHI7Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwKLQkJCSIlcGk2OiVkXG4iLAotCQkJJnNpbi0+c2luNl9hZGRyLCBudG9ocyhzaW4tPnNpbjZfcG9ydCkpOwotCX0gZWxzZSB7Ci0JCWludCBpLCBzeiA9IFBBR0VfU0laRSAtIDI7IC8qIDAgc3ltYm9sIGFuZCAnXG4nIGJlbG93ICovCi0JCWludCBzaXplLCBhZGRybGVuID0gaW5mby0+bmV0LmFkZHIuc2FfZGF0YV9sZW47Ci0JCXVuc2lnbmVkIGNoYXIgKmEgPSAodW5zaWduZWQgY2hhciAqKSZpbmZvLT5uZXQuYWRkci5zYV9kYXRhOwotCQljaGFyICpidWZfb3JpZyA9IGJ1ZjsKLQotCQlzaXplID0gc25wcmludGYoYnVmLCBzeiwgImZhbWlseTogJWQsIGFkZHJsZW46ICV1LCBhZGRyOiAiLAotCQkJCWZhbWlseSwgYWRkcmxlbik7Ci0JCXN6IC09IHNpemU7Ci0JCWJ1ZiArPSBzaXplOwotCi0JCWZvciAoaSA9IDA7IGkgPCBhZGRybGVuOyArK2kpIHsKLQkJCWlmIChzeiA8IDMpCi0JCQkJYnJlYWs7Ci0KLQkJCXNpemUgPSBzbnByaW50ZihidWYsIHN6LCAiJTAyeCAiLCBhW2ldKTsKLQkJCXN6IC09IHNpemU7Ci0JCQlidWYgKz0gc2l6ZTsKLQkJfQotCQlidWYgKz0gc3ByaW50ZihidWYsICJcbiIpOwotCi0JCXJldHVybiBidWYgLSBidWZfb3JpZzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkc3Rfbm9kZV9hdHRyc1tdID0gewotCV9fQVRUUihzaXplLCAwNDQ0LCBkc3Rfc2hvd19zaXplLCBOVUxMKSwKLQlfX0FUVFIodHlwZSwgMDQ0NCwgZHN0X3Nob3dfdHlwZSwgTlVMTCksCi0JX19BVFRSKGxvY2FsLCAwNDQ0LCBkc3Rfc2hvd19sb2NhbCwgTlVMTCksCi19OwotCi1zdGF0aWMgaW50IGRzdF9jcmVhdGVfbm9kZV9hdHRyaWJ1dGVzKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHN0X25vZGVfYXR0cnMpOyArK2kpIHsKLQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCi0JCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9yZW1vdmVfYWxsOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9yZW1vdmVfYWxsOgotCXdoaWxlICgtLWkgPj0gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCi0JCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVzKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzdF9ub2RlX2F0dHJzKTsgKytpKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm4tPmluZm8tPmRldmljZSwKLQkJCQkmZHN0X25vZGVfYXR0cnNbaV0pOwotfQotCi0vKgotICogU3lzZnMgY2xlYW51cCBhbmQgaW5pdGlhbGl6YXRpb24uCi0gKiBTaG93cyBudW1iZXIgb2YgdXNlZnVsIHBhcmFtZXRlcnMuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX3N5c2ZzX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWlmIChuLT5pbmZvKSB7Ci0JCWRzdF9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVzKG4pOwotCQlkZXZpY2VfdW5yZWdpc3Rlcigmbi0+aW5mby0+ZGV2aWNlKTsKLQkJbi0+aW5mbyA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRzdF9ub2RlX3N5c2ZzX2luaXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWludCBlcnI7Ci0KLQluLT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuLT5pbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweSgmbi0+aW5mby0+ZGV2aWNlLCAmZHN0X25vZGVfZGV2LCBzaXplb2Yoc3RydWN0IGRldmljZSkpOwotCW4tPmluZm8tPnNpemUgPSBuLT5zaXplOwotCi0JZGV2X3NldF9uYW1lKCZuLT5pbmZvLT5kZXZpY2UsICJkc3QtJXMiLCBuLT5uYW1lKTsKLQllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJm4tPmluZm8tPmRldmljZSk7Ci0JaWYgKGVycikgewotCQlkcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgbm9kZSAnJXMnLCBlcnI6ICVkLlxuIiwKLQkJCQluLT5uYW1lLCBlcnIpOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlkc3RfY3JlYXRlX25vZGVfYXR0cmlidXRlcyhuKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0Ja2ZyZWUobi0+aW5mbyk7Ci0Jbi0+aW5mbyA9IE5VTEw7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIERTVCBub2RlIGhhc2ggdGFibGVzIG1hY2hpbmVyeS4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZHN0X2hhc2goY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlyZXR1cm4gamhhc2goc3RyLCBzaXplLCAwKSAlIGRzdF9oYXNodGFibGVfc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X25vZGVfcmVtb3ZlKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQlsaXN0X2RlbF9pbml0KCZuLT5ub2RlX2VudHJ5KTsKLQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBkc3Rfbm9kZV9hZGQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXVuc2lnbmVkIGhhc2ggPSBkc3RfaGFzaChuLT5uYW1lLCBzaXplb2Yobi0+bmFtZSkpOwotCi0JbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmbi0+bm9kZV9lbnRyeSwgJmRzdF9oYXNodGFibGVbaGFzaF0pOwotCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Ci19Ci0KLS8qCi0gKiBDbGVhbmluZyBub2RlIHdoZW4gaXQgaXMgYWJvdXQgdG8gYmUgZnJlZWQuCi0gKiBUaGVyZSBhcmUgc3RpbGwgdXNlcnMgb2YgdGhlIHNvY2tldCB0aG91Z2gsCi0gKiBzbyBjb25uZWN0aW9uIGNsZWFudXAgc2hvdWxkIGJlIHByb3RlY3RlZC4KLSAqLwotc3RhdGljIHZvaWQgZHN0X25vZGVfY2xlYW51cChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBuLT5zdGF0ZTsKLQotCWlmICghc3QpCi0JCXJldHVybjsKLQotCWlmIChuLT5xdWV1ZSkgewotCQlibGtfY2xlYW51cF9xdWV1ZShuLT5xdWV1ZSk7Ci0KLQkJbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JCWlkcl9yZW1vdmUoJmRzdF9pbmRleF9pZHIsIG4tPmRpc2stPmZpcnN0X21pbm9yKTsKLQkJbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQotCQlwdXRfZGlzayhuLT5kaXNrKTsKLQl9Ci0KLQlpZiAobi0+YmRldikgewotCQlzeW5jX2Jsb2NrZGV2KG4tPmJkZXYpOwotCQljbG9zZV9iZGV2X2V4Y2x1c2l2ZShuLT5iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKLQl9Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0Jc3QtPm5lZWRfZXhpdCA9IDE7Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci0KLQlkc3Rfc3RhdGVfcHV0KHN0KTsKLQluLT5zdGF0ZSA9IE5VTEw7Ci19Ci0KLS8qCi0gKiBGcmVlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gZ2l2ZW4gbm9kZS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X3NlY3VyaXR5X2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3Rfc2VjdXJlICpzLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIHRtcCwgJm4tPnNlY3VyaXR5X2xpc3QsIHNlY19lbnRyeSkgewotCQlsaXN0X2RlbCgmcy0+c2VjX2VudHJ5KTsKLQkJa2ZyZWUocyk7Ci0JfQotfQotCi0vKgotICogRnJlZSBub2RlIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgdXNlcnMuCi0gKiBBY3R1YWxseSBub2RlIGhhcyB0byBiZSBmcmVlZCBvbiBiZWhhbGYgb2QgdXNlcnNwYWNlIHByb2Nlc3MsCi0gKiBzaW5jZSB0aGVyZSBhcmUgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGFyZSBlbWJlZGRlZCBpbiB0aGUKLSAqIG5vZGUsIHNvIHRoZXkgY2FuIG5vdCBleGl0IGFuZCBmcmVlIG5vZGUgZnJvbSB0aGVyZSwgdGhhdCBpcwotICogd2h5IHRoZXJlIGlzIGEgd2FrZXVwIGlmIHJlZmVyZW5jZSBjb3VudGVyIGlzIG5vdCBlcXVhbCB0byB6ZXJvLgotICovCi12b2lkIGRzdF9ub2RlX3B1dChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaWYgKHVubGlrZWx5KCFuKSkKLQkJcmV0dXJuOwotCi0JZHByaW50aygiJXM6IG46ICVwLCByZWZjbnQ6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCBuLCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbi0+cmVmY250KSkgewotCQlkc3Rfbm9kZV9yZW1vdmUobik7Ci0JCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IDA7Ci0JCWRzdF9ub2RlX2NsZWFudXAobik7Ci0JCXRocmVhZF9wb29sX2Rlc3Ryb3kobi0+cG9vbCk7Ci0JCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7Ci0JCWRzdF9ub2RlX2NyeXB0b19leGl0KG4pOwotCQlkc3Rfc2VjdXJpdHlfZXhpdChuKTsKLQkJZHN0X25vZGVfdHJhbnNfZXhpdChuKTsKLQotCQlrZnJlZShuKTsKLQotCQlkcHJpbnRrKCIlczogZnJlZWQgbjogJXAuXG4iLCBfX2Z1bmNfXywgbik7Ci0JfSBlbHNlIHsKLQkJd2FrZV91cCgmbi0+d2FpdCk7Ci0JfQotfQotCi0vKgotICogU2V0dGluZyB1cCBleHBvcnQgZGV2aWNlOiBsb29rdXAgYnkgdGhlIG5hbWUsIGdldCBpdHMgc2l6ZQotICogYW5kIHNldHVwIGxpc3RlbmluZyBzb2NrZXQsIHdoaWNoIHdpbGwgYWNjZXB0IGNsaWVudHMsIHdoaWNoCi0gKiB3aWxsIHN1Ym1pdCBJTyBmb3IgZ2l2ZW4gc3RvcmFnZS4KLSAqLwotc3RhdGljIGludCBkc3Rfc2V0dXBfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSkKLXsKLQlpbnQgZXJyOwotCi0Jc25wcmludGYobi0+aW5mby0+bG9jYWwsIHNpemVvZihuLT5pbmZvLT5sb2NhbCksICIlcyIsIGxlLT5kZXZpY2UpOwotCi0Jbi0+YmRldiA9IG9wZW5fYmRldl9leGNsdXNpdmUobGUtPmRldmljZSwgRk1PREVfUkVBRHxGTU9ERV9XUklURSwgTlVMTCk7Ci0JaWYgKElTX0VSUihuLT5iZGV2KSkKLQkJcmV0dXJuIFBUUl9FUlIobi0+YmRldik7Ci0KLQlpZiAobi0+c2l6ZSAhPSAwKQotCQluLT5zaXplID0gbWluX3QobG9mZl90LCBuLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplLCBuLT5zaXplKTsKLQllbHNlCi0JCW4tPnNpemUgPSBuLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplOwotCi0Jbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7Ci0JZXJyID0gZHN0X25vZGVfaW5pdF9saXN0ZW5lZChuLCBsZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2NsZWFudXA7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9jbGVhbnVwOgotCWNsb3NlX2JkZXZfZXhjbHVzaXZlKG4tPmJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOwotCW4tPmJkZXYgPSBOVUxMOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyogRW1wdHkgdGhyZWFkIHBvb2wgY2FsbGJhY2tzIGZvciB0aGUgbmV0d29yayBwcm9jZXNzaW5nIHRocmVhZHMuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRzdF90aHJlYWRfbmV0d29ya19pbml0KHZvaWQgKmRhdGEpCi17Ci0JZHByaW50aygiJXM6IGRhdGE6ICVwLlxuIiwgX19mdW5jX18sIGRhdGEpOwotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3RocmVhZF9uZXR3b3JrX2NsZWFudXAodm9pZCAqZGF0YSkKLXsKLQlkcHJpbnRrKCIlczogZGF0YTogJXAuXG4iLCBfX2Z1bmNfXywgZGF0YSk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBEU1Qgbm9kZSBhbmQgaW5pdGlhbGl6ZSBzb21lIG9mIGl0cyBwYXJhbWV0ZXJzLgotICovCi1zdGF0aWMgc3RydWN0IGRzdF9ub2RlICpkc3RfYWxsb2Nfbm9kZShzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQlpbnQgKCpzdGFydCkoc3RydWN0IGRzdF9ub2RlICopLAotCQlpbnQgbnVtKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbjsKLQlpbnQgZXJyOwotCi0JbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfbm9kZSksIEdGUF9LRVJORUwpOwotCWlmICghbikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbi0+bm9kZV9lbnRyeSk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbi0+c2VjdXJpdHlfbGlzdCk7Ci0JbXV0ZXhfaW5pdCgmbi0+c2VjdXJpdHlfbG9jayk7Ci0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuLT53YWl0KTsKLQotCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoY3RsLT50cmFuc19zY2FuX3RpbWVvdXQpOwotCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0KQotCQluLT50cmFuc19zY2FuX3RpbWVvdXQgPSBIWjsKLQotCW4tPnRyYW5zX21heF9yZXRyaWVzID0gY3RsLT50cmFuc19tYXhfcmV0cmllczsKLQlpZiAoIW4tPnRyYW5zX21heF9yZXRyaWVzKQotCQluLT50cmFuc19tYXhfcmV0cmllcyA9IDEwOwotCi0JLyoKLQkgKiBQcmV0dHkgbXVjaCBhcmJpdHJhcnkgZGVmYXVsdCBudW1iZXJzLgotCSAqIDMyIG1hdGNoZXMgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgaW4gYmlvIG9yaWdpbmF0ZWQgZnJvbSBleHQzICgzMSkuCi0JICovCi0Jbi0+bWF4X3BhZ2VzID0gY3RsLT5tYXhfcGFnZXM7Ci0JaWYgKCFuLT5tYXhfcGFnZXMpCi0JCW4tPm1heF9wYWdlcyA9IDMyOwotCi0JaWYgKG4tPm1heF9wYWdlcyA+IDEwMjQpCi0JCW4tPm1heF9wYWdlcyA9IDEwMjQ7Ci0KLQluLT5zdGFydCA9IHN0YXJ0OwotCW4tPnNpemUgPSBjdGwtPnNpemU7Ci0KLQlhdG9taWNfc2V0KCZuLT5yZWZjbnQsIDEpOwotCWF0b21pY19sb25nX3NldCgmbi0+Z2VuLCAwKTsKLQlzbnByaW50ZihuLT5uYW1lLCBzaXplb2Yobi0+bmFtZSksICIlcyIsIGN0bC0+bmFtZSk7Ci0KLQllcnIgPSBkc3Rfbm9kZV9zeXNmc19pbml0KG4pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0Jbi0+cG9vbCA9IHRocmVhZF9wb29sX2NyZWF0ZShudW0sIG4tPm5hbWUsIGRzdF90aHJlYWRfbmV0d29ya19pbml0LAotCQkJZHN0X3RocmVhZF9uZXR3b3JrX2NsZWFudXAsIG4pOwotCWlmIChJU19FUlIobi0+cG9vbCkpIHsKLQkJZXJyID0gUFRSX0VSUihuLT5wb29sKTsKLQkJZ290byBlcnJfb3V0X3N5c2ZzX2V4aXQ7Ci0JfQotCi0JZHByaW50aygiJXM6IG46ICVwLCBuYW1lOiAlcy5cbiIsIF9fZnVuY19fLCBuLCBuLT5uYW1lKTsKLQotCXJldHVybiBuOwotCi1lcnJfb3V0X3N5c2ZzX2V4aXQ6Ci0JZHN0X25vZGVfc3lzZnNfZXhpdChuKTsKLWVycl9vdXRfZnJlZToKLQlrZnJlZShuKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIFN0YXJ0aW5nIGEgbm9kZSwgY29ubmVjdGVkIHRvIHRoZSByZW1vdGUgc2VydmVyOgotICogcmVnaXN0ZXIgYmxvY2sgZGV2aWNlIGFuZCBpbml0aWFsaXplIHRyYW5zYWN0aW9uIG1lY2hhbmlzbS4KLSAqIEluIHJldmVycyBvcmRlciB0aG91Z2guCi0gKgotICogSXQgd2lsbCBhdXRvbmVnb3RpYXRlIHNvbWUgcGFyYW1ldGVycyB3aXRoIHRoZSByZW1vdGUgbm9kZQotICogYW5kIHVwZGF0ZSBsb2NhbCBpZiBuZWVkZWQuCi0gKgotICogVHJhbnNhY3Rpb24gaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIHRoZSBsYXN0IHRoaW5nIGJlZm9yZQotICogc3RhcnRpbmcgdGhlIG5vZGUsIHNpbmNlIHRyYW5zYWN0aW9uIHNob3VsZCBpbmNsdWRlIG5vdCBvbmx5Ci0gKiBibG9jayBJTywgYnV0IGFsc28gY3J5cHRvIHJlbGF0ZWQgZGF0YSAoaWYgYW55KSwgd2hpY2ggYXJlCi0gKiBpbml0aWFsaXplZCBzZXBhcmF0ZWx5LgotICovCi1zdGF0aWMgaW50IGRzdF9zdGFydF9yZW1vdGUoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBkc3Rfbm9kZV90cmFuc19pbml0KG4sIHNpemVvZihzdHJ1Y3QgZHN0X3RyYW5zKSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGRzdF9ub2RlX2NyZWF0ZV9kaXNrKG4pOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlkc3Rfbm9kZV9zZXRfc2l6ZShuKTsKLQlhZGRfZGlzayhuLT5kaXNrKTsKLQotCWRwcmludGsoIkRTVDogc3RhcnRlZCByZW1vdGUgbm9kZSAnJXMnLCBtaW5vcjogJWQuXG4iLAotCQkJbi0+bmFtZSwgbi0+ZGlzay0+Zmlyc3RfbWlub3IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBBZGRpbmcgcmVtb3RlIG5vZGUgYW5kIGluaXRpYWxpemUgY29ubmVjdGlvbi4KLSAqLwotc3RhdGljIGludCBkc3RfYWRkX3JlbW90ZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcmN0bCA9IGRhdGE7Ci0KLQlpZiAobikKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbiA9IGRzdF9hbGxvY19ub2RlKGN0bCwgZHN0X3N0YXJ0X3JlbW90ZSwgMSk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweSgmbi0+aW5mby0+bmV0LCByY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOwotCWVyciA9IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKG4sIHJjdGwpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZHN0X25vZGVfYWRkKG4pOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZToKLQlkc3Rfbm9kZV9wdXQobik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIEFkZGluZyBleHBvcnQgbm9kZTogaW5pdGlhbGl6aW5nIGJsb2NrIGRldmljZSBhbmQgbGlzdGVuaW5nIHNvY2tldC4KLSAqLwotc3RhdGljIGludCBkc3RfYWRkX2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSA9IGRhdGE7Ci0KLQlpZiAobikKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9leHBvcnRfY3RsKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQluID0gZHN0X2FsbG9jX25vZGUoY3RsLCBkc3Rfc3RhcnRfZXhwb3J0LCAyKTsKLQlpZiAoIW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZXJyID0gZHN0X3NldHVwX2V4cG9ydChuLCBjdGwsIGxlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCWRzdF9ub2RlX2FkZChuKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JZHN0X25vZGVfcHV0KG4pOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X25vZGVfcmVtb3ZlX3VubG9hZChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU1RPUFBFRCBuYW1lOiAnJXMnLCBzaXplOiAlbGx1LlxuIiwKLQkJCW4tPm5hbWUsIG4tPnNpemUpOwotCi0JaWYgKG4tPmRpc2spCi0JCWRlbF9nZW5kaXNrKG4tPmRpc2spOwotCi0JZHN0X25vZGVfcmVtb3ZlKG4pOwotCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7Ci0KLQkvKgotCSAqIFRoaXMgaXMgbm90IGEgaGFjay4gUmVhbGx5LgotCSAqIE5vZGUncyByZWZlcmVuY2UgY291bnRlciBhbGxvd3MgdG8gaW1wbGVtZW50IGZpbmUgZ3JhaW5lZAotCSAqIG5vZGUgZnJlZWluZywgYnV0IHNpbmNlIGFsbCB0cmFuc2FjdGlvbnMgKHdoaWNoIGhvbGQgbm9kZSdzCi0JICogcmVmZXJlbmNlIGNvdW50ZXIpIGFyZSBwcm9jZXNzZWQgaW4gdGhlIGRlZGljYXRlZCB0aHJlYWQsCi0JICogaXQgaXMgcG9zc2libGUgdGhhdCByZWZlcmVuY2Ugd2lsbCBoaXQgemVybyBpbiB0aGF0IHRocmVhZCwKLQkgKiBzbyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGV4aXQgdGhyZWFkIGFuZCBjbGVhbnVwIHRoZSBub2RlLgotCSAqCi0JICogU28sIHdlIHJlbW92ZSBkaXNrLCBzbyBubyBuZXcgYWN0aXZpdHkgaXMgcG9zc2libGUsIGFuZAotCSAqIHdhaXQgdW50aWwgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb24gYXJlIGNvbXBsZXRlZCAoZWl0aGVyCi0JICogaW4gcmVjZWl2aW5nIHRocmVhZCBvciBieSB0aW1lb3V0IGluIHdvcmtxdWV1ZSksIGluIHRoaXMKLQkgKiBjYXNlIHJlZmVyZW5jZSBjb3VudGVyIHdpbGwgYmUgbGVzcyBvciBlcXVhbCB0byAyIChvbmNlIHNldCBpbgotCSAqIGRzdF9hbGxvY19ub2RlKCkgYW5kIHRoZW4gaW4gY29ubmVjdG9yIG1lc3NhZ2UgcGFyc2VyOwotCSAqIG9yIHdoZW4gd2UgZm9yY2UgbW9kdWxlIHVubG9hZGluZywgYW5kIGNvbm5lY3RvciBtZXNzYWdlCi0JICogcGFyc2VyIGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UsIGluIHRoaXMgY2FzZSByZWZlcmVuY2UKLQkgKiBjb3VudGVyIHdpbGwgYmUgZXF1YWwgdG8gMSksCi0JICogYW5kIHN1YnNlcXVlbnQgZHN0X25vZGVfcHV0KCkgY2FsbHMgd2lsbCBmcmVlIHRoZSBub2RlLgotCSAqLwotCWRwcmludGsoIiVzOiBnb2luZyB0byBzbGVlcCB3aXRoICVkIHJlZmNudC5cbiIsCi0JCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJm4tPnJlZmNudCkpOwotCXdhaXRfZXZlbnQobi0+d2FpdCwgYXRvbWljX3JlYWQoJm4tPnJlZmNudCkgPD0gMik7Ci0KLQlkc3Rfbm9kZV9wdXQobik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgbm9kZSBmcm9tIHRoZSBoYXNoIHRhYmxlLgotICovCi1zdGF0aWMgaW50IGRzdF9kZWxfbm9kZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCWlmICghbikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gZHN0X25vZGVfcmVtb3ZlX3VubG9hZChuKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgY3J5cHRvIHByb2Nlc3NpbmcgZm9yIGdpdmVuIG5vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjcnlwdG8gPSBkYXRhOwotCi0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZHN0X2NyeXB0b19jdGwpICsgY3J5cHRvLT5oYXNoX2tleXNpemUgKwotCQkJY3J5cHRvLT5jaXBoZXJfa2V5c2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobi0+dHJhbnNfY2FjaGUpCi0JCXJldHVybiAtRUVYSVNUOwotCi0JcmV0dXJuIGRzdF9ub2RlX2NyeXB0b19pbml0KG4sIGNyeXB0byk7Ci19Ci0KLS8qCi0gKiBTZWN1cml0eSBhdHRyaWJ1dGVzIGZvciBnaXZlbiBub2RlLgotICovCi1zdGF0aWMgaW50IGRzdF9zZWN1cml0eV9pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jc3RydWN0IGRzdF9zZWN1cmUgKnM7Ci0KLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X3NlY3VyZSksIEdGUF9LRVJORUwpOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoJnMtPnNlYywgZGF0YSwgc2l6ZSk7Ci0KLQltdXRleF9sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZzLT5zZWNfZW50cnksICZuLT5zZWN1cml0eV9saXN0KTsKLQltdXRleF91bmxvY2soJm4tPnNlY3VyaXR5X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBLaWxsJ2VtIGFsbCEKLSAqLwotc3RhdGljIGludCBkc3Rfc3RhcnRfbm9kZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCWludCBlcnI7Ci0KLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKG4tPnRyYW5zX2NhY2hlKQotCQlyZXR1cm4gMDsKLQotCWVyciA9IG4tPnN0YXJ0KG4pOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTVEFSVEVEIG5hbWU6ICclcycsIHNpemU6ICVsbHUuXG4iLCBuLT5uYW1lLCBuLT5zaXplKTsKLQlyZXR1cm4gMDsKLX0KLQotdHlwZWRlZiBpbnQgKCpkc3RfY29tbWFuZF9mdW5jKShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKTsKLQotLyoKLSAqIExpc3Qgb2YgdXNlcnNwYWNlIGNvbW1hbmRzLgotICovCi1zdGF0aWMgZHN0X2NvbW1hbmRfZnVuYyBkc3RfY29tbWFuZHNbXSA9IHsKLQlbRFNUX0FERF9SRU1PVEVdID0gJmRzdF9hZGRfcmVtb3RlLAotCVtEU1RfQUREX0VYUE9SVF0gPSAmZHN0X2FkZF9leHBvcnQsCi0JW0RTVF9ERUxfTk9ERV0gPSAmZHN0X2RlbF9ub2RlLAotCVtEU1RfQ1JZUFRPXSA9ICZkc3RfY3J5cHRvX2luaXQsCi0JW0RTVF9TRUNVUklUWV0gPSAmZHN0X3NlY3VyaXR5X2luaXQsCi0JW0RTVF9TVEFSVF0gPSAmZHN0X3N0YXJ0X25vZGUsCi19OwotCi0vKgotICogQ29uZmlndXJhdGlvbiBwYXJzZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGNuX2RzdF9jYWxsYmFjayhzdHJ1Y3QgY25fbXNnICptc2csIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqbnNwKQotewotCXN0cnVjdCBkc3RfY3RsICpjdGw7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X2N0bF9hY2sgYWNrOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IE5VTEwsICp0bXA7Ci0JdW5zaWduZWQgaW50IGhhc2g7Ci0KLQlpZiAoIWNhcF9yYWlzZWQobnNwLT5lZmZfY2FwLCBDQVBfU1lTX0FETUlOKSkgewotCQllcnIgPSAtRVBFUk07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChtc2ctPmxlbiA8IHNpemVvZihzdHJ1Y3QgZHN0X2N0bCkpIHsKLQkJZXJyID0gLUVCQURNU0c7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWN0bCA9IChzdHJ1Y3QgZHN0X2N0bCAqKW1zZy0+ZGF0YTsKLQotCWlmIChjdGwtPmNtZCA+PSBEU1RfQ01EX01BWCkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaGFzaCA9IGRzdF9oYXNoKGN0bC0+bmFtZSwgc2l6ZW9mKGN0bC0+bmFtZSkpOwotCi0JbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZkc3RfaGFzaHRhYmxlW2hhc2hdLCBub2RlX2VudHJ5KSB7Ci0JCWlmICghbWVtY21wKHRtcC0+bmFtZSwgY3RsLT5uYW1lLCBzaXplb2YodG1wLT5uYW1lKSkpIHsKLQkJCW4gPSB0bXA7Ci0JCQlkc3Rfbm9kZV9nZXQobik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotCi0JZXJyID0gZHN0X2NvbW1hbmRzW2N0bC0+Y21kXShuLCBjdGwsIG1zZy0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgZHN0X2N0bCksCi0JCQltc2ctPmxlbiAtIHNpemVvZihzdHJ1Y3QgZHN0X2N0bCkpOwotCi0JZHN0X25vZGVfcHV0KG4pOwotb3V0OgotCW1lbWNweSgmYWNrLm1zZywgbXNnLCBzaXplb2Yoc3RydWN0IGNuX21zZykpOwotCi0JYWNrLm1zZy5hY2sgPSBtc2ctPmFjayArIDE7Ci0JYWNrLm1zZy5sZW4gPSBzaXplb2Yoc3RydWN0IGRzdF9jdGxfYWNrKSAtIHNpemVvZihzdHJ1Y3QgY25fbXNnKTsKLQotCWFjay5lcnJvciA9IGVycjsKLQotCWNuX25ldGxpbmtfc2VuZCgmYWNrLm1zZywgMCwgR0ZQX0tFUk5FTCk7Ci19Ci0KLS8qCi0gKiBHbG9iYWwgaW5pdGlhbGl6YXRpb246IHN5c2ZzLCBoYXNoIHRhYmxlLCBibG9jayBkZXZpY2UgcmVnaXN0cmF0aW9uLAotICogY29ubmVjdG9yIGFuZCB2YXJpb3VzIGNhY2hlcy4KLSAqLwotc3RhdGljIGludCBfX2luaXQgZHN0X3N5c2ZzX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gYnVzX3JlZ2lzdGVyKCZkc3RfZGV2X2J1c190eXBlKTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X3N5c2ZzX2V4aXQodm9pZCkKLXsKLQlidXNfdW5yZWdpc3RlcigmZHN0X2Rldl9idXNfdHlwZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRzdF9oYXNodGFibGVfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZHN0X2hhc2h0YWJsZSA9IGtjYWxsb2MoZHN0X2hhc2h0YWJsZV9zaXplLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWRzdF9oYXNodGFibGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IGRzdF9oYXNodGFibGVfc2l6ZTsgKytpKQotCQlJTklUX0xJU1RfSEVBRCgmZHN0X2hhc2h0YWJsZVtpXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHN0X2hhc2h0YWJsZV9leGl0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IGRzdF9ub2RlICpuLCAqdG1wOwotCi0JZm9yIChpID0gMDsgaSA8IGRzdF9oYXNodGFibGVfc2l6ZTsgKytpKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuLCB0bXAsICZkc3RfaGFzaHRhYmxlW2ldLCBub2RlX2VudHJ5KSB7Ci0JCQlkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKG4pOwotCQl9Ci0JfQotCi0Ja2ZyZWUoZHN0X2hhc2h0YWJsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRzdF9zeXNfaW5pdCh2b2lkKQotewotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JZXJyID0gZHN0X2hhc2h0YWJsZV9pbml0KCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQllcnIgPSBkc3RfZXhwb3J0X2luaXQoKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfaGFzaHRhYmxlX2V4aXQ7Ci0KLQllcnIgPSByZWdpc3Rlcl9ibGtkZXYoZHN0X21ham9yLCBEU1RfTkFNRSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyX291dF9leHBvcnRfZXhpdDsKLQlpZiAoZXJyKQotCQlkc3RfbWFqb3IgPSBlcnI7Ci0KLQllcnIgPSBkc3Rfc3lzZnNfaW5pdCgpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyOwotCi0JZXJyID0gY25fYWRkX2NhbGxiYWNrKCZjbl9kc3RfaWQsICJEU1QiLCBjbl9kc3RfY2FsbGJhY2spOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9zeXNmc19leGl0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRGlzdHJpYnV0ZWQgc3RvcmFnZSwgJyVzJyByZWxlYXNlLlxuIiwgZHN0X25hbWUpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfc3lzZnNfZXhpdDoKLQlkc3Rfc3lzZnNfZXhpdCgpOwotZXJyX291dF91bnJlZ2lzdGVyOgotCXVucmVnaXN0ZXJfYmxrZGV2KGRzdF9tYWpvciwgRFNUX05BTUUpOwotZXJyX291dF9leHBvcnRfZXhpdDoKLQlkc3RfZXhwb3J0X2V4aXQoKTsKLWVycl9vdXRfaGFzaHRhYmxlX2V4aXQ6Ci0JZHN0X2hhc2h0YWJsZV9leGl0KCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGRzdF9zeXNfZXhpdCh2b2lkKQotewotCWNuX2RlbF9jYWxsYmFjaygmY25fZHN0X2lkKTsKLQl1bnJlZ2lzdGVyX2Jsa2Rldihkc3RfbWFqb3IsIERTVF9OQU1FKTsKLQlkc3RfaGFzaHRhYmxlX2V4aXQoKTsKLQlkc3Rfc3lzZnNfZXhpdCgpOwotCWRzdF9leHBvcnRfZXhpdCgpOwotfQotCi1tb2R1bGVfaW5pdChkc3Rfc3lzX2luaXQpOwotbW9kdWxlX2V4aXQoZHN0X3N5c19leGl0KTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJEaXN0cmlidXRlZCBzdG9yYWdlIik7Ci1NT0RVTEVfQVVUSE9SKCJFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2V4cG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMyNDIzMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2V4cG9ydC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYwICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi0vKgotICogRXhwb3J0IGJpb3NldCBpcyB1c2VkIGZvciBzZXJ2ZXIgYmxvY2sgSU8gcmVxdWVzdHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYmlvX3NldCAqZHN0X2Jpb19zZXQ7Ci0KLWludCBfX2luaXQgZHN0X2V4cG9ydF9pbml0KHZvaWQpCi17Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlkc3RfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoMzIsIHNpemVvZihzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7Ci0JaWYgKCFkc3RfYmlvX3NldCkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgZHN0X2V4cG9ydF9leGl0KHZvaWQpCi17Ci0JYmlvc2V0X2ZyZWUoZHN0X2Jpb19zZXQpOwotfQotCi0vKgotICogV2hlbiBjbGllbnQgY29ubmVjdHMgYW5kIGF1dG9uZWdvdGlhdGVzIHdpdGggdGhlIHNlcnZlciBub2RlLAotICogaXRzIHBlcm1pc3Npb25zIGFyZSBjaGVja2VkIGluIGEgc2VjdXJpdHkgYXR0cmlidXRlcyBhbmQgc2VudAotICogYmFjay4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkc3RfY2hlY2tfcGVybWlzc2lvbnMoc3RydWN0IGRzdF9zdGF0ZSAqbWFpbiwKLQkJc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gbWFpbi0+bm9kZTsKLQlzdHJ1Y3QgZHN0X3NlY3VyZSAqc2VudHJ5OwotCXN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIgKnM7Ci0Jc3RydWN0IHNhZGRyICpzYSA9ICZzdC0+Y3RsLmFkZHI7Ci0JdW5zaWduZWQgaW50IHBlcm0gPSAwOwotCi0JbXV0ZXhfbG9jaygmbi0+c2VjdXJpdHlfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZW50cnksICZuLT5zZWN1cml0eV9saXN0LCBzZWNfZW50cnkpIHsKLQkJcyA9ICZzZW50cnktPnNlYzsKLQotCQlpZiAocy0+YWRkci5zYV9mYW1pbHkgIT0gc2EtPnNhX2ZhbWlseSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzLT5hZGRyLnNhX2RhdGFfbGVuICE9IHNhLT5zYV9kYXRhX2xlbikKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIFRoaXMgJzInIGJlbG93IGlzIGEgcG9ydCBmaWVsZC4gVGhpcyBtYXkgYmUgdmVyeSB3cm9uZyB0byBkbwotCQkgKiBpbiBhdGFsayBmb3IgZXhhbXBsZSB0aG91Z2guIElmIHRoZXJlIHdpbGwgYmUgYW55IG5lZWQKLQkJICogdG8gZXh0ZW50IHByb3RvY29sIHRvIHNvbWV0aGluZyBlbHNlLCBJIGNhbiBjcmVhdGUKLQkJICogcGVyLWZhbWlseSBoZWxwZXJzIGFuZCB1c2UgdGhlbSBpbnN0ZWFkIG9mIHRoaXMgbWVtY21wLgotCQkgKi8KLQkJaWYgKG1lbWNtcChzLT5hZGRyLnNhX2RhdGEgKyAyLCBzYS0+c2FfZGF0YSArIDIsCi0JCQkJCXNhLT5zYV9kYXRhX2xlbiAtIDIpKQotCQkJY29udGludWU7Ci0KLQkJcGVybSA9IHMtPnBlcm1pc3Npb25zOwotCX0KLQltdXRleF91bmxvY2soJm4tPnNlY3VyaXR5X2xvY2spOwotCi0JcmV0dXJuIHBlcm07Ci19Ci0KLS8qCi0gKiBBY2NlcHQgbmV3IGNsaWVudDogYWxsb2NhdGUgYXBwcm9wcmlhdGUgbmV0d29yayBzdGF0ZSBhbmQgY2hlY2sgcGVybWlzc2lvbnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHN0X3N0YXRlICpkc3RfYWNjZXB0X2NsaWVudChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IDA7Ci0JdW5zaWduZWQgaW50IGVycl9tYXNrID0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSBlcnJfbWFzayB8IFBPTExJTjsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gTlVMTDsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpuZXc7Ci0KLQl3aGlsZSAoIWVyciAmJiAhc29jaykgewotCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOwotCi0JCWlmICghKHJldmVudHMgJiBtYXNrKSkgewotCQkJREVGSU5FX1dBSVQod2FpdCk7Ci0KLQkJCWZvciAoOzspIHsKLQkJCQlwcmVwYXJlX3RvX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwKLQkJCQkJCSZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQkJCWJyZWFrOwotCi0JCQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKLQotCQkJCWlmIChyZXZlbnRzICYgbWFzaykKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJCWJyZWFrOwotCi0JCQkJLyoKLQkJCQkgKiBNYWdpYyBIWj8gUG9sbGluZyBjaGVjayBhYm92ZSBpcyBub3Qgc2FmZSBpbgotCQkJCSAqIGFsbCBjYXNlcyAobGlrZSBzb2NrZXQgcmVzZXQgaW4gQkggY29udGV4dCksCi0JCQkJICogc28gaXQgaXMgc2ltcGxlciBqdXN0IHRvIHBvc3Rwb25lIGl0IHRvIHRoZQotCQkJCSAqIHByb2Nlc3MgY29udGV4dCBpbnN0ZWFkIG9mIGltcGxlbWVudGluZwotCQkJCSAqIHNwZWNpYWwgbG9ja2luZyB0aGVyZS4KLQkJCQkgKi8KLQkJCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKLQkJCX0KLQkJCWZpbmlzaF93YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0KTsKLQkJfQotCi0JCWVyciA9IC1FQ09OTlJFU0VUOwotCQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0KLQkJZHByaW50aygiJXM6IHN0OiAlcCwgcmV2ZW50czogJXggW2VycjogJWQsIGluOiAlZF0uXG4iLAotCQkJX19mdW5jX18sIHN0LCByZXZlbnRzLCByZXZlbnRzICYgZXJyX21hc2ssCi0JCQlyZXZlbnRzICYgUE9MTElOKTsKLQotCQlpZiAocmV2ZW50cyAmIGVycl9tYXNrKSB7Ci0JCQlkcHJpbnRrKCIlczogcmV2ZW50czogJXgsIHNvY2tldDogJXAsIGVycjogJWQuXG4iLAotCQkJCQlfX2Z1bmNfXywgcmV2ZW50cywgc3QtPnNvY2tldCwgZXJyKTsKLQkJCWVyciA9IC1FQ09OTlJFU0VUOwotCQl9Ci0KLQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKLQkJCWVyciA9IC1FTk9ERVY7Ci0KLQkJaWYgKHN0LT5zb2NrZXQgJiYgKHJldmVudHMgJiBQT0xMSU4pKQotCQkJZXJyID0ga2VybmVsX2FjY2VwdChzdC0+c29ja2V0LCAmc29jaywgMCk7Ci0KLQkJZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0JfQotCi0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQluZXcgPSBkc3Rfc3RhdGVfYWxsb2Moc3QtPm5vZGUpOwotCWlmIChJU19FUlIobmV3KSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKLQl9Ci0JbmV3LT5zb2NrZXQgPSBzb2NrOwotCi0JbmV3LT5jdGwuYWRkci5zYV9kYXRhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpOwotCWVyciA9IGtlcm5lbF9nZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5ldy0+Y3RsLmFkZHIsCi0JCQkoaW50ICopJm5ldy0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9wdXQ7Ci0KLQluZXctPnBlcm1pc3Npb25zID0gZHN0X2NoZWNrX3Blcm1pc3Npb25zKHN0LCBuZXcpOwotCWlmIChuZXctPnBlcm1pc3Npb25zID09IDApIHsKLQkJZXJyID0gLUVQRVJNOwotCQlkc3RfZHVtcF9hZGRyKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV3LT5jdGwuYWRkciwKLQkJCQkiQ2xpZW50IGlzIG5vdCBhbGxvd2VkIHRvIGNvbm5lY3QiKTsKLQkJZ290byBlcnJfb3V0X3B1dDsKLQl9Ci0KLQllcnIgPSBkc3RfcG9sbF9pbml0KG5ldyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3B1dDsKLQotCWRzdF9kdW1wX2FkZHIoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPmN0bC5hZGRyLAotCQkJIkNvbm5lY3RlZCBjbGllbnQiKTsKLQotCXJldHVybiBuZXc7Ci0KLWVycl9vdXRfcHV0OgotCWRzdF9zdGF0ZV9wdXQobmV3KTsKLWVycl9vdXRfcmVsZWFzZToKLQlzb2NrX3JlbGVhc2Uoc29jayk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotLyoKLSAqIEVhY2ggc2VydmVyJ3MgYmxvY2sgcmVxdWVzdCBzb21ldGltZSBmaW5pc2hlcy4KLSAqIFVzdWFsbHkgaXQgaGFwcGVucyBpbiBoYXJkIGlycSBjb250ZXh0IG9mIHRoZSBhcHByb3ByaWF0ZSBjb250cm9sbGVyLAotICogc28gdG8gcGxheSBnb29kIHdpdGggYWxsIGNhc2VzIHdlIGp1c3QgcXVldWUgQklPIGludG8gdGhlIHF1ZXVlCi0gKiBhbmQgd2FrZSB1cCBwcm9jZXNzaW5nIHRocmVhZCwgd2hpY2ggZ2V0cyBjb21wbGV0ZWQgcmVxdWVzdCBhbmQKLSAqIHNlbmQgKGVuY3J5cHRpbmcgaWYgbmVlZGVkKSBpdCBiYWNrIHRvIHRoZSBjbGllbnQgKGlmIGl0IHdhcyBhIHJlYWQKLSAqIHJlcXVlc3QpLCBvciBzZW5kcyBiYWNrIHJlcGx5IHRoYXQgd3JpdGluZyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLgotICovCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IE5VTEw7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCWludCBlcnIgPSAwOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCQlpZiAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7Ci0JCQlwID0gbGlzdF9maXJzdF9lbnRyeSgmc3QtPnJlcXVlc3RfbGlzdCwKLQkJCQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2LCByZXF1ZXN0X2VudHJ5KTsKLQkJCWxpc3RfZGVsKCZwLT5yZXF1ZXN0X2VudHJ5KTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKCFwKQotCQkJYnJlYWs7Ci0KLQkJYmlvID0gcC0+YmlvOwotCi0JCWlmIChkc3RfbmVlZF9jcnlwdG8oc3QtPm5vZGUpICYmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSkKLQkJCWVyciA9IGRzdF9leHBvcnRfY3J5cHRvKHN0LT5ub2RlLCBiaW8pOwotCQllbHNlCi0JCQllcnIgPSBkc3RfZXhwb3J0X3NlbmRfYmlvKGJpbyk7Ci0KLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDbGVhbnVwIGV4cG9ydCBzdGF0ZS4KLSAqIEl0IGhhcyB0byB3YWl0IHVudGlsIGFsbCByZXF1ZXN0cyBhcmUgZmluaXNoZWQsCi0gKiBhbmQgdGhlbiBmcmVlIHRoZW0gYWxsLgotICovCi1zdGF0aWMgdm9pZCBkc3Rfc3RhdGVfY2xlYW51cF9leHBvcnQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBUaGlzIGxvb3Agd2FpdHMgZm9yIGFsbCBwZW5kaW5nIGJpb3MgdG8gYmUgY29tcGxldGVkIGFuZCBmcmVlZC4KLQkgKi8KLQl3aGlsZSAoYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID4gMSkgewotCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLCBsaXN0X2VtcHR5OiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCksCi0JCQkJbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpOwotCQl3YWl0X2V2ZW50X3RpbWVvdXQoc3QtPnRocmVhZF93YWl0LAotCQkJCShhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkgPT0gMSkgfHwKLQkJCQkhbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCksCi0JCQkJSFovMik7Ci0KLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgewotCQkJcCA9IE5VTEw7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCQkJaWYgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgewotCQkJCXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdC0+cmVxdWVzdF9saXN0LAotCQkJCQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2LCByZXF1ZXN0X2VudHJ5KTsKLQkJCQlsaXN0X2RlbCgmcC0+cmVxdWVzdF9lbnRyeSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0KLQkJCWlmIChwKQotCQkJCWJpb19wdXQocC0+YmlvKTsKLQotCQkJZHByaW50aygiJXM6IHN0OiAlcCwgcmVmY250OiAlZCwgbGlzdF9lbXB0eTogJWQsIHA6ICIKLQkJCQkiJXAuXG4iLCBfX2Z1bmNfXywgc3QsIGF0b21pY19yZWFkKCZzdC0+cmVmY250KSwKLQkJCQlsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSwgcCk7Ci0JCX0KLQl9Ci0KLQlkc3Rfc3RhdGVfcHV0KHN0KTsKLX0KLQotLyoKLSAqIENsaWVudCBhY2NlcHRpbmcgdGhyZWFkLgotICogTm90IG9ubHkgYWNjZXB0cyBuZXcgY29ubmVjdGlvbiwgYnV0IGFsc28gc2NoZWR1bGVzIHJlY2VpdmluZyB0aHJlYWQKLSAqIGFuZCBwZXJmb3JtcyByZXF1ZXN0IGNvbXBsZXRpb24gZGVzY3JpYmVkIGFib3ZlLgotICovCi1zdGF0aWMgaW50IGRzdF9hY2NlcHQodm9pZCAqaW5pdF9kYXRhLCB2b2lkICpzY2hlZHVsZV9kYXRhKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKm1haW5fc3QgPSBzY2hlZHVsZV9kYXRhOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGluaXRfZGF0YTsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKLQlpbnQgZXJyOwotCi0Jd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCAmJiAhbWFpbl9zdC0+bmVlZF9leGl0KSB7Ci0JCWRwcmludGsoIiVzOiBtYWluX3N0OiAlcCwgbjogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCwgbik7Ci0JCXN0ID0gZHN0X2FjY2VwdF9jbGllbnQobWFpbl9zdCk7Ci0JCWlmIChJU19FUlIoc3QpKQotCQkJY29udGludWU7Ci0KLQkJZXJyID0gZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0KTsKLQkJaWYgKCFlcnIpIHsKLQkJCXdoaWxlIChuLT50cmFuc19zY2FuX3RpbWVvdXQpIHsKLQkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzdC0+dGhyZWFkX3dhaXQsCi0JCQkJCSFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSB8fAotCQkJCQkhbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8Ci0JCQkJCXN0LT5uZWVkX2V4aXQsCi0JCQkJCUhaKTsKLQotCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKGxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKQotCQkJCQljb250aW51ZTsKLQotCQkJCWVyciA9IGRzdF9leHBvcnRfcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHN0KTsKLQkJCQlpZiAoZXJyKQotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJc3QtPm5lZWRfZXhpdCA9IDE7Ci0JCQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOwotCQl9Ci0KLQkJZHN0X3N0YXRlX2NsZWFudXBfZXhwb3J0KHN0KTsKLQl9Ci0KLQlkcHJpbnRrKCIlczogZnJlZWluZyBsaXN0ZW5pbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBtYWluX3N0KTsKLQotCWRzdF9zdGF0ZV9sb2NrKG1haW5fc3QpOwotCWRzdF9wb2xsX2V4aXQobWFpbl9zdCk7Ci0JZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKG1haW5fc3QpOwotCWRzdF9zdGF0ZV91bmxvY2sobWFpbl9zdCk7Ci0JZHN0X3N0YXRlX3B1dChtYWluX3N0KTsKLQlkcHJpbnRrKCIlczogZnJlZWQgbGlzdGVuaW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRzdF9zdGFydF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWlmIChsaXN0X2VtcHR5KCZuLT5zZWN1cml0eV9saXN0KSkgewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBhcmUgdHJ5aW5nIHRvIGV4cG9ydCBub2RlICclcycgIgotCQkJCSJ3aXRob3V0IHNlY3VyaXR5IGF0dHJpYnV0ZXMuXG5ObyBjbGllbnRzIHdpbGwgIgotCQkJCSJiZSBhbGxvd2VkIHRvIGNvbm5lY3QuIEV4aXRpbmcuXG4iLCBuLT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiBkc3Rfbm9kZV90cmFuc19pbml0KG4sIHNpemVvZihzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGxpc3RlbmluZyBzdGF0ZSBhbmQgc2NoZWR1bGUgYWNjZXB0aW5nIHRocmVhZC4KLSAqLwotaW50IGRzdF9ub2RlX2luaXRfbGlzdGVuZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OwotCWludCBlcnIgPSAtRU5PTUVNOwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKmN0bCA9ICZsZS0+Y3RsOwotCi0JbWVtY3B5KCZuLT5pbmZvLT5uZXQsIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKTsKLQotCXN0ID0gZHN0X3N0YXRlX2FsbG9jKG4pOwotCWlmIChJU19FUlIoc3QpKSB7Ci0JCWVyciA9IFBUUl9FUlIoc3QpOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0JbWVtY3B5KCZzdC0+Y3RsLCBjdGwsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7Ci0KLQllcnIgPSBkc3Rfc3RhdGVfc29ja2V0X2NyZWF0ZShzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3B1dDsKLQotCXN0LT5zb2NrZXQtPnNrLT5za19yZXVzZSA9IDE7Ci0KLQllcnIgPSBrZXJuZWxfYmluZChzdC0+c29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJmN0bC0+YWRkciwKLQkJCWN0bC0+YWRkci5zYV9kYXRhX2xlbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3NvY2tldF9yZWxlYXNlOwotCi0JZXJyID0ga2VybmVsX2xpc3RlbihzdC0+c29ja2V0LCAxMDI0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfc29ja2V0X3JlbGVhc2U7Ci0Jbi0+c3RhdGUgPSBzdDsKLQotCWVyciA9IGRzdF9wb2xsX2luaXQoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9zb2NrZXRfcmVsZWFzZTsKLQotCWRzdF9zdGF0ZV9nZXQoc3QpOwotCi0JZXJyID0gdGhyZWFkX3Bvb2xfc2NoZWR1bGUobi0+cG9vbCwgZHN0X3RocmVhZF9zZXR1cCwKLQkJCWRzdF9hY2NlcHQsIHN0LCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3BvbGxfZXhpdDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3BvbGxfZXhpdDoKLQlkc3RfcG9sbF9leGl0KHN0KTsKLWVycl9vdXRfc29ja2V0X3JlbGVhc2U6Ci0JZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKHN0KTsKLWVycl9vdXRfcHV0OgotCWRzdF9zdGF0ZV9wdXQoc3QpOwotZXJyX291dF9leGl0OgotCW4tPnN0YXRlID0gTlVMTDsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogRnJlZSBiaW8gYW5kIHJlbGF0ZWQgcHJpdmF0ZSBkYXRhLgotICogQWxzbyBkcm9wIGEgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIGFwcHJvcHJpYXRlIHN0YXRlLAotICogd2hpY2ggd2FpdHMgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBibG9jayBJT3MgaW4tZmxpZ2h0LgotICovCi1zdGF0aWMgdm9pZCBkc3RfYmlvX2Rlc3RydWN0b3Ioc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwcml2ID0gYmlvLT5iaV9wcml2YXRlOwotCWludCBpOwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgewotCQlpZiAoIWJ2LT5idl9wYWdlKQotCQkJYnJlYWs7Ci0KLQkJX19mcmVlX3BhZ2UoYnYtPmJ2X3BhZ2UpOwotCX0KLQotCWlmIChwcml2KQotCQlkc3Rfc3RhdGVfcHV0KHByaXYtPnN0YXRlKTsKLQliaW9fZnJlZShiaW8sIGRzdF9iaW9fc2V0KTsKLX0KLQotLyoKLSAqIEJsb2NrIElPIGNvbXBsZXRpb24uIFF1ZXVlIHJlcXVlc3QgdG8gYmUgc2VudCBiYWNrIHRvCi0gKiB0aGUgY2xpZW50IChvciBqdXN0IGNvbmZpcm1hdGlvbikuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKLXsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOwotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gcC0+c3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcC0+cmVxdWVzdF9lbnRyeSwgJnN0LT5yZXF1ZXN0X2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQotCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSByZWFkIHJlcXVlc3QgZm9yIHRoZSBzZXJ2ZXIuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF9yZWFkX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgZXJyOwotCi0Jd2hpbGUgKHRvdGFsX3NpemUpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGFnZSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCXNpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSwgdG90YWxfc2l6ZSk7Ci0KLQkJZXJyID0gYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgc2l6ZSwgMCk7Ci0JCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJCXNpemUsIGVycik7Ci0JCWlmIChlcnIgPD0gMCkKLQkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2U7Ci0KLQkJdG90YWxfc2l6ZSAtPSBzaXplOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfcGFnZToKLQlfX2ZyZWVfcGFnZShwYWdlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQWxsb2NhdGUgd3JpdGUgcmVxdWVzdCBmb3IgdGhlIHNlcnZlci4KLSAqIFNob3VsZCBub3Qgb25seSBnZXQgcGFnZXMsIGJ1dCBhbHNvIHJlYWQgZGF0YSBmcm9tIHRoZSBuZXR3b3JrLgotICovCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCwKLQkJc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl2b2lkICpkYXRhOwotCWludCBlcnI7Ci0KLQl3aGlsZSAodG90YWxfc2l6ZSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFwYWdlKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJZGF0YSA9IGttYXAocGFnZSk7Ci0JCWlmICghZGF0YSkKLQkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2U7Ci0KLQkJc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFLCB0b3RhbF9zaXplKTsKLQotCQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBkYXRhLCBzaXplKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF91bm1hcF9wYWdlOwotCi0JCWVyciA9IGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHNpemUsIDApOwotCQlpZiAoZXJyIDw9IDApCi0JCQlnb3RvIGVycl9vdXRfdW5tYXBfcGFnZTsKLQotCQlrdW5tYXAocGFnZSk7Ci0KLQkJdG90YWxfc2l6ZSAtPSBzaXplOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3VubWFwX3BhZ2U6Ci0Ja3VubWFwKHBhZ2UpOwotZXJyX291dF9mcmVlX3BhZ2U6Ci0JX19mcmVlX3BhZ2UocGFnZSk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIEdyb292eSwgd2UndmUgZ290dGVuIGFuIElPIHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LgotICogQWxsb2NhdGUgQklPIGZyb20gdGhlIGJpb3NldCwgcHJpdmF0ZSBkYXRhIGZyb20gdGhlIG1lbXBvb2wKLSAqIGFuZCBsb3RzIG9mIHBhZ2VzIGZvciBJTy4KLSAqLwotaW50IGRzdF9wcm9jZXNzX2lvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0Jc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcHJpdjsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWlmICh1bmxpa2VseSghbi0+YmRldikpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JYmlvID0gYmlvX2FsbG9jX2Jpb3NldChHRlBfS0VSTkVMLAotCQkJUEFHRV9BTElHTihjbWQtPnNpemUpID4+IFBBR0VfU0hJRlQsCi0JCQlkc3RfYmlvX3NldCk7Ci0JaWYgKCFiaW8pCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JcHJpdiA9IChzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICopKCgodm9pZCAqKWJpbykgLQotCQkJc2l6ZW9mIChzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7Ci0KLQlwcml2LT5zdGF0ZSA9IGRzdF9zdGF0ZV9nZXQoc3QpOwotCXByaXYtPmJpbyA9IGJpbzsKLQotCWJpby0+YmlfcHJpdmF0ZSA9IHByaXY7Ci0JYmlvLT5iaV9lbmRfaW8gPSBkc3RfYmlvX2VuZF9pbzsKLQliaW8tPmJpX2Rlc3RydWN0b3IgPSBkc3RfYmlvX2Rlc3RydWN0b3I7Ci0JYmlvLT5iaV9iZGV2ID0gbi0+YmRldjsKLQotCS8qCi0JICogU2VydmVyIHNpZGUgaXMgb25seSBpbnRlcmVzdGVkIGluIHR3byBsb3cgYml0czoKLQkgKiB1cHRvZGF0ZSAoc2V0IGJ5IGl0c2VsZiBhY3R1YWxseSkgYW5kIHJ3IGJsb2NrCi0JICovCi0JYmlvLT5iaV9mbGFncyB8PSBjbWQtPmZsYWdzICYgMzsKLQotCWJpby0+YmlfcncgPSBjbWQtPnJ3OwotCWJpby0+Ymlfc2l6ZSA9IDA7Ci0JYmlvLT5iaV9zZWN0b3IgPSBjbWQtPnNlY3RvcjsKLQotCWRzdF9iaW9fdG9fY21kKGJpbywgJnByaXYtPmNtZCwgRFNUX0lPX1JFU1BPTlNFLCBjbWQtPmlkKTsKLQotCXByaXYtPmNtZC5mbGFncyA9IDA7Ci0JcHJpdi0+Y21kLnNpemUgPSBjbWQtPnNpemU7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJZXJyID0gZHN0X3JlY3ZfY2RhdGEoc3QsIHByaXYtPmNtZC5oYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9mcmVlOwotCi0JCWVyciA9IGRzdF9leHBvcnRfd3JpdGVfcmVxdWVzdChzdCwgYmlvLCBjbWQtPnNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkKLQkJCXJldHVybiBkc3RfZXhwb3J0X2NyeXB0byhuLCBiaW8pOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9leHBvcnRfcmVhZF9yZXF1ZXN0KGJpbywgY21kLT5zaXplKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9mcmVlOwotCX0KLQotCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGRpcjogJWx1LCBmbGFnczogJWx4LCBwaHlzOiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJYmlvLT5iaV9ydywgYmlvX2RhdGFfZGlyKGJpbyksCi0JCQliaW8tPmJpX2ZsYWdzLCBiaW8tPmJpX3BoeXNfc2VnbWVudHMpOwotCi0JZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JYmlvX3B1dChiaW8pOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBPaywgYmxvY2sgSU8gaXMgcmVhZHksIGxldCdzIHNlbmQgaXQgYmFjayB0byB0aGUgY2xpZW50Li4uCi0gKi8KLWludCBkc3RfZXhwb3J0X3NlbmRfYmlvKHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOwotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gcC0+c3RhdGU7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9ICZwLT5jbWQ7Ci0JaW50IGVycjsKLQotCWRwcmludGsoIiVzOiBpZDogJWxsdSwgYmlvOiAlbGx1LyV1LCBjc2l6ZTogJXUsIGZsYWdzOiAlbHUsIHJ3OiAlbHUuXG4iLAotCQkJX19mdW5jX18sIGNtZC0+aWQsICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKLQkJCWNtZC0+Y3NpemUsIGJpby0+YmlfZmxhZ3MsIGJpby0+YmlfcncpOwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JaWYgKCFzdC0+c29ja2V0KSB7Ci0JCWVyciA9IC1FQ09OTlJFU0VUOwotCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCX0KLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQkvKiAuLi4gb3IganVzdCBjb25maXJtYXRpb24gdGhhdCB3cml0aW5nIGhhcyBjb21wbGV0ZWQuICovCi0JCWNtZC0+c2l6ZSA9IGNtZC0+Y3NpemUgPSAwOwotCQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCi0JCQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9zZW5kX2JpbyhzdCwgY21kLCBiaW8pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X3VubG9jazsKLQl9Ci0KLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gMDsKLQotZXJyX291dF91bmxvY2s6Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhMDVlNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3N0YXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NDQgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pbjYuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi0vKgotICogUG9sbGluZyBtYWNoaW5lcnkuCi0gKi8KLQotc3RydWN0IGRzdF9wb2xsX2hlbHBlciB7Ci0JcG9sbF90YWJsZQkJcHQ7Ci0Jc3RydWN0IGRzdF9zdGF0ZQkqc3Q7Ci19OwotCi1zdGF0aWMgaW50IGRzdF9xdWV1ZV93YWtlKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwKLQkJaW50IHN5bmMsIHZvaWQgKmtleSkKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3QgZHN0X3N0YXRlLCB3YWl0KTsKLQotCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9xdWV1ZV9mdW5jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQsCi0JCQkJIHBvbGxfdGFibGUgKnB0KQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHB0LCBzdHJ1Y3QgZHN0X3BvbGxfaGVscGVyLCBwdCktPnN0OwotCi0Jc3QtPndoZWFkID0gd2hlYWQ7Ci0JaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmc3QtPndhaXQsIGRzdF9xdWV1ZV93YWtlKTsKLQlhZGRfd2FpdF9xdWV1ZSh3aGVhZCwgJnN0LT53YWl0KTsKLX0KLQotdm9pZCBkc3RfcG9sbF9leGl0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWlmIChzdC0+d2hlYWQpIHsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoc3QtPndoZWFkLCAmc3QtPndhaXQpOwotCQlzdC0+d2hlYWQgPSBOVUxMOwotCX0KLX0KLQotaW50IGRzdF9wb2xsX2luaXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9wb2xsX2hlbHBlciBwaDsKLQotCXBoLnN0ID0gc3Q7Ci0JaW5pdF9wb2xsX2Z1bmNwdHIoJnBoLnB0LCAmZHN0X3F1ZXVlX2Z1bmMpOwotCi0Jc3QtPnNvY2tldC0+b3BzLT5wb2xsKE5VTEwsIHN0LT5zb2NrZXQsICZwaC5wdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBIZWFkZXIgcmVjZWl2aW5nIGZ1bmN0aW9uIC0gbWF5IGJsb2NrLgotICovCi1zdGF0aWMgaW50IGRzdF9kYXRhX3JlY3ZfaGVhZGVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgYmxvY2spCi17Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGt2ZWMgaW92OwotCWludCBlcnI7Ci0KLQlpb3YuaW92X2Jhc2UgPSBkYXRhOwotCWlvdi5pb3ZfbGVuID0gc2l6ZTsKLQotCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7Ci0JbXNnLm1zZ19pb3ZsZW4gPSAxOwotCW1zZy5tc2dfbmFtZSA9IE5VTEw7Ci0JbXNnLm1zZ19uYW1lbGVuID0gMDsKLQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOwotCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7Ci0JbXNnLm1zZ19mbGFncyA9IChibG9jaykgPyBNU0dfV0FJVEFMTCA6IE1TR19ET05UV0FJVDsKLQotCWVyciA9IGtlcm5lbF9yZWN2bXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAotCQkJbXNnLm1zZ19mbGFncyk7Ci0JaWYgKGVyciAhPSBzaXplKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEhlYWRlciBzZW5kaW5nIGZ1bmN0aW9uIC0gbWF5IGJsb2NrLgotICovCi1pbnQgZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBtb3JlKQotewotCXN0cnVjdCBtc2doZHIgbXNnOwotCXN0cnVjdCBrdmVjIGlvdjsKLQlpbnQgZXJyOwotCi0JaW92Lmlvdl9iYXNlID0gZGF0YTsKLQlpb3YuaW92X2xlbiA9IHNpemU7Ci0KLQltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OwotCW1zZy5tc2dfaW92bGVuID0gMTsKLQltc2cubXNnX25hbWUgPSBOVUxMOwotCW1zZy5tc2dfbmFtZWxlbiA9IDA7Ci0JbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOwotCW1zZy5tc2dfZmxhZ3MgPSBNU0dfV0FJVEFMTCB8IChtb3JlID8gTVNHX01PUkUgOiAwKTsKLQotCWVyciA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuKTsKLQlpZiAoZXJyICE9IHNpemUpIHsKLQkJZHByaW50aygiJXM6IHNpemU6ICV1LCBtb3JlOiAlZCwgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIHNpemUsIG1vcmUsIGVycik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEJsb2NrIGF1dG9jb25maWd1cmF0aW9uOiByZXF1ZXN0IHNpemUgb2YgdGhlIHN0b3JhZ2UgYW5kIHBlcm1pc3Npb25zLgotICovCi1zdGF0aWMgaW50IGRzdF9yZXF1ZXN0X3JlbW90ZV9jb25maWcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCi0JbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSk7Ci0JY21kLT5jbWQgPSBEU1RfQ0ZHOwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gZHN0X2RhdGFfcmVjdl9oZWFkZXIoc3QtPnNvY2tldCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWRzdF9jb252ZXJ0X2NtZChjbWQpOwotCi0JaWYgKGNtZC0+Y21kICE9IERTVF9DRkcpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZHByaW50aygiJXM6IGNoZWNraW5nIHJlc3VsdDogY21kOiAlZCwgc2l6ZSByZXBvcnRlZDogJWxsdS5cbiIsCi0JCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2VjdG9yKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKG4tPnNpemUgIT0gMCkKLQkJbi0+c2l6ZSA9IG1pbl90KGxvZmZfdCwgbi0+c2l6ZSwgY21kLT5zZWN0b3IpOwotCWVsc2UKLQkJbi0+c2l6ZSA9IGNtZC0+c2VjdG9yOwotCi0Jbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7Ci0Jc3QtPnBlcm1pc3Npb25zID0gY21kLT5ydzsKLQotb3V0OgotCWRwcmludGsoIiVzOiBuOiAlcCwgZXJyOiAlZCwgc2l6ZTogJWxsdSwgcGVybWlzc2lvbjogJXguXG4iLAotCQkJX19mdW5jX18sIG4sIGVyciwgbi0+c2l6ZSwgc3QtPnBlcm1pc3Npb25zKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU29ja2V0IG1hY2hpbmVyeS4KLSAqLwotCi0jZGVmaW5lIERTVF9ERUZBVUxUX1RJTUVPCTIwMDAwCi0KLWludCBkc3Rfc3RhdGVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqY3RsID0gJnN0LT5jdGw7Ci0KLQllcnIgPSBzb2NrX2NyZWF0ZShjdGwtPmFkZHIuc2FfZmFtaWx5LCBjdGwtPnR5cGUsIGN0bC0+cHJvdG8sICZzb2NrKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXNvY2stPnNrLT5za19zbmR0aW1lbyA9IHNvY2stPnNrLT5za19yY3Z0aW1lbyA9Ci0JCW1zZWNzX3RvX2ppZmZpZXMoRFNUX0RFRkFVTFRfVElNRU8pOwotCXNvY2stPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PSU87Ci0KLQlzdC0+c29ja2V0ID0gc3QtPnJlYWRfc29ja2V0ID0gc29jazsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JZHByaW50aygiJXM6IHN0OiAlcCwgc29ja2V0OiAlcCwgbjogJXAuXG4iLAotCQkJX19mdW5jX18sIHN0LCBzdC0+c29ja2V0LCBzdC0+bm9kZSk7Ci0JaWYgKHN0LT5zb2NrZXQpIHsKLQkJc29ja19yZWxlYXNlKHN0LT5zb2NrZXQpOwotCQlzdC0+c29ja2V0ID0gTlVMTDsKLQkJc3QtPnJlYWRfc29ja2V0ID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQgZHN0X2R1bXBfYWRkcihzdHJ1Y3Qgc29ja2V0ICpzaywgc3RydWN0IHNvY2thZGRyICpzYSwgY2hhciAqc3RyKQotewotCWlmIChzay0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXUuJXUuJXUuJXU6JWQuXG4iLCBzdHIsCi0JCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOwotCX0gZWxzZSBpZiAoc2stPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzICVwaTY6JWQiLAotCQkJc3RyLCAmc2luLT5zaW42X2FkZHIsIG50b2hzKHNpbi0+c2luNl9wb3J0KSk7Ci0JfQotfQotCi12b2lkIGRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlpZiAoc3QtPnNvY2tldCkgewotCQlkc3RfcG9sbF9leGl0KHN0KTsKLQkJc3QtPnNvY2tldC0+b3BzLT5zaHV0ZG93bihzdC0+c29ja2V0LCAyKTsKLQotCQlkc3RfZHVtcF9hZGRyKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3QtPmN0bC5hZGRyLAotCQkJCSJEaXNjb25uZWN0ZWQgcGVlciIpOwotCQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOwotCX0KLX0KLQotc3RhdGljIGludCBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmc3QtPmN0bDsKLQotCWVyciA9IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWVyciA9IGtlcm5lbF9jb25uZWN0KHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3QtPmN0bC5hZGRyLAotCQkJc3QtPmN0bC5hZGRyLnNhX2RhdGFfbGVuLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKLQotCWVyciA9IGRzdF9wb2xsX2luaXQoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCi0JZHN0X2R1bXBfYWRkcihzdC0+c29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJmN0bC0+YWRkciwKLQkJCSJDb25uZWN0ZWQgdG8gcGVlciIpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcmVsZWFzZToKLQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTdGF0ZSByZXNldCBpcyB1c2VkIHRvIHJlY29ubmVjdCB0byB0aGUgcmVtb3RlIHBlZXIuCi0gKiBNYXkgZmFpbCwgYnV0IHdobyBjYXJlcywgd2Ugd2lsbCB0cnkgYWdhaW4gbGF0ZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfcmVzZXRfbm9sb2NrKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7Ci0JZHN0X3N0YXRlX2luaXRfY29ubmVjdGVkKHN0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF9zdGF0ZV9yZXNldChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JZHN0X3N0YXRlX3Jlc2V0X25vbG9jayhzdCk7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci19Ci0KLS8qCi0gKiBCYXNpYyBuZXR3b3JrIHNlbmRpbmcvcmVjZWl2aW5nIGZ1bmN0aW9ucy4KLSAqIEJsb2NrZWQgbW9kZSBpcyB1c2VkLgotICovCi1zdGF0aWMgaW50IGRzdF9kYXRhX3JlY3ZfcmF3KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpidWYsIHU2NCBzaXplKQotewotCXN0cnVjdCBtc2doZHIgbXNnOwotCXN0cnVjdCBrdmVjIGlvdjsKLQlpbnQgZXJyOwotCi0JQlVHX09OKCFzaXplKTsKLQotCWlvdi5pb3ZfYmFzZSA9IGJ1ZjsKLQlpb3YuaW92X2xlbiA9IHNpemU7Ci0KLQltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OwotCW1zZy5tc2dfaW92bGVuID0gMTsKLQltc2cubXNnX25hbWUgPSBOVUxMOwotCW1zZy5tc2dfbmFtZWxlbiA9IDA7Ci0JbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOwotCW1zZy5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQ7Ci0KLQllcnIgPSBrZXJuZWxfcmVjdm1zZyhzdC0+c29ja2V0LCAmbXNnLCAmaW92LCAxLCBpb3YuaW92X2xlbiwKLQkJCW1zZy5tc2dfZmxhZ3MpOwotCWlmIChlcnIgPD0gMCkgewotCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIHJlY3YgZGF0YTogc2l6ZTogJWxsdSwgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIHNpemUsIGVycik7Ci0JCWlmIChlcnIgPT0gMCkKLQkJCWVyciA9IC1FQ09OTlJFU0VUOwotCi0JCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFBpbmcgY29tbWFuZCB0byBlYXJseSBkZXRlY3QgZmFpbGVkIG5vZGVzLgotICovCi1zdGF0aWMgaW50IGRzdF9zZW5kX3Bpbmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCWludCBlcnIgPSAtRUNPTk5SRVNFVDsKLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlpZiAoc3QtPnNvY2tldCkgewotCQltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKLQotCQljbWQtPmNtZCA9IF9fY3B1X3RvX2JlMzIoRFNUX1BJTkcpOwotCi0JCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwKLQkJCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQl9Ci0JZHByaW50aygiJXM6IHN0OiAlcCwgc29ja2V0OiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLAotCQkJc3QsIHN0LT5zb2NrZXQsIGVycik7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2aW5nIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgZWl0aGVyIHJldHVybiBlcnJvciBvciByZWFkCi0gKiB3aG9sZSBibG9jayByZXF1ZXN0LiBJZiB0aGVyZSB3YXMgbm8gdHJhZmZpYyBmb3IgYSBvbmUgc2Vjb25kLAotICogc2VuZCBhIHBpbmcsIHNpbmNlIHJlbW90ZSBub2RlIG1heSBkaWUuCi0gKi8KLWludCBkc3RfZGF0YV9yZWN2KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IDA7Ci0JdW5zaWduZWQgaW50IGVycl9tYXNrID0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSBlcnJfbWFzayB8IFBPTExJTjsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlpbnQgZXJyID0gMDsKLQotCXdoaWxlIChzaXplICYmICFlcnIpIHsKLQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKLQotCQlpZiAoIShyZXZlbnRzICYgbWFzaykpIHsKLQkJCURFRklORV9XQUlUKHdhaXQpOwotCi0JCQlmb3IgKDs7KSB7Ci0JCQkJcHJlcGFyZV90b193YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0LAotCQkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQotCQkJCQlicmVhazsKLQotCQkJCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7Ci0KLQkJCQlpZiAocmV2ZW50cyAmIG1hc2spCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJCQlicmVhazsKLQotCQkJCWlmICghc2NoZWR1bGVfdGltZW91dChIWikpIHsKLQkJCQkJZXJyID0gZHN0X3NlbmRfcGluZyhzdCk7Ci0JCQkJCWlmIChlcnIpCi0JCQkJCQlyZXR1cm4gZXJyOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZmluaXNoX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQpOwotCQl9Ci0KLQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQotCQlpZiAoc3QtPnNvY2tldCAmJiAoc3QtPnJlYWRfc29ja2V0ID09IHN0LT5zb2NrZXQpICYmCi0JCQkJKHJldmVudHMgJiBQT0xMSU4pKSB7Ci0JCQllcnIgPSBkc3RfZGF0YV9yZWN2X3JhdyhzdCwgZGF0YSwgc2l6ZSk7Ci0JCQlpZiAoZXJyID4gMCkgewotCQkJCWRhdGEgKz0gZXJyOwotCQkJCXNpemUgLT0gZXJyOwotCQkJCWVyciA9IDA7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmV2ZW50cyAmIGVycl9tYXNrIHx8ICFzdC0+c29ja2V0KSB7Ci0JCQlkcHJpbnRrKCIlczogcmV2ZW50czogJXgsIHNvY2tldDogJXAsIHNpemU6ICV1LCAiCi0JCQkJCSJlcnI6ICVkLlxuIiwgX19mdW5jX18sIHJldmVudHMsCi0JCQkJCXN0LT5zb2NrZXQsIHNpemUsIGVycik7Ci0JCQllcnIgPSAtRUNPTk5SRVNFVDsKLQkJfQotCi0JCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0KQotCQkJZXJyID0gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2VuZCBibG9jayBhdXRvY29uZiByZXBseS4KLSAqLwotc3RhdGljIGludCBkc3RfcHJvY2Vzc19jZmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCWludCBlcnI7Ci0KLQljbWQtPnNlY3RvciA9IG4tPnNpemU7Ci0JY21kLT5ydyA9IHN0LT5wZXJtaXNzaW9uczsKLQotCWRzdF9jb252ZXJ0X2NtZChjbWQpOwotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2ZSBibG9jayBJTyBmcm9tIHRoZSBuZXR3b3JrLgotICovCi1zdGF0aWMgaW50IGRzdF9yZWN2X2JpbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgc3RydWN0IGJpbyAqYmlvLAotCQl1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSkKLXsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0JaW50IGksIGVycjsKLQl2b2lkICpkYXRhOwotCXVuc2lnbmVkIGludCBzejsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJc3ogPSBtaW4odG90YWxfc2l6ZSwgYnYtPmJ2X2xlbik7Ci0KLQkJZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgdG90YWw6ICV1LCBsZW46ICV1LCBzejogJXUsICIKLQkJCQkib2ZmOiAldS5cbiIsIF9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJCWJpby0+Ymlfc2l6ZSwgdG90YWxfc2l6ZSwgYnYtPmJ2X2xlbiwgc3osCi0JCQkJYnYtPmJ2X29mZnNldCk7Ci0KLQkJZGF0YSA9IGttYXAoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKLQkJZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgZGF0YSwgc3opOwotCQlrdW5tYXAoYnYtPmJ2X3BhZ2UpOwotCi0JCWJ2LT5idl9sZW4gPSBzejsKLQotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQl0b3RhbF9zaXplIC09IHN6OwotCQlpZiAodG90YWxfc2l6ZSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBPdXIgYmxvY2sgSU8gaGFzIGp1c3QgY29tcGxldGVkIGFuZCBhcnJpdmVkOiBnZXQgaXQuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3Byb2Nlc3NfaW9fcmVzcG9uc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCXN0cnVjdCBkc3RfdHJhbnMgKnQ7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCi0JbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7Ci0JdCA9IGRzdF90cmFuc19zZWFyY2gobiwgY21kLT5pZCk7Ci0JbXV0ZXhfdW5sb2NrKCZuLT50cmFuc19sb2NrKTsKLQotCWlmICghdCkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQliaW8gPSB0LT5iaW87Ci0KLQlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCBjbWRfc2l6ZTogJXUsIGNzaXplOiAldSwgZGlyOiAlbHUuXG4iLAotCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLCBjbWQtPnNpemUsCi0JCWNtZC0+Y3NpemUsIGJpb19kYXRhX2RpcihiaW8pKTsKLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSB7Ci0JCWlmIChiaW8tPmJpX3NpemUgIT0gY21kLT5zaXplIC0gY21kLT5jc2l6ZSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWlmIChkc3RfbmVlZF9jcnlwdG8obikpIHsKLQkJCWVyciA9IGRzdF9yZWN2X2NkYXRhKHN0LCB0LT5jbWQuaGFzaCk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZXJyX291dF9leGl0OwotCQl9Ci0KLQkJZXJyID0gZHN0X3JlY3ZfYmlvKHN0LCB0LT5iaW8sIGJpby0+Ymlfc2l6ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlpZiAoZHN0X25lZWRfY3J5cHRvKG4pKQotCQkJcmV0dXJuIGRzdF90cmFuc19jcnlwdG8odCk7Ci0JfSBlbHNlIHsKLQkJZXJyID0gLUVCQURNU0c7Ci0JCWlmIChjbWQtPnNpemUgfHwgY21kLT5jc2l6ZSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWRzdF90cmFuc19yZW1vdmUodCk7Ci0JZHN0X3RyYW5zX3B1dCh0KTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFJlY2VpdmUgY3J5cHRvIGRhdGEuCi0gKi8KLWludCBkc3RfcmVjdl9jZGF0YShzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqY2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqYyA9ICZuLT5jcnlwdG87Ci0JaW50IGVycjsKLQotCWlmIChjbWQtPmNzaXplICE9IGMtPmNyeXB0b19hdHRhY2hlZF9zaXplKSB7Ci0JCWRwcmludGsoIiVzOiBjbWQ6IGNtZDogJXUsIHNlY3RvcjogJWxsdSwgc2l6ZTogJXUsICIKLQkJCQkiY3NpemU6ICV1ICE9IGRpZ2VzdCBzaXplICV1LlxuIiwKLQkJCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2VjdG9yLCBjbWQtPnNpemUsCi0JCQkJY21kLT5jc2l6ZSwgYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBjZGF0YSwgY21kLT5jc2l6ZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQljbWQtPnNpemUgLT0gY21kLT5jc2l6ZTsKLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZlIHRoZSBjb21tYW5kIGFuZCBzdGFydCBpdHMgcHJvY2Vzc2luZy4KLSAqLwotc3RhdGljIGludCBkc3RfcmVjdl9wcm9jZXNzaW5nKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWludCBlcnIgPSAtRUlOVFI7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCi0JLyoKLQkgKiBJZiBzb2NrZXQgd2lsbCBiZSByZXNldCBhZnRlciB0aGlzIHN0YXRlbWVudCwgdGhlbgotCSAqIGRzdF9kYXRhX3JlY3YoKSB3aWxsIGp1c3QgZmFpbCBhbmQgbG9vcCB3aWxsCi0JICogc3RhcnQgYWdhaW4sIHNvIGl0IGNhbiBiZSBkb25lIHdpdGhvdXQgYW55IGxvY2tzLgotCSAqCi0JICogc3QtPnJlYWRfc29ja2V0IGlzIG5lZWRlZCB0byBwcmV2ZW50cyBzdGF0ZSBtYWNoaW5lCi0JICogYnJlYWtpbmcgYmV0d2VlbiB0aGlzIGRhdGEgcmVhZGluZyBhbmQgc3Vic2VxdWVudCBvbmUKLQkgKiBpbiBwcm90b2NvbCBzcGVjaWZpYyBmdW5jdGlvbnMgZHVyaW5nIGNvbm5lY3Rpb24gcmVzZXQuCi0JICogSW4gY2FzZSBvZiByZXNldCB3ZSBoYXZlIHRvIHJlYWQgbmV4dCBjb21tYW5kIGFuZCBkbwotCSAqIG5vdCBleHBlY3QgZGF0YSBmb3Igb2xkIGNvbW1hbmQgdG8gbWFnaWNhbGx5IGFwcGVhciBpbgotCSAqIG5ldyBjb25uZWN0aW9uLgotCSAqLwotCXN0LT5yZWFkX3NvY2tldCA9IHN0LT5zb2NrZXQ7Ci0JZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9leGl0OwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQlkcHJpbnRrKCIlczogY21kOiAldSwgc2l6ZTogJXUsIGNzaXplOiAldSwgaWQ6ICVsbHUsICIKLQkJCSJzZWN0b3I6ICVsbHUsIGZsYWdzOiAlbGx4LCBydzogJWxseC5cbiIsCi0JCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2l6ZSwKLQkJCWNtZC0+Y3NpemUsIGNtZC0+aWQsIGNtZC0+c2VjdG9yLAotCQkJY21kLT5mbGFncywgY21kLT5ydyk7Ci0KLQkvKgotCSAqIFRoaXMgc2hvdWxkIGNhdGNoIHByb3RvY29sIGJyZWFrYWdlIGFuZCByYW5kb20gZ2FyYmFnZQotCSAqIGluc3RlYWQgb2YgY29tbWFuZHMuCi0JICovCi0JaWYgKHVubGlrZWx5KGNtZC0+Y3NpemUgPiBzdC0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpKSB7Ci0JCWVyciA9IC1FQkFETVNHOwotCQlnb3RvIG91dF9leGl0OwotCX0KLQotCWVyciA9IC1FUFJPVE87Ci0Jc3dpdGNoIChjbWQtPmNtZCkgewotCWNhc2UgRFNUX0lPX1JFU1BPTlNFOgotCQllcnIgPSBkc3RfcHJvY2Vzc19pb19yZXNwb25zZShzdCk7Ci0JCWJyZWFrOwotCWNhc2UgRFNUX0lPOgotCQllcnIgPSBkc3RfcHJvY2Vzc19pbyhzdCk7Ci0JCWJyZWFrOwotCWNhc2UgRFNUX0NGRzoKLQkJZXJyID0gZHN0X3Byb2Nlc3NfY2ZnKHN0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1RfUElORzoKLQkJZXJyID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi1vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2aW5nIHRocmVhZC4gRm9yIHRoZSBjbGllbnQgbm9kZSB3ZSBzaG91bGQgdHJ5IHRvIHJlY29ubmVjdCwKLSAqIGZvciBhY2NlcHRlZCBjbGllbnQgd2UganVzdCBkcm9wIHRoZSBzdGF0ZSBhbmQgZXhwZWN0IGl0IHRvIHJlY29ubmVjdC4KLSAqLwotc3RhdGljIGludCBkc3RfcmVjdih2b2lkICppbml0X2RhdGEsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBzY2hlZHVsZV9kYXRhOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGluaXRfZGF0YTsKLQlpbnQgZXJyID0gMDsKLQotCWRwcmludGsoIiVzOiBzdGFydCBzdDogJXAsIG46ICVwLCBzY2FuOiAlbHUsIG5lZWRfZXhpdDogJWQuXG4iLAotCQkJX19mdW5jX18sIHN0LCBuLCBuLT50cmFuc19zY2FuX3RpbWVvdXQsIHN0LT5uZWVkX2V4aXQpOwotCi0Jd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCAmJiAhc3QtPm5lZWRfZXhpdCkgewotCQllcnIgPSBkc3RfcmVjdl9wcm9jZXNzaW5nKHN0KTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWlmICghc3QtPmN0bC50eXBlKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQotCQkJCWJyZWFrOwotCi0JCQlkc3Rfc3RhdGVfcmVzZXQoc3QpOwotCQkJbXNsZWVwKDEwMDApOwotCQl9Ci0JfQotCi0Jc3QtPm5lZWRfZXhpdCA9IDE7Ci0Jd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKLQotCWRwcmludGsoIiVzOiBmcmVlaW5nIHJlY2VpdmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQlkc3Rfc3RhdGVfcHV0KHN0KTsKLQotCWRwcmludGsoIiVzOiBmcmVlZCByZWNlaXZpbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogTmV0d29yayBzdGF0ZSBkaWVzIGhlcmUgYW5kIGJvcm5zIGNvdXBsZSBvZiBsaW5lcyBiZWxvdy4KLSAqIFRoaXMgb2JqZWN0IGlzIHRoZSBtYWluIG5ldHdvcmsgc3RhdGUgcHJvY2Vzc2luZyBlbmdpbmU6Ci0gKiBzZW5kaW5nLCByZWNlaXZpbmcsIHJlY29ubmVjdGlvbnMsIGFsbCBuZXR3b3JrIHJlbGF0ZWQKLSAqIHRhc2tzIGFyZSBoYW5kbGVkIG9uIGJlaGFsZiBvZiB0aGUgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9zdGF0ZV9mcmVlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRwcmludGsoIiVzOiBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOwotCWlmIChzdC0+Y2xlYW51cCkKLQkJc3QtPmNsZWFudXAoc3QpOwotCWtmcmVlKHN0LT5kYXRhKTsKLQlrZnJlZShzdCk7Ci19Ci0KLXN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9hbGxvYyhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3Q7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXN0LT5ub2RlID0gbjsKLQlzdC0+bmVlZF9leGl0ID0gMDsKLQotCXN0LT5zaXplID0gUEFHRV9TSVpFOwotCXN0LT5kYXRhID0ga21hbGxvYyhzdC0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdC0+ZGF0YSkKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlzcGluX2xvY2tfaW5pdCgmc3QtPnJlcXVlc3RfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnN0LT5yZXF1ZXN0X2xpc3QpOwotCi0JbXV0ZXhfaW5pdCgmc3QtPnN0YXRlX2xvY2spOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0LT50aHJlYWRfd2FpdCk7Ci0KLQkvKgotCSAqIE9uZSBmb3IgcHJvY2Vzc2luZyB0aHJlYWQsIGFub3RoZXIgb25lIGZvciBub2RlIGl0c2VsZi4KLQkgKi8KLQlhdG9taWNfc2V0KCZzdC0+cmVmY250LCAyKTsKLQotCWRwcmludGsoIiVzOiBzdDogJXAsIG46ICVwLlxuIiwgX19mdW5jX18sIHN0LCBzdC0+bm9kZSk7Ci0KLQlyZXR1cm4gc3Q7Ci0KLWVycl9vdXRfZnJlZToKLQlrZnJlZShzdCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotaW50IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlyZXR1cm4gdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShzdC0+bm9kZS0+cG9vbCwgZHN0X3RocmVhZF9zZXR1cCwKLQkJCWRzdF9yZWN2LCBzdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIHN0LT5ub2RlKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgY2xpZW50J3MgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIHBlZXI6IGFsbG9jYXRlIHN0YXRlLAotICogY29ubmVjdCBhbmQgcGVyZm9ybSBibG9jayBJTyBhdXRvY29uZmlndXJhdGlvbi4KLSAqLwotaW50IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcikKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCXN0ID0gZHN0X3N0YXRlX2FsbG9jKG4pOwotCWlmIChJU19FUlIoc3QpKSB7Ci0JCWVyciA9IFBUUl9FUlIoc3QpOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0JbWVtY3B5KCZzdC0+Y3RsLCByLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOwotCi0JZXJyID0gZHN0X3N0YXRlX2luaXRfY29ubmVjdGVkKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9kYXRhOwotCi0JZXJyID0gZHN0X3JlcXVlc3RfcmVtb3RlX2NvbmZpZyhzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXRfY29ubmVjdGVkOwotCW4tPnN0YXRlID0gc3Q7Ci0KLQllcnIgPSBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0X2Nvbm5lY3RlZDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXRfY29ubmVjdGVkOgotCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7Ci1lcnJfb3V0X2ZyZWVfZGF0YToKLQlkc3Rfc3RhdGVfZnJlZShzdCk7Ci1lcnJfb3V0X2V4aXQ6Ci0Jbi0+c3RhdGUgPSBOVUxMOwotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgZHN0X3N0YXRlX3B1dChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCBzdCwgYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc3QtPnJlZmNudCkpCi0JCWRzdF9zdGF0ZV9mcmVlKHN0KTsKLX0KLQotLyoKLSAqIFNlbmQgYmxvY2sgSU8gdG8gdGhlIG5ldHdvcmsgb25lIGJ5IG9uZSB1c2luZyB6ZXJvLWNvcHkgLT5zZW5kcGFnZSgpLgotICovCi1pbnQgZHN0X3NlbmRfYmlvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCBzdHJ1Y3QgZHN0X2NtZCAqY21kLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqYyA9ICZzdC0+bm9kZS0+Y3J5cHRvOwotCWludCBlcnIsIGkgPSAwOwotCWludCBmbGFncyA9IE1TR19XQUlUQUxMOwotCi0JZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLAotCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpICsgYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUsIGJpby0+YmlfdmNudCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCWlmIChpIDwgYmlvLT5iaV92Y250IC0gMSkKLQkJCWZsYWdzIHw9IE1TR19NT1JFOwotCi0JCWVyciA9IGtlcm5lbF9zZW5kcGFnZShzdC0+c29ja2V0LCBidi0+YnZfcGFnZSwgYnYtPmJ2X29mZnNldCwKLQkJCQlidi0+YnZfbGVuLCBmbGFncyk7Ci0JCWlmIChlcnIgPD0gMCkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JZHByaW50aygiJXM6ICVkLyVkLCBmbGFnczogJXgsIGVycjogJWQuXG4iLAotCQkJX19mdW5jX18sIGksIGJpby0+YmlfdmNudCwgZmxhZ3MsIGVycik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNlbmQgdHJhbnNhY3Rpb24gdG8gdGhlIHJlbW90ZSBwZWVyLgotICovCi1pbnQgZHN0X3RyYW5zX3NlbmQoc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gdC0+bi0+c3RhdGU7Ci0Jc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOwotCi0JZHN0X2NvbnZlcnRfY21kKCZ0LT5jbWQpOwotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWlmICghc3QtPnNvY2tldCkgewotCQllcnIgPSBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJZXJyID0gZHN0X3NlbmRfYmlvKHN0LCAmdC0+Y21kLCB0LT5iaW8pOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsICZ0LT5jbWQsCi0JCQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JfQotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9yZXNldDsKLQotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCXJldHVybiAwOwotCi1lcnJfb3V0X3Jlc2V0OgotCWRzdF9zdGF0ZV9yZXNldF9ub2xvY2soc3QpOwotZXJyX291dF91bmxvY2s6Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC90aHJlYWRfcG9vbC5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC90aHJlYWRfcG9vbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWE4MmIyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdGhyZWFkX3Bvb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDM0OCArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotLyoKLSAqIFRocmVhZCBwb29sIGFic3RyYWN0aW9uIGFsbG93cyB0byBzY2hlZHVsZSBhIHdvcmsgdG8gYmUgcGVyZm9ybWVkCi0gKiBvbiBiZWhhbGYgb2Yga2VybmVsIHRocmVhZC4gT25lIGRvZXMgbm90IG9wZXJhdGUgd2l0aCB0aHJlYWRzIGl0c2VsZiwKLSAqIGluc3RlYWQgdXNlciBwcm92aWRlcyBzZXR1cCBhbmQgY2xlYW51cCBjYWxsYmFja3MgZm9yIHRocmVhZCBwb29sIGl0c2VsZiwKLSAqIGFuZCBhY3Rpb24gYW5kIGNsZWFudXAgY2FsbGJhY2tzIGZvciBlYWNoIHN1Ym1pdHRlZCB3b3JrLgotICoKLSAqIEVhY2ggd29ya2VyIGhhcyBwcml2YXRlIGRhdGEgaW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24gdGltZSBhbmQgZGF0YSwKLSAqIHByb3ZpZGVkIGJ5IHVzZXIgYXQgc2NoZWR1bGluZyB0aW1lLgotICoKLSAqIFdoZW4gYWN0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZCwgdGhyZWFkIGNhbiBub3QgYmUgdXNlZCBieSBvdGhlciB1c2VycywKLSAqIGluc3RlYWQgdGhleSB3aWxsIHNsZWVwIHVudGlsIHRoZXJlIGlzIGZyZWUgdGhyZWFkIHRvIHBpY2sgdGhlaXIgd29yay4KLSAqLwotc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZAl3b3JrZXJfZW50cnk7Ci0KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZDsKLQotCXN0cnVjdCB0aHJlYWRfcG9vbAkqcG9vbDsKLQotCWludAkJCWVycm9yOwotCWludAkJCWhhc19kYXRhOwotCWludAkJCW5lZWRfZXhpdDsKLQl1bnNpZ25lZCBpbnQJCWlkOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKLQotCXZvaWQJCQkqcHJpdmF0ZTsKLQl2b2lkCQkJKnNjaGVkdWxlX2RhdGE7Ci0KLQlpbnQJCQkoKmFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqc2NoZWR1bGVfZGF0YSk7Ci0Jdm9pZAkJCSgqY2xlYW51cCkodm9pZCAqcHJpdmF0ZSk7Ci19OwotCi1zdGF0aWMgdm9pZCB0aHJlYWRfcG9vbF9leGl0X3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3KQotewotCWt0aHJlYWRfc3RvcCh3LT50aHJlYWQpOwotCi0Jdy0+Y2xlYW51cCh3LT5wcml2YXRlKTsKLQlrZnJlZSh3KTsKLX0KLQotLyoKLSAqIENhbGxlZCB0byBtYXJrIHRocmVhZCBhcyByZWFkeSBhbmQgYWxsb3cgdXNlcnMgdG8gc2NoZWR1bGUgbmV3IHdvcmsuCi0gKi8KLXN0YXRpYyB2b2lkIHRocmVhZF9wb29sX3dvcmtlcl9tYWtlX3JlYWR5KHN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sICpwID0gdy0+cG9vbDsKLQotCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCWlmICghdy0+bmVlZF9leGl0KSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5yZWFkeV9saXN0KTsKLQkJdy0+aGFzX2RhdGEgPSAwOwotCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCQl3YWtlX3VwKCZwLT53YWl0KTsKLQl9IGVsc2UgewotCQlwLT50aHJlYWRfbnVtLS07Ci0JCWxpc3RfZGVsKCZ3LT53b3JrZXJfZW50cnkpOwotCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKLQl9Ci19Ci0KLS8qCi0gKiBUaHJlYWQgYWN0aW9uIGxvb3A6IHdhaXRzIHVudGlsIHRoZXJlIGlzIG5ldyB3b3JrLgotICovCi1zdGF0aWMgaW50IHRocmVhZF9wb29sX3dvcmtlcl9mdW5jKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdyA9IGRhdGE7Ci0KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUody0+d2FpdCwKLQkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCB3LT5oYXNfZGF0YSk7Ci0KLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJCWJyZWFrOwotCi0JCWlmICghdy0+aGFzX2RhdGEpCi0JCQljb250aW51ZTsKLQotCQl3LT5hY3Rpb24ody0+cHJpdmF0ZSwgdy0+c2NoZWR1bGVfZGF0YSk7Ci0JCXRocmVhZF9wb29sX3dvcmtlcl9tYWtlX3JlYWR5KHcpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVtb3ZlIHNpbmdsZSB3b3JrZXIgd2l0aG91dCBzcGVjaWZ5aW5nIHdoaWNoIG9uZS4KLSAqLwotdm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3ID0gTlVMTDsKLQotCXdoaWxlICghdyAmJiBwLT50aHJlYWRfbnVtKSB7Ci0JCXdhaXRfZXZlbnQocC0+d2FpdCwgIWxpc3RfZW1wdHkoJnAtPnJlYWR5X2xpc3QpIHx8Ci0JCQkJIXAtPnRocmVhZF9udW0pOwotCi0JCWRwcmludGsoIiVzOiBsb2NraW5nIGxpc3RfZW1wdHk6ICVkLCB0aHJlYWRfbnVtOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIGxpc3RfZW1wdHkoJnAtPnJlYWR5X2xpc3QpLAotCQkJCXAtPnRocmVhZF9udW0pOwotCi0JCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSkgewotCQkJdyA9IGxpc3RfZmlyc3RfZW50cnkoJnAtPnJlYWR5X2xpc3QsCi0JCQkJCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIsCi0JCQkJCXdvcmtlcl9lbnRyeSk7Ci0KLQkJCWRwcmludGsoIiVzOiBkZWxldGluZyB3OiAlcCwgdGhyZWFkX251bTogJWQsICIKLQkJCQkJImxpc3Q6ICVwIFslcC4lcF0uXG4iLCBfX2Z1bmNfXywKLQkJCQkJdywgcC0+dGhyZWFkX251bSwgJnAtPnJlYWR5X2xpc3QsCi0JCQkJCXAtPnJlYWR5X2xpc3QucHJldiwgcC0+cmVhZHlfbGlzdC5uZXh0KTsKLQotCQkJcC0+dGhyZWFkX251bS0tOwotCQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JfQotCi0JaWYgKHcpCi0JCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOwotCWRwcmludGsoIiVzOiBkZWxldGVkIHc6ICVwLCB0aHJlYWRfbnVtOiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgdywgcC0+dGhyZWFkX251bSk7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYSB3b3JrZXIgd2l0aCBnaXZlbiBJRC4KLSAqLwotdm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyX2lkKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwgdW5zaWduZWQgaW50IGlkKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKnc7Ci0JaW50IGZvdW5kID0gMDsKLQotCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKLQkJaWYgKHctPmlkID09IGlkKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlwLT50aHJlYWRfbnVtLS07Ci0JCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwLT5hY3RpdmVfbGlzdCwgd29ya2VyX2VudHJ5KSB7Ci0JCQlpZiAody0+aWQgPT0gaWQpIHsKLQkJCQl3LT5uZWVkX2V4aXQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JaWYgKGZvdW5kKQotCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKLX0KLQotLyoKLSAqIEFkZCBuZXcgd29ya2VyIHRocmVhZCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuCi0gKiBJZiBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmYWlscywgcmV0dXJuIGVycm9yLgotICovCi1pbnQgdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWNoYXIgKm5hbWUsCi0JCXVuc2lnbmVkIGludCBpZCwKLQkJdm9pZCAqKCppbml0KSh2b2lkICpwcml2YXRlKSwKLQkJdm9pZCAoKmNsZWFudXApKHZvaWQgKnByaXZhdGUpLAotCQl2b2lkICpwcml2YXRlKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKnc7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQl3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciksIEdGUF9LRVJORUwpOwotCWlmICghdykKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQl3LT5wb29sID0gcDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3LT53YWl0KTsKLQl3LT5jbGVhbnVwID0gY2xlYW51cDsKLQl3LT5pZCA9IGlkOwotCi0Jdy0+dGhyZWFkID0ga3RocmVhZF9ydW4odGhyZWFkX3Bvb2xfd29ya2VyX2Z1bmMsIHcsICIlcyIsIG5hbWUpOwotCWlmIChJU19FUlIody0+dGhyZWFkKSkgewotCQllcnIgPSBQVFJfRVJSKHctPnRocmVhZCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlOwotCX0KLQotCXctPnByaXZhdGUgPSBpbml0KHByaXZhdGUpOwotCWlmIChJU19FUlIody0+cHJpdmF0ZSkpIHsKLQkJZXJyID0gUFRSX0VSUih3LT5wcml2YXRlKTsKLQkJZ290byBlcnJfb3V0X3N0b3BfdGhyZWFkOwotCX0KLQotCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5yZWFkeV9saXN0KTsKLQlwLT50aHJlYWRfbnVtKys7Ci0JbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9zdG9wX3RocmVhZDoKLQlrdGhyZWFkX3N0b3Aody0+dGhyZWFkKTsKLWVycl9vdXRfZnJlZToKLQlrZnJlZSh3KTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogRGVzdHJveSB0aGUgd2hvbGUgcG9vbC4KLSAqLwotdm9pZCB0aHJlYWRfcG9vbF9kZXN0cm95KHN0cnVjdCB0aHJlYWRfcG9vbCAqcCkKLXsKLQl3aGlsZSAocC0+dGhyZWFkX251bSkgewotCQlkcHJpbnRrKCIlczogbnVtOiAlZC5cbiIsIF9fZnVuY19fLCBwLT50aHJlYWRfbnVtKTsKLQkJdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcihwKTsKLQl9Ci0KLQlrZnJlZShwKTsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIHBvb2wgd2l0aCBnaXZlbiBudW1iZXIgb2YgdGhyZWFkcy4KLSAqIFRoZXkgd2lsbCBoYXZlIHNlcXVlbnRpYWwgSURzIHN0YXJ0ZWQgZnJvbSB6ZXJvLgotICovCi1zdHJ1Y3QgdGhyZWFkX3Bvb2wgKnRocmVhZF9wb29sX2NyZWF0ZShpbnQgbnVtLCBjaGFyICpuYW1lLAotCQl2b2lkICooKmluaXQpKHZvaWQgKnByaXZhdGUpLAotCQl2b2lkICgqY2xlYW51cCkodm9pZCAqcHJpdmF0ZSksCi0JCXZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdywgKnRtcDsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnA7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0JaW50IGk7Ci0KLQlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRocmVhZF9wb29sKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnAtPndhaXQpOwotCW11dGV4X2luaXQoJnAtPnRocmVhZF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmcC0+cmVhZHlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnAtPmFjdGl2ZV9saXN0KTsKLQlwLT50aHJlYWRfbnVtID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewotCQllcnIgPSB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKHAsIG5hbWUsIGksIGluaXQsCi0JCQkJY2xlYW51cCwgcHJpdmF0ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9hbGw7Ci0JfQotCi0JcmV0dXJuIHA7Ci0KLWVycl9vdXRfZnJlZV9hbGw6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIHRtcCwgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgewotCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKLQkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7Ci0JfQotCWtmcmVlKHApOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLS8qCi0gKiBTY2hlZHVsZSBleGVjdXRpb24gb2YgdGhlIGFjdGlvbiBvbiBhIGdpdmVuIHRocmVhZCwKLSAqIHByb3ZpZGVkIElEIHBvaW50ZXIgaGFzIHRvIG1hdGNoIHByZXZpb3VzbHkgc3RvcmVkCi0gKiBwcml2YXRlIGRhdGEuCi0gKi8KLWludCB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJaW50ICgqc2V0dXApKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQlpbnQgKCphY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhLCBsb25nIHRpbWVvdXQsIHZvaWQgKmlkKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncsICp0bXAsICp3b3JrZXIgPSBOVUxMOwotCWludCBlcnIgPSAwOwotCi0Jd2hpbGUgKCF3b3JrZXIgJiYgIWVycikgewotCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocC0+d2FpdCwKLQkJCQkhbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCksCi0JCQkJdGltZW91dCk7Ci0KLQkJaWYgKCF0aW1lb3V0KSB7Ci0JCQllcnIgPSAtRVRJTUVET1VUOwotCQkJYnJlYWs7Ci0JCX0KLQotCQl3b3JrZXIgPSBOVUxMOwotCQltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCB0bXAsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKLQkJCWlmIChpZCAmJiBpZCAhPSB3LT5wcml2YXRlKQotCQkJCWNvbnRpbnVlOwotCi0JCQl3b3JrZXIgPSB3OwotCi0JCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+YWN0aXZlX2xpc3QpOwotCi0JCQllcnIgPSBzZXR1cCh3LT5wcml2YXRlLCBkYXRhKTsKLQkJCWlmICghZXJyKSB7Ci0JCQkJdy0+c2NoZWR1bGVfZGF0YSA9IGRhdGE7Ci0JCQkJdy0+YWN0aW9uID0gYWN0aW9uOwotCQkJCXctPmhhc19kYXRhID0gMTsKLQkJCQl3YWtlX3VwKCZ3LT53YWl0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJbGlzdF9tb3ZlX3RhaWwoJnctPndvcmtlcl9lbnRyeSwKLQkJCQkJCSZwLT5yZWFkeV9saXN0KTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNjaGVkdWxlIGV4ZWN1dGlvbiBvbiBhcmJpdHJhcnkgdGhyZWFkIGZyb20gdGhlIHBvb2wuCi0gKi8KLWludCB0aHJlYWRfcG9vbF9zY2hlZHVsZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWludCAoKnNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJaW50ICgqYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSwgbG9uZyB0aW1lb3V0KQotewotCXJldHVybiB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHAsIHNldHVwLAotCQkJYWN0aW9uLCBkYXRhLCB0aW1lb3V0LCBOVUxMKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMzNmE2Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RyYW5zLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+Ci0KLS8qCi0gKiBUcmFuc2FjdGlvbiBtZW1vcnkgcG9vbCBzaXplLgotICovCi1zdGF0aWMgaW50IGRzdF9tZW1wb29sX251bSA9IDMyOwotbW9kdWxlX3BhcmFtKGRzdF9tZW1wb29sX251bSwgaW50LCAwNjQ0KTsKLQotLyoKLSAqIFRyYW5zYWN0aW9uIHRyZWUgbWFuYWdlbWVudC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZHN0X3RyYW5zX2NtcChkc3RfZ2VuX3QgZ2VuLCBkc3RfZ2VuX3QgbmV3KQotewotCWlmIChnZW4gPCBuZXcpCi0JCXJldHVybiAxOwotCWlmIChnZW4gPiBuZXcpCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IGRzdF90cmFucyAqZHN0X3RyYW5zX3NlYXJjaChzdHJ1Y3QgZHN0X25vZGUgKm5vZGUsIGRzdF9nZW5fdCBnZW4pCi17Ci0Jc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmbm9kZS0+dHJhbnNfcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJvb3QtPnJiX25vZGU7Ci0Jc3RydWN0IGRzdF90cmFucyAqdCwgKnJldCA9IE5VTEw7Ci0JaW50IGNtcDsKLQotCXdoaWxlIChuKSB7Ci0JCXQgPSByYl9lbnRyeShuLCBzdHJ1Y3QgZHN0X3RyYW5zLCB0cmFuc19lbnRyeSk7Ci0KLQkJY21wID0gZHN0X3RyYW5zX2NtcCh0LT5nZW4sIGdlbik7Ci0JCWlmIChjbXAgPCAwKQotCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGNtcCA+IDApCi0JCQluID0gbi0+cmJfcmlnaHQ7Ci0JCWVsc2UgewotCQkJcmV0ID0gdDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZHByaW50aygiJXM6ICVzIHRyYW5zYWN0aW9uOiBpZDogJWxsdS5cbiIsIF9fZnVuY19fLAotCQkJKHJldCkgPyAiZm91bmQiIDogIm5vdCBmb3VuZCIsIGdlbik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRzdF90cmFuc19pbnNlcnQoc3RydWN0IGRzdF90cmFucyAqbmV3KQotewotCXN0cnVjdCByYl9yb290ICpyb290ID0gJm5ldy0+bi0+dHJhbnNfcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqKm4gPSAmcm9vdC0+cmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGRzdF90cmFucyAqcmV0ID0gTlVMTCwgKnQ7Ci0JaW50IGNtcDsKLQotCXdoaWxlICgqbikgewotCQlwYXJlbnQgPSAqbjsKLQotCQl0ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZHN0X3RyYW5zLCB0cmFuc19lbnRyeSk7Ci0KLQkJY21wID0gZHN0X3RyYW5zX2NtcCh0LT5nZW4sIG5ldy0+Z2VuKTsKLQkJaWYgKGNtcCA8IDApCi0JCQluID0gJnBhcmVudC0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoY21wID4gMCkKLQkJCW4gPSAmcGFyZW50LT5yYl9yaWdodDsKLQkJZWxzZSB7Ci0JCQlyZXQgPSB0OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQluZXctPnNlbmRfdGltZSA9IGppZmZpZXM7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV4aXN0OiBvbGQ6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCAiCi0JCQkic2VuZF90aW1lOiAlbHUsIG5ldzogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsICIKLQkJCSJzZW5kX3RpbWU6ICVsdS5cbiIsIF9fZnVuY19fLAotCQkJcmV0LT5nZW4sICh1NjQpcmV0LT5iaW8tPmJpX3NlY3RvciwKLQkJCXJldC0+YmlvLT5iaV9zaXplLCByZXQtPnNlbmRfdGltZSwKLQkJCW5ldy0+Z2VuLCAodTY0KW5ldy0+YmlvLT5iaV9zZWN0b3IsCi0JCQluZXctPmJpby0+Ymlfc2l6ZSwgbmV3LT5zZW5kX3RpbWUpOwotCQlyZXR1cm4gLUVFWElTVDsKLQl9Ci0KLQlyYl9saW5rX25vZGUoJm5ldy0+dHJhbnNfZW50cnksIHBhcmVudCwgbik7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZuZXctPnRyYW5zX2VudHJ5LCByb290KTsKLQotCWRwcmludGsoIiVzOiBpbnNlcnRlZDogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIHNlbmRfdGltZTogJWx1LlxuIiwKLQkJX19mdW5jX18sIG5ldy0+Z2VuLCAodTY0KW5ldy0+YmlvLT5iaV9zZWN0b3IsCi0JCW5ldy0+YmlvLT5iaV9zaXplLCBuZXctPnNlbmRfdGltZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKLQotCWlmICh0LT50cmFuc19lbnRyeS5yYl9wYXJlbnRfY29sb3IpIHsKLQkJcmJfZXJhc2UoJnQtPnRyYW5zX2VudHJ5LCAmbi0+dHJhbnNfcm9vdCk7Ci0JCXQtPnRyYW5zX2VudHJ5LnJiX3BhcmVudF9jb2xvciA9IDA7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgZHN0X3RyYW5zX3JlbW92ZShzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCWludCByZXQ7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKLQotCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOwotCXJldCA9IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOwotCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogV2hlbiB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQgYW5kIHRoZXJlIGFyZSBubyBtb3JlIHVzZXJzLAotICogd2UgY29tcGxldGUgYXBwcmlhdGUgYmxvY2sgSU8gcmVxdWVzdCB3aXRoIGdpdmVuIGVycm9yIHN0YXR1cy4KLSAqLwotdm9pZCBkc3RfdHJhbnNfcHV0KHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnQtPnJlZmNudCkpIHsKLQkJc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOwotCi0JCWRwcmludGsoIiVzOiBjb21wbGV0ZWQgdDogJXAsIGdlbjogJWxsdSwgYmlvOiAlcC5cbiIsCi0JCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgYmlvKTsKLQotCQliaW9fZW5kaW8oYmlvLCB0LT5lcnJvcik7Ci0JCWJpb19wdXQoYmlvKTsKLQotCQlkc3Rfbm9kZV9wdXQodC0+bik7Ci0JCW1lbXBvb2xfZnJlZSh0LCB0LT5uLT50cmFuc19wb29sKTsKLQl9Ci19Ci0KLS8qCi0gKiBQcm9jZXNzIGdpdmVuIGJsb2NrIElPIHJlcXVlc3Q6IGFsbG9jYXRlIHRyYW5zYWN0aW9uLCBpbnNlcnQgaXQgaW50byB0aGUgdHJlZQotICogYW5kIHNlbmQvc2NoZWR1bGUgY3J5cHRvIHByb2Nlc3NpbmcuCi0gKi8KLWludCBkc3RfcHJvY2Vzc19iaW8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGRzdF90cmFucyAqdDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCXQgPSBtZW1wb29sX2FsbG9jKG4tPnRyYW5zX3Bvb2wsIEdGUF9OT0ZTKTsKLQlpZiAoIXQpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JdC0+biA9IGRzdF9ub2RlX2dldChuKTsKLQl0LT5iaW8gPSBiaW87Ci0JdC0+ZXJyb3IgPSAwOwotCXQtPnJldHJpZXMgPSAwOwotCWF0b21pY19zZXQoJnQtPnJlZmNudCwgMSk7Ci0JdC0+Z2VuID0gYXRvbWljX2xvbmdfaW5jX3JldHVybigmbi0+Z2VuKTsKLQotCXQtPmVuYyA9IGJpb19kYXRhX2RpcihiaW8pOwotCWRzdF9iaW9fdG9fY21kKGJpbywgJnQtPmNtZCwgRFNUX0lPLCB0LT5nZW4pOwotCi0JbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7Ci0JZXJyID0gZHN0X3RyYW5zX2luc2VydCh0KTsKLQltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZHByaW50aygiJXM6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCBkaXIvZW5jOiAlZCwgbmVlZF9jcnlwdG86ICVkLlxuIiwKLQkJCV9fZnVuY19fLCB0LT5nZW4sICh1NjQpYmlvLT5iaV9zZWN0b3IsCi0JCQliaW8tPmJpX3NpemUsIHQtPmVuYywgZHN0X25lZWRfY3J5cHRvKG4pKTsKLQotCWlmIChkc3RfbmVlZF9jcnlwdG8obikgJiYgdC0+ZW5jKQotCQlkc3RfdHJhbnNfY3J5cHRvKHQpOwotCWVsc2UKLQkJZHN0X3RyYW5zX3NlbmQodCk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlOgotCWRzdF9ub2RlX3B1dChuKTsKLQltZW1wb29sX2ZyZWUodCwgbi0+dHJhbnNfcG9vbCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JYmlvX2VuZGlvKGJpbywgZXJyKTsKLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNjYW4gZm9yIHRpbWVvdXQvc3RhbGUgdHJhbnNhY3Rpb25zLgotICogRWFjaCB0cmFuc2FjdGlvbiBpcyBiZWluZyByZXNlbnQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIGVycm9yIGNvbXBsZXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF90cmFuc19zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRzdF9ub2RlLAotCQkJdHJhbnNfd29yay53b3JrKTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG4tPnRyYW5zX3NjYW5fdGltZW91dDsKLQlpbnQgbnVtID0gMTAgKiBuLT50cmFuc19tYXhfcmV0cmllczsKLQotCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOwotCi0JZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJm4tPnRyYW5zX3Jvb3QpOyByYl9ub2RlOyApIHsKLQkJdCA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKLQotCQlpZiAodGltZW91dCAmJiB0aW1lX2FmdGVyKHQtPnNlbmRfdGltZSArIHRpbWVvdXQsIGppZmZpZXMpCi0JCQkJJiYgdC0+cmV0cmllcyA9PSAwKQotCQkJYnJlYWs7Ci0jaWYgMAotCQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJWxsdSwgbjogJXMsIHJldHJpZXM6ICV1LCBtYXg6ICV1LlxuIiwKLQkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIG4tPm5hbWUsCi0JCQl0LT5yZXRyaWVzLCBuLT50cmFuc19tYXhfcmV0cmllcyk7Ci0jZW5kaWYKLQkJaWYgKC0tbnVtID09IDApCi0JCQlicmVhazsKLQotCQlkc3RfdHJhbnNfZ2V0KHQpOwotCi0JCXJiX25vZGUgPSByYl9uZXh0KHJiX25vZGUpOwotCi0JCWlmICh0aW1lb3V0ICYmICgrK3QtPnJldHJpZXMgPCBuLT50cmFuc19tYXhfcmV0cmllcykpIHsKLQkJCWRzdF90cmFuc19zZW5kKHQpOwotCQl9IGVsc2UgewotCQkJdC0+ZXJyb3IgPSAtRVRJTUVET1VUOwotCQkJZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2sodCk7Ci0JCQlkc3RfdHJhbnNfcHV0KHQpOwotCQl9Ci0KLQkJZHN0X3RyYW5zX3B1dCh0KTsKLQl9Ci0KLQltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOwotCi0JLyoKLQkgKiBJZiBubyB0aW1lb3V0IHNwZWNpZmllZCB0aGVuIHN5c3RlbSBpcyBpbiB0aGUgbWlkZGxlIG9mIGV4aXRpbmcKLQkgKiBwcm9jZXNzLCBzbyBubyBuZWVkIHRvIHJlc2NoZWR1bGUgc2Nhbm5pbmcgcHJvY2VzcyBhZ2Fpbi4KLQkgKi8KLQlpZiAodGltZW91dCkgewotCQlpZiAoIW51bSkKLQkJCXRpbWVvdXQgPSBIWjsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZuLT50cmFuc193b3JrLCB0aW1lb3V0KTsKLQl9Ci19Ci0KLS8qCi0gKiBGbHVzaCBhbGwgdHJhbnNhY3Rpb25zIGFuZCBtYXJrIHRoZW0gYXMgdGltZWQgb3V0LgotICogRGVzdHJveSB0cmFuc2FjdGlvbiBwb29scy4KLSAqLwotdm9pZCBkc3Rfbm9kZV90cmFuc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0OwotCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOwotCi0JaWYgKCFuLT50cmFuc19jYWNoZSkKLQkJcmV0dXJuOwotCi0JZHByaW50aygiJXM6IG46ICVwLCBjYW5jZWxsaW5nIHRoZSB3b3JrLlxuIiwgX19mdW5jX18sIG4pOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbi0+dHJhbnNfd29yayk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQlkcHJpbnRrKCIlczogbjogJXAsIHdvcmsgaGFzIGJlZW4gY2FuY2VsbGVkLlxuIiwgX19mdW5jX18sIG4pOwotCi0JZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJm4tPnRyYW5zX3Jvb3QpOyByYl9ub2RlOyApIHsKLQkJdCA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKLQotCQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJWxsdSwgbjogJXMuXG4iLAotCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgbi0+bmFtZSk7Ci0KLQkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7Ci0KLQkJdC0+ZXJyb3IgPSAtRVRJTUVET1VUOwotCQlkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKLQkJZHN0X3RyYW5zX3B1dCh0KTsKLQl9Ci0KLQltZW1wb29sX2Rlc3Ryb3kobi0+dHJhbnNfcG9vbCk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KG4tPnRyYW5zX2NhY2hlKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgdHJhbnNhY3Rpb24gc3RvcmFnZSBmb3IgZ2l2ZW4gbm9kZS4KLSAqIFRyYW5zYWN0aW9uIHN0b3JlcyBub3Qgb25seSBjb250cm9sIGluZm9ybWF0aW9uLAotICogYnV0IGFsc28gbmV0d29yayBjb21tYW5kIGFuZCBjcnlwdG8gZGF0YSAoaWYgbmVlZGVkKQotICogdG8gcmVkdWNlIG51bWJlciBvZiBhbGxvY2F0aW9ucy4gVGh1cyB0cmFuc2FjdGlvbiBzaXplCi0gKiBkaWZmZXJzIGZyb20gbm9kZSB0byBub2RlLgotICovCi1pbnQgZHN0X25vZGVfdHJhbnNfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHVuc2lnbmVkIGludCBzaXplKQotewotCS8qCi0JICogV2UgbmVlZCB0aGlzLCBzaW5jZSBub2RlIHdpdGggZ2l2ZW4gbmFtZSBjYW4gYmUgZHJvcHBlZCBmcm9tIHRoZQotCSAqIGhhc2ggdGFibGUsIGJ1dCBiZSBzdGlsbCBhbGl2ZSwgc28gc3Vic2VxdWVudCBjcmVhdGlvbiBvZiB0aGUgbm9kZQotCSAqIHdpdGggdGhlIHNhbWUgbmFtZSBtYXkgY29sbGlkZSB3aXRoIGV4aXN0aW5nIGNhY2hlIG5hbWUuCi0JICovCi0KLQlzbnByaW50ZihuLT5jYWNoZV9uYW1lLCBzaXplb2Yobi0+Y2FjaGVfbmFtZSksICIlcy0lcCIsIG4tPm5hbWUsIG4pOwotCi0Jbi0+dHJhbnNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShuLT5jYWNoZV9uYW1lLAotCQkJc2l6ZSArIG4tPmNyeXB0by5jcnlwdG9fYXR0YWNoZWRfc2l6ZSwKLQkJCTAsIDAsIE5VTEwpOwotCWlmICghbi0+dHJhbnNfY2FjaGUpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0Jbi0+dHJhbnNfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChkc3RfbWVtcG9vbF9udW0sCi0JCQluLT50cmFuc19jYWNoZSk7Ci0JaWYgKCFuLT50cmFuc19wb29sKQotCQlnb3RvIGVycl9vdXRfY2FjaGVfZGVzdHJveTsKLQotCW11dGV4X2luaXQoJm4tPnRyYW5zX2xvY2spOwotCW4tPnRyYW5zX3Jvb3QgPSBSQl9ST09UOwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJm4tPnRyYW5zX3dvcmssIGRzdF90cmFuc19zY2FuKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm4tPnRyYW5zX3dvcmssIG4tPnRyYW5zX3NjYW5fdGltZW91dCk7Ci0KLQlkcHJpbnRrKCIlczogbjogJXAsIHNpemU6ICV1LCBjcnlwdG86ICV1LlxuIiwKLQkJX19mdW5jX18sIG4sIHNpemUsIG4tPmNyeXB0by5jcnlwdG9fYXR0YWNoZWRfc2l6ZSk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9jYWNoZV9kZXN0cm95OgotCWttZW1fY2FjaGVfZGVzdHJveShuLT50cmFuc19jYWNoZSk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIC1FTk9NRU07Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCmluZGV4IDNhYmU3YzkuLjNkZWZhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCkBAIC00Nyw3ICs0Nyw3IEBACiBjb25maWcgUEFORUxfS0VZUEFECiAJZGVwZW5kcyBvbiBQQU5FTCAmJiBQQU5FTF9QUk9GSUxFPSIwIgogCWludCAiS2V5cGFkIHR5cGUgKDA9bm9uZSwgMT1vbGQgNiBrZXlzLCAyPW5ldyA2IGtleXMsIDM9TmV4Y29tIDQga2V5cykiCi0JcmFuZ2UgMCA0CisJcmFuZ2UgMCAzCiAJZGVmYXVsdCAwCiAJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGFuZCBjb25maWd1cmVzIGEga2V5cGFkIGNvbm5lY3RlZCB0byB0aGUgcGFyYWxsZWwgcG9ydC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKaW5kZXggZjk4YTUyNC4uOTVjOTNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BBTkVMX0xDRF9DSEFSU0VUCiAjdW5kZWYgREVGQVVMVF9MQ0RfQ0hBUlNFVAotI2RlZmluZSBERUZBVUxUX0xDRF9DSEFSU0VUCisjZGVmaW5lIERFRkFVTFRfTENEX0NIQVJTRVQgQ09ORklHX1BBTkVMX0xDRF9DSEFSU0VUCiAjZW5kaWYKIAogI2VuZGlmIC8qIERFRkFVTFRfUFJPRklMRSA9PSAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvZGlyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvZGlyLmMKaW5kZXggNmM1YjI2MS4uYWFjZDI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9kaXIuYwpAQCAtNzIyLDggKzcyMiw2IEBACiAJCWlmIChpbm9kZS0+aV9ubGluaykKIAkJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAl9Ci0JZHByaW50aygiJXM6IGlub2RlOiAlcCwgbG9jazogJWxkLCB1bmhhc2hlZDogJWQuXG4iLAotCQlfX2Z1bmNfXywgcGksIGlub2RlLT5pX3N0YXRlICYgSV9MT0NLLCBobGlzdF91bmhhc2hlZCgmaW5vZGUtPmlfaGFzaCkpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL1RPRE8KaW5kZXggYmFjNDBkNi4uOGQ2NGUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL1RPRE8KQEAgLTEsNiArMSw1IEBACiBUT0RPOgogCS0gQWRkIHN1cHBvcnQgZm9yIHN3YXAgbm90aWZpZXJzCi0JLSBSZW1vdmUgQ09ORklHX0FSTSBoYWNrCiAKIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kCiBOaXRpbiBHdXB0YSA8bmd1cHRhQHZmbGFyZS5vcmc+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMKaW5kZXggYjgzOWYwNS4uOTg5ZmFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYwpAQCAtMjIyLDI4ICsyMjIsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJhbXpzd2FwX2ZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQotewotI2lmZGVmIENPTkZJR19BUk0KLQlpbnQgZmxhZyA9IDA7Ci0JLyoKLQkgKiBVZ2x5IGhhY2sgdG8gZ2V0IGZsdXNoX2RjYWNoZV9wYWdlKCkgd29yayBvbiBBUk0uCi0JICogcGFnZV9tYXBwaW5nKHBhZ2UpID09IE5VTEwgYWZ0ZXIgY2xlYXJpbmcgdGhpcyBzd2FwIGNhY2hlIGZsYWcuCi0JICogV2l0aG91dCBjbGVhcmluZyB0aGlzIGZsYWcsIGZsdXNoX2RjYWNoZV9wYWdlKCkgd2lsbCBzaW1wbHkgc2V0Ci0JICogIlBHX2RjYWNoZV9kaXJ0eSIgYml0IGFuZCByZXR1cm4uCi0JICovCi0JaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKLQkJZmxhZyA9IDE7Ci0JCUNsZWFyUGFnZVN3YXBDYWNoZShwYWdlKTsKLQl9Ci0jZW5kaWYKLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLSNpZmRlZiBDT05GSUdfQVJNCi0JaWYgKGZsYWcpCi0JCVNldFBhZ2VTd2FwQ2FjaGUocGFnZSk7Ci0jZW5kaWYKLX0KLQogdm9pZCByYW16c3dhcF9pb2N0bF9nZXRfc3RhdHMoc3RydWN0IHJhbXpzd2FwICpyenMsCiAJCQlzdHJ1Y3QgcmFtenN3YXBfaW9jdGxfc3RhdHMgKnMpCiB7CkBAIC02NTUsNyArNjMzLDcgQEAKIAltZW1zZXQodXNlcl9tZW0sIDAsIFBBR0VfU0laRSk7CiAJa3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOwogCi0JcmFtenN3YXBfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAKIAlzZXRfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwogCWJpb19lbmRpbyhiaW8sIDApOwpAQCAtNjc5LDcgKzY1Nyw3IEBACiAJa3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOwogCWt1bm1hcF9hdG9taWMoY21lbSwgS01fVVNFUjEpOwogCi0JcmFtenN3YXBfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAKIAlzZXRfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwogCWJpb19lbmRpbyhiaW8sIDApOwpAQCAtNzc5LDcgKzc1Nyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJhbXpzd2FwX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCiAJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAliaW9fZW5kaW8oYmlvLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKaW5kZXggMzIyMmMyMi4uMGQ0OTBjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKQEAgLTEzMTgsMTMgKzEzMTgsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKIAlpbnQgaGRyX2xlbik7CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0xMzc2LDggKzEzNzYsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKQEAgLTEzODUsNyArMTM4NSw3IEBACiBleHRlcm4gdm9pZCBub3RpZnlfd3hfYXNzb2NfZXZlbnQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3BzX3R4X2FjayhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc2hvcnQgc3VjY2Vzcyk7CiBleHRlcm4gdm9pZCBTZW5kRGlzYXNzb2NpYXRpb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsdTgqIGFzU3RhLHU4IGFzUnNuKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiAKIC8vQWRkIGZvciBSRiBwb3dlciBvbiBwb3dlciBvZmYgYnkgbGl6aGFvbWluZyAwODA1MTIKIGV4dGVybiB2b2lkIFNlbmREaXNhc3NvY2lhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggZjg4MmRkOC4uOTEyOGMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTQ2OSw3ICs0NjksNyBAQAogLyogQWxsIHJlY2VpdmVkIGZyYW1lcyBhcmUgc2VudCB0byB0aGlzIGZ1bmN0aW9uLiBAc2tiIGNvbnRhaW5zIHRoZSBmcmFtZSBpbgogICogSUVFRSA4MDIuMTEgZm9ybWF0LCBpLmUuLCBpbiB0aGUgZm9ybWF0IGl0IHdhcyBzZW50IG92ZXIgYWlyLgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkuICovCi1pbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoraW50IGllZWU4MDIxMV9ydGxfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggMWZlMTljMy4uYzdjNjQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC02ODksNyArNjg5LDcgQEAKIH0KIAogLyogY2FsbGVkIHdpdGggaWVlZS0+bG9jayBoZWxkICovCi12b2lkIGllZWU4MDIxMV9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJaWYoSVNfRE9UMTFEX0VOQUJMRShpZWVlKSApCiAJewpAQCAtMTE5Niw3ICsxMTk2LDcgQEAKIAl9CiB9CiAKLXZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCit2b2lkIGllZWU4MDIxMV9ydGxfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpjaGFsbGVuZ2UsIGludCBjaGxlbikKIHsKIAl1OCAqYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTg5OCw3ICsxODk4LDcgQEAKIAogCQkJCQkJCQlpZWVlODAyMTFfYXNzb2NpYXRlX3N0ZXAyKGllZWUpOwogCQkJCQkJCX1lbHNlewotCQkJCQkJCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2UoaWVlZSwgY2hhbGxlbmdlLCBjaGxlbik7CisJCQkJCQkJCWllZWU4MDIxMV9ydGxfYXV0aF9jaGFsbGVuZ2UoaWVlZSwgY2hhbGxlbmdlLCBjaGxlbik7CiAJCQkJCQkJfQogCQkJCQkJfWVsc2V7CiAJCQkJCQkJaWVlZS0+c29mdG1hY19zdGF0cy5yeF9hdXRoX3JzX2VycisrOwpAQCAtMjA0Nyw3ICsyMDQ3LDcgQEAKIAogfQogCi12b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjA4OSw3ICsyMDg5LDcgQEAKIH0KIAogCi12b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJLy91bnNpZ25lZCBsb25nIGZsYWdzOwogCS8vc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssZmxhZ3MpOwpAQCAtMjMwMSw3ICsyMzAxLDcgQEAKIC8vI2Vsc2UKIAlpZiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSyl7CiAJCWllZWUtPmFjdHNjYW5uaW5nID0gdHJ1ZTsKLQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oaWVlZSk7CisJCWllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihpZWVlKTsKIAl9CiAvLyNlbmRpZgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKQEAgLTIzNTcsNyArMjM1Nyw3IEBACiAJaWYoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSyl7CiAJCWllZWUtPmJlaW5yZXRyeSA9IGZhbHNlOwogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogCS8vWUosYWRkLDA4MDgyOCwgbm90aWZ5IG9zIGhlcmUKIAlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTk9MSU5LKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCBkZGUxZjJlLi42OWJkMDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtMzA0LDcgKzMwNCw3IEBACiB9CiAKIC8qIFNLQnMgYXJlIGFkZGVkIHRvIHRoZSBpZWVlLT50eF9xdWV1ZS4gKi8KLWludCBpZWVlODAyMTFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoraW50IGllZWU4MDIxMV9ydGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKaW5kZXggNTdjNjJiMC4uZTBmMTNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKQEAgLTE4MTEsNyArMTgxMSw3IEBACiAJCQlpZihwcml2LT5yeF9za2ItPmxlbiA+IDQpCiAJCQkJc2tiX3RyaW0ocHJpdi0+cnhfc2tiLHByaXYtPnJ4X3NrYi0+bGVuLTQpOwogI2lmbmRlZiBSWF9ET05UX1BBU1NfVUwKLQkJCWlmKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZTgwMjExLAorCQkJaWYoIWllZWU4MDIxMV9ydGxfcngocHJpdi0+aWVlZTgwMjExLAogCQkJCQkgcHJpdi0+cnhfc2tiLCAmc3RhdHMpKXsKICNlbmRpZiAvLyBSWF9ET05UX1BBU1NfVUwKIApAQCAtMTkxNywxMSArMTkxNywxMSBAQAogCWlmICghY2hlY2tfbmljX2Vub3VnaHRfZGVzYyhkZXYsIHByaW9yaXR5KSl7CiAJCURNRVNHVygiRXJyb3I6IG5vIGRlc2NyaXB0b3IgbGVmdCBieSBwcmV2aW91cyBUWCAoYXZhaWwgJWQpICIsCiAJCQlnZXRfY3Vycl90eF9mcmVlX2Rlc2MoZGV2LCBwcmlvcml0eSkpOwotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShwcml2LT5pZWVlODAyMTEpOworCQlpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKIAl9CiAJcnRsODE4MF90eChkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIHByaW9yaXR5LCBtb3JlZnJhZywwLHJhdGUpOwogCWlmICghY2hlY2tfbmljX2Vub3VnaHRfZGVzYyhkZXYsIHByaW9yaXR5KSkKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKKwkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLGZsYWdzKTsKIH0KQEAgLTM2ODAsNyArMzY4MCw3IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSByODE4MF9zZXRfbWFjX2FkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCi0JLm5kb19zdGFydF94bWl0CQk9IGllZWU4MDIxMV94bWl0LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfcnRsX3htaXQsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBydGw4MTgwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTM5MDAsNyArMzkwMCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiAKIAlpZihlbm91Z2hfZGVzYykKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKKwkJaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CiB9CiAKIHZvaWQgcnRsODE4MF90eF9pc3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSxzaG9ydCBlcnJvcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYwppbmRleCA1MzZjYjZlLi4xMjRjZGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF93eC5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkvLwlxdWV1ZV93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsICZwcml2LT5pZWVlODAyMTEtPnd4X3N5bmNfc2Nhbl93cSk7CiAJCS8vcHJpbnRrKCJzdGFydCBzY2FuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT5cbiIpOwogCQlpZWVlODAyMTFfc29mdG1hY19pcHNfc2Nhbl9zeW5jcm8ocHJpdi0+aWVlZTgwMjExKTsKLS8vaWVlZTgwMjExX3N0YXJ0X3NjYW4ocHJpdi0+aWVlZTgwMjExKTsKKy8vaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKHByaXYtPmllZWU4MDIxMSk7CiAJCS8qIGludGVudGlvbmFsbHkgZm9yZ2V0IHRvIHVwIHNlbSAqLwogLy8JCQl1cCgmcHJpdi0+aWVlZTgwMjExLT53eF9zZW0pOwogCQkJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEuaAppbmRleCA5NzEzN2RkLi4zYmE5ZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS5oCkBAIC0zMDMsOCArMzAzLDggQEAKICNkZWZpbmUgaWVlZTgwMjExX3J4X21ndAkJaWVlZTgwMjExX3J4X21ndF9yc2wKIAogI2RlZmluZSBpZWVlODAyMTFfZ2V0X2JlYWNvbgkJaWVlZTgwMjExX2dldF9iZWFjb25fcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93YWtlX3F1ZXVlCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3N0b3BfcXVldWUJCWllZWU4MDIxMV9zdG9wX3F1ZXVlX3JzbAorI2RlZmluZSBpZWVlODAyMTFfcnRsX3dha2VfcXVldWUJCWllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZV9yc2wKKyNkZWZpbmUgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfcnRsX3N0b3BfcXVldWVfcnNsCiAjZGVmaW5lIGllZWU4MDIxMV9yZXNldF9xdWV1ZQkJaWVlZTgwMjExX3Jlc2V0X3F1ZXVlX3JzbAogI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2xfcnNsCiAjZGVmaW5lIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sX3JzbApAQCAtMjQzNSwxMyArMjQzNSwxMyBAQAogCXN0cnVjdCBza19idWZmICpmcmFnLAogCWludCBoZHJfbGVuKTsKIAotZXh0ZXJuIGludCBpZWVlODAyMTFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIGludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKik7CiAKIAogLyogaWVlZTgwMjExX3J4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIGludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X21ndChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKQEAgLTI1MDIsOCArMjUwMiw4IEBACiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yZXNldF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2dldF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKaW5kZXggODNjODQ1Mi4uYWE3NjM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0zMzMsOCArMzMzLDggQEAKICNkZWZpbmUgaWVlZTgwMjExX3J4X21ndAkJaWVlZTgwMjExX3J4X21ndF9yc2wKIAogI2RlZmluZSBpZWVlODAyMTFfZ2V0X2JlYWNvbgkJaWVlZTgwMjExX2dldF9iZWFjb25fcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93YWtlX3F1ZXVlCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3N0b3BfcXVldWUJCWllZWU4MDIxMV9zdG9wX3F1ZXVlX3JzbAorI2RlZmluZSBpZWVlODAyMTFfcnRsX3dha2VfcXVldWUJCWllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZV9yc2wKKyNkZWZpbmUgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfcnRsX3N0b3BfcXVldWVfcnNsCiAjZGVmaW5lIGllZWU4MDIxMV9yZXNldF9xdWV1ZQkJaWVlZTgwMjExX3Jlc2V0X3F1ZXVlX3JzbAogI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2xfcnNsCiAjZGVmaW5lIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sX3JzbApAQCAtMjU0NiwxMyArMjU0NiwxMyBAQAogCXN0cnVjdCBza19idWZmICpmcmFnLAogCWludCBoZHJfbGVuKTsKIAotZXh0ZXJuIGludCBpZWVlODAyMTFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIGludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKik7CiAKIAogLyogaWVlZTgwMjExX3J4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIGludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X21ndChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKQEAgLTI2MTMsOCArMjYxMyw4IEBACiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yZXNldF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2dldF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCAyNjQ0MTU1Li5mNDNhN2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKWRldi0+cHJpdjsKICNlbmRpZgogI2lmIDAKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV94bWl0OworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3J0bF94bWl0OwogI2VuZGlmCiAKIAltZW1zZXQoaWVlZSwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKStzaXplb2ZfcHJpdik7CkBAIC0zMzMsNyArMzMzLDcgQEAKIGV4dGVybiBpbnQgaWVlZTgwMjExX2NyeXB0b193ZXBfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9jcnlwdG9fd2VwX2V4aXQodm9pZCk7CiAKLWludCBfX2luaXQgaWVlZTgwMjExX2luaXQodm9pZCkKK2ludCBfX2luaXQgaWVlZTgwMjExX3J0bF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCWludCByZXR2YWw7CkBAIC0zODksNyArMzg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2V4aXQgaWVlZTgwMjExX2V4aXQodm9pZCkKK3ZvaWQgX19leGl0IGllZWU4MDIxMV9ydGxfZXhpdCh2b2lkKQogewogCWlmIChpZWVlODAyMTFfcHJvYykgewogCQlyZW1vdmVfcHJvY19lbnRyeSgiZGVidWdfbGV2ZWwiLCBpZWVlODAyMTFfcHJvYyk7CkBAIC00MTIsOCArNDEyLDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwogCiAKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX2V4aXQpOwotLy9tb2R1bGVfaW5pdChpZWVlODAyMTFfaW5pdCk7CisvL21vZHVsZV9leGl0KGllZWU4MDIxMV9ydGxfZXhpdCk7CisvL21vZHVsZV9pbml0KGllZWU4MDIxMV9ydGxfaW5pdCk7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwppbmRleCA1ZGM0NzhiLi4wNmQ5MTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTkyMyw3ICs5MjMsNyBAQAogLyogQWxsIHJlY2VpdmVkIGZyYW1lcyBhcmUgc2VudCB0byB0aGlzIGZ1bmN0aW9uLiBAc2tiIGNvbnRhaW5zIHRoZSBmcmFtZSBpbgogICogSUVFRSA4MDIuMTEgZm9ybWF0LCBpLmUuLCBpbiB0aGUgZm9ybWF0IGl0IHdhcyBzZW50IG92ZXIgYWlyLgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkuICovCi1pbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoraW50IGllZWU4MDIxMV9ydGxfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDU5M2QyMjguLjZkMWRkZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTY4NCw3ICs2ODQsNyBAQAogfQogCiAvKiBjYWxsZWQgd2l0aCBpZWVlLT5sb2NrIGhlbGQgKi8KLXZvaWQgaWVlZTgwMjExX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKICNpZmRlZiBFTkFCTEVfRE9UMTFECiAJaWYoSVNfRE9UMTFEX0VOQUJMRShpZWVlKSApCkBAIC0xNDMwLDcgKzE0MzAsNyBAQAogCX0KIH0KIAotdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpjaGFsbGVuZ2UsIGludCBjaGxlbikKK3ZvaWQgaWVlZTgwMjExX3J0bF9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmNoYWxsZW5nZSwgaW50IGNobGVuKQogewogCXU4ICpjOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yMjYyLDcgKzIyNjIsNyBAQAogCiAJCQkJCQkJCWllZWU4MDIxMV9hc3NvY2lhdGVfc3RlcDIoaWVlZSk7CiAJCQkJCQkJfWVsc2V7Ci0JCQkJCQkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShpZWVlLCBjaGFsbGVuZ2UsIGNobGVuKTsKKwkJCQkJCQkJaWVlZTgwMjExX3J0bF9hdXRoX2NoYWxsZW5nZShpZWVlLCBjaGFsbGVuZ2UsIGNobGVuKTsKIAkJCQkJCQl9CiAJCQkJCQl9ZWxzZXsKIAkJCQkJCQlpZWVlLT5zb2Z0bWFjX3N0YXRzLnJ4X2F1dGhfcnNfZXJyKys7CkBAIC0yMzc2LDcgKzIzNzYsNyBAQAogCQkJICogdG8gY2hlY2sgaXQgYW55IG1vcmUuCiAJCQkgKiAqLwogCQkJLy9wcmludGsoImVycm9yOm5vIGRlc2NyaXB0b3IgbGVmdEBxdWV1ZV9pbmRleCAlZFxuIiwgcXVldWVfaW5kZXgpOwotCQkJLy9pZWVlODAyMTFfc3RvcF9xdWV1ZShpZWVlKTsKKwkJCS8vaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKGllZWUpOwogI2lmZGVmIFVTQl9UWF9EUklWRVJfQUdHUkVHQVRJT05fRU5BQkxFCiAJCQlza2JfcXVldWVfdGFpbCgmaWVlZS0+c2tiX2Rydl9hZ2dRW3F1ZXVlX2luZGV4XSwgdHhiLT5mcmFnbWVudHNbaV0pOwogI2Vsc2UKQEAgLTI0NDAsNyArMjQ0MCw3IEBACiAKIH0KIAotdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI0ODEsNyArMjQ4MSw3IEBACiB9CiAKIAotdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvL3NwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLGZsYWdzKTsKQEAgLTI3MDYsNyArMjcwNiw3IEBACiAKIAlpZiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSyl7CiAJCWllZWUtPmFjdHNjYW5uaW5nID0gdHJ1ZTsKLQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oaWVlZSk7CisJCWllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihpZWVlKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMjc3NSw3ICsyNzc1LDcgQEAKIAl7CiAJCWllZWUtPmlzX3JvYW1pbmc9IGZhbHNlOwogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIApAQCAtMzQ5Nyw4ICszNDk3LDggQEAKIAogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2dldF9iZWFjb24pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93YWtlX3F1ZXVlKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF9xdWV1ZSk7CisvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKTsKKy8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUpOwogLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZXNldF9xdWV1ZSk7CiAvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbCk7CiAvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2wpOwpAQCAtMzUxOCw4ICszNTE4LDggQEAKIC8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfc2Nhbl9zeW5jcm8pOwogI2Vsc2UKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9nZXRfYmVhY29uKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93YWtlX3F1ZXVlKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zdG9wX3F1ZXVlKTsKK0VYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZSk7CitFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUpOwogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3Jlc2V0X3F1ZXVlKTsKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wpOwogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggMTAzYjMzYy4uNzk4ZmI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC02MDQsNyArNjA0LDcgQEAKIAl9CiB9CiAKLWludCBpZWVlODAyMTFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGllZWU4MDIxMV9ydGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDRlMzRhMWY0Li4zNDQxYjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTk3Niw3ICs5NzYsNyBAQAogCXsKIAkJaWYgKGxlbiAhPSBpZVsxXSsyKQogCQl7Ci0JCQlwcmludGsoImxlbjolZCwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOworCQkJcHJpbnRrKCJsZW46JXp1LCBpZTolZFxuIiwgbGVuLCBpZVsxXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKaW5kZXggOThiM2JiNi4uZTQxZThhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSRVEoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSRVEoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDgxLDcgKzQ4MSw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSU1AoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSU1AoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyc3AgPSAoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKilza2ItPmRhdGE7CkBAIC02MTEsNyArNjExLDcgQEAKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikKIAl7Ci0JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBERUxCQSglZCAvICVkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBERUxCQSglZCAvICV6dSlcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCmluZGV4IGZmOGZlN2UuLjBjYTVkOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCkBAIC01Nzk1LDcgKzU3OTUsNyBAQAogICAgICAgICAgICAgICAgIHN0YXRzLmZyYWdvZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgIHN0YXRzLm50b3RhbGZyYWcgPSAxOwogCi0gICAgICAgICAgICAgICAgaWYoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlODAyMTEsIHNrYiwgJnN0YXRzKSl7CisgICAgICAgICAgICAgICAgaWYoIWllZWU4MDIxMV9ydGxfcngocHJpdi0+aWVlZTgwMjExLCBza2IsICZzdGF0cykpewogICAgICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHByaXYtPnN0YXRzLnJ4b2srKzsKQEAgLTU4MzcsNyArNTgzNyw3IEBACiAJLm5kb19kb19pb2N0bCA9CQkJcnRsODE5Ml9pb2N0bCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9CXI4MTkyX3NldF9tdWx0aWNhc3QsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPQkJcjgxOTJfc2V0X21hY19hZHIsCi0JLm5kb19zdGFydF94bWl0ID0gCQlpZWVlODAyMTFfeG1pdCwKKwkubmRvX3N0YXJ0X3htaXQgPSAJCWllZWU4MDIxMV9ydGxfeG1pdCwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MTIxLDE0ICs2MTIxLDE0IEBACiAJUlRfVFJBQ0UoQ09NUF9ET1dOLCAid2xhbiBkcml2ZXIgcmVtb3ZlZFxuIik7CiB9CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfZXhpdCh2b2lkKTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF9leGl0KHZvaWQpOwogCiBzdGF0aWMgaW50IF9faW5pdCBydGw4MTkyX3BjaV9tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBpZWVlODAyMTFfaW5pdCgpOworCXJldHZhbCA9IGllZWU4MDIxMV9ydGxfaW5pdCgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTYxNTMsNyArNjE1Myw3IEBACiAKIAlSVF9UUkFDRShDT01QX0RPV04sICJFeGl0aW5nIik7CiAJcnRsODE5Ml9wcm9jX21vZHVsZV9yZW1vdmUoKTsKLQlpZWVlODAyMTFfZXhpdCgpOworCWllZWU4MDIxMV9ydGxfZXhpdCgpOwogfQogCiAvL3dhcm5pbmcgbWVzc2FnZSBXQgpAQCAtNjMxMyw3ICs2MzEzLDcgQEAKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiAKIAlpZihlbm91Z2hfZGVzYykKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKKwkJaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCBmMjJkMDI0Li45YTRjODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMTcyMSwxMyArMTcyMSwxMyBAQAogCXN0cnVjdCBza19idWZmICpmcmFnLAogCWludCBoZHJfbGVuKTsKIAotZXh0ZXJuIGludCBydGw4MTkyX2llZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IHJ0bDgxOTJfaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0xNzgzLDggKzE3ODMsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggYWMyMjNjZS4uZmVjZmExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogICoKICAqIFJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBtYW5hZ2VtZW50IGNvbnRyb2wgZnJhbWVzCiAgKgotICogQ2FsbGVkIGJ5IGllZWU4MDIxMV9yeCAqLworICogQ2FsbGVkIGJ5IGllZWU4MDIxMV9ydGxfcnggKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBpZWVlODAyMTFfcnhfZnJhbWVfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzLCB1MTYgdHlwZSwKQEAgLTI4OSw3ICsyODksNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSksIGJ5IGllZWU4MDIxMV9yeCAqLworLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLCBieSBpZWVlODAyMTFfcnRsX3J4ICovCiBzdGF0aWMgaW5saW5lIGludAogaWVlZTgwMjExX3J4X2ZyYW1lX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQpAQCAtODU4LDcgKzg1OCw3IEBACiAvKiBBbGwgcmVjZWl2ZWQgZnJhbWVzIGFyZSBzZW50IHRvIHRoaXMgZnVuY3Rpb24uIEBza2IgY29udGFpbnMgdGhlIGZyYW1lIGluCiAgKiBJRUVFIDgwMi4xMSBmb3JtYXQsIGkuZS4sIGluIHRoZSBmb3JtYXQgaXQgd2FzIHNlbnQgb3ZlciBhaXIuCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKS4gKi8KLWludCBpZWVlODAyMTFfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCitpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCAyMDNjMGE1Li45NWQ0Zjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogfQogCiAvKiBjYWxsZWQgd2l0aCBpZWVlLT5sb2NrIGhlbGQgKi8KLXZvaWQgaWVlZTgwMjExX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKIAlpZihJU19ET1QxMURfRU5BQkxFKGllZWUpICkKIAl7CkBAIC0xMjgxLDcgKzEyODEsNyBAQAogCX0KIH0KIAotdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpjaGFsbGVuZ2UsIGludCBjaGxlbikKK3ZvaWQgaWVlZTgwMjExX3J0bF9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmNoYWxsZW5nZSwgaW50IGNobGVuKQogewogCXU4ICpjOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yMDU0LDcgKzIwNTQsNyBAQAogCiAJCQkJCQkJCWllZWU4MDIxMV9hc3NvY2lhdGVfc3RlcDIoaWVlZSk7CiAJCQkJCQkJfWVsc2V7Ci0JCQkJCQkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShpZWVlLCBjaGFsbGVuZ2UsIGNobGVuKTsKKwkJCQkJCQkJaWVlZTgwMjExX3J0bF9hdXRoX2NoYWxsZW5nZShpZWVlLCBjaGFsbGVuZ2UsIGNobGVuKTsKIAkJCQkJCQl9CiAJCQkJCQl9ZWxzZXsKIAkJCQkJCQlpZWVlLT5zb2Z0bWFjX3N0YXRzLnJ4X2F1dGhfcnNfZXJyKys7CkBAIC0yMTYyLDcgKzIxNjIsNyBAQAogCQkJICogdG8gY2hlY2sgaXQgYW55IG1vcmUuCiAJCQkgKiAqLwogCQkJLy9wcmludGsoImVycm9yOm5vIGRlc2NyaXB0b3IgbGVmdEBxdWV1ZV9pbmRleCAlZCwgJWQsICVkXG4iLCBxdWV1ZV9pbmRleCwgc2tiX3F1ZXVlX2xlbigmaWVlZS0+c2tiX3dhaXRRW3F1ZXVlX2luZGV4XSksIGllZWUtPmNoZWNrX25pY19lbm91Z2hfZGVzYyhpZWVlLT5kZXYscXVldWVfaW5kZXgpKTsKLQkJCS8vaWVlZTgwMjExX3N0b3BfcXVldWUoaWVlZSk7CisJCQkvL2llZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShpZWVlKTsKIAkJCXNrYl9xdWV1ZV90YWlsKCZpZWVlLT5za2Jfd2FpdFFbcXVldWVfaW5kZXhdLCB0eGItPmZyYWdtZW50c1tpXSk7CiAJCX1lbHNlewogCQkJaWVlZS0+c29mdG1hY19kYXRhX2hhcmRfc3RhcnRfeG1pdCgKQEAgLTIyMjIsNyArMjIyMiw3IEBACiAKIH0KIAotdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIyNjMsNyArMjI2Myw3IEBACiB9CiAKIAotdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvL3NwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLGZsYWdzKTsKQEAgLTI0NzksNyArMjQ3OSw3IEBACiAKIAlpZiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSyl7CiAJCWllZWUtPmFjdHNjYW5uaW5nID0gdHJ1ZTsKLQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oaWVlZSk7CisJCWllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihpZWVlKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMjU1Miw3ICsyNTUyLDcgQEAKIAlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTk9MSU5LKQogCXsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggNjA2MjFkNi4uNGQ1NGUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTYwNCw3ICs2MDQsNyBAQAogCX0KIH0KIAotaW50IHJ0bDgxOTJfaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBydGw4MTkyX2llZWU4MDIxMV9ydGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYwppbmRleCA2NjI3NGQ3Li5jY2I5ZDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCkBAIC0xMjYsNiArMTI2LDggQEAKIAl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzMwMSl9LAogCS8qIFppbndlbGwgKi8KIAl7VVNCX0RFVklDRSgweDVhNTcsIDB4MDI5MCl9LAorCS8qIEd1aWxsZW1vdCAqLworCXtVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDMxKX0sCiAJLy85MlNVCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzIpfSwKIAl7fQpAQCAtMTUwMSw3ICsxNTAzLDcgQEAKICAgICAgICAgdXJiLT5jb250ZXh0ID0gc2tiOwogICAgICAgICBza2JfcXVldWVfdGFpbCgmcHJpdi0+cnhfcXVldWUsIHNrYik7CiAgICAgICAgIGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYoZXJyICYmIGVyciAhPSBFUEVSTSkKKwlpZihlcnIgJiYgZXJyICE9IC1FUEVSTSkKIAkJcHJpbnRrKCJjYW4gbm90IHN1Ym1pdCByeHVyYiwgZXJyIGlzICV4LFVSQiBzdGF0dXMgaXMgJXhcbiIsZXJyLHVyYi0+c3RhdHVzKTsKIH0KIApAQCAtNzE1NSw3ICs3MTU3LDcgQEAKIAkJCXVuaWNhc3RfcGFja2V0ID0gdHJ1ZTsKIAkJfQogCi0JCWlmKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZTgwMjExLHNrYiwgJnN0YXRzKSkgeworCQlpZighaWVlZTgwMjExX3J0bF9yeChwcml2LT5pZWVlODAyMTEsc2tiLCAmc3RhdHMpKSB7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQl9IGVsc2UgewogCQkvLwlwcml2LT5zdGF0cy5yeG9rdG90YWwrKzsgIC8vWUosdGVzdCwwOTAxMDgKQEAgLTc0MjYsNyArNzQyOCw3IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSByODE5Ml9zZXRfbWFjX2FkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCi0JLm5kb19zdGFydF94bWl0CQk9IHJ0bDgxOTJfaWVlZTgwMjExX3htaXQsCisJLm5kb19zdGFydF94bWl0CQk9IHJ0bDgxOTJfaWVlZTgwMjExX3J0bF94bWl0LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcnRsODE5Ml91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCkBAIC03NjE5LDcgKzc2MjEsNyBAQAogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLGZsYWdzKTsKIAogCWlmKGVub3VnaF9kZXNjKQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5pZWVlODAyMTEpOworCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKIH0KIAogdm9pZCBFbmFibGVIV1NlY3VyaXR5Q29uZmlnODE5MihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggZDM5N2YxZC4uNWYxMmQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC04NDUsNyArODQ1LDcgQEAKIAl7CiAJCWlmIChsZW4gIT0gaWVbMV0rMikKIAkJewotCQkJcHJpbnRrKCJsZW46JWQsIGllOiVkXG4iLCBsZW4sIGllWzFdKTsKKwkJCXByaW50aygibGVuOiV6dSwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCmluZGV4IDI2YWY0M2IuLjUxMmE1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUkVRKCVkIC8gJWQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUkVRKCVkIC8gJXp1KVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQzOSw3ICs0MzksNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUlNQKCVkIC8gJWQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUlNQKCVkIC8gJXp1KVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CiAJCXJldHVybiAtMTsKIAl9CiAJcnNwID0gKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciopc2tiLT5kYXRhOwpAQCAtNTY5LDcgKzU2OSw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gREVMQkEoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gREVMQkEoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDRkYmZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWcKQEAgLTAsMCArMSwxNSBAQAorY29uZmlnIEZCX1NNN1hYCisJdHJpc3RhdGUgIlNpbGljb24gTW90aW9uIFNNN1hYIEZyYW1lIEJ1ZmZlciBTdXBwb3J0IgorCWRlcGVuZHMgb24gRkIKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJaGVscAorCSAgRnJhbWUgQnVmZmVyIGRyaXZlciBmb3IgdGhlIFNpbGljb24gTW90aW9uIFNNN1hYIHNlcmlhbCBncmFwaGljIGNhcmQuCisKK2NvbmZpZyBGQl9TTTdYWF9BQ0NFTAorCWJvb2wgIlNpbGljb25tb3Rpb24gQWNjZWxlcmF0aW9uIGZ1bmN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEZCX1NNN1hYICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgd2lsbCBjb21waWxlIHRoZSBUcmlkZW50IGZyYW1lIGJ1ZmZlciBkZXZpY2Ugd2l0aAorCSAgYWNjZWxlcmF0aW9uIGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDNjYjkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorb2JqLSQoQ09ORklHX0ZCX1NNN1hYKSArPSBzbTd4eC5vCisKK3NtN3h4LXkgOj0gc210Y2ZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2MWY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCkBAIC0wLDAgKzEsMTAgQEAKK1RPRE86CistIER1YWwgaGVhZCBzdXBwb3J0CistIHVzZSBrZXJuZWwgY29kaW5nIHN0eWxlCistIGNoZWNrcGF0Y2gucGwgY2xlYW4KKy0gcmVmaW5lIHRoZSBjb2RlIGFuZCByZW1vdmUgdW51c2VkIGNvZGUKKy0gdXNlIGtlcm5lbCBmcmFtZWJ1ZmZlciBtb2RlIHNldHRpbmcgaW5zdGVhZCBvZiBoYXJkIGNvZGUKKy0gbW92ZSBpdCB0byBkcml2ZXJzL3ZpZGVvL3NtN3h4LyBvciBtYWtlIGl0IGJlIGRyaXZlcnMvdmlkZW8vc203eHhmYi5jCisKK1BsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAorVGVkZHkgV2FuZyA8dGVkZHkud2FuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzYjg2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYwpAQCAtMCwwICsxLDk3OSBAQAorLyoKKyAqIFNpbGljb24gTW90aW9uIFNNN1hYIDJEIGRyYXdpbmcgZW5naW5lIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgorICogQXV0aG9yOiBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogVmVyc2lvbiAwLjEwLjI2MTkyLjIxLjAxCisgKiAJLSBBZGQgUG93ZXJQQyBzdXBwb3J0CisgKiAJLSBBZGQgMkQgc3VwcG9ydCBmb3IgTHlueCAtCisgKiBWZXJpZmllZCBvbiAyLjYuMTkuMgorICogCUJveW9kLnlhbmcgIDxib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuPgorICovCisKK3Vuc2lnbmVkIGNoYXIgc210Y19kZV9idXN5OworCit2b2lkIFNNVENfd3JpdGUyRHJlZyh1bnNpZ25lZCBsb25nIG5PZmZzZXQsIHVuc2lnbmVkIGxvbmcgbkRhdGEpCit7CisJd3JpdGVsKG5EYXRhLCBzbXRjXzJEQmFzZUFkZHJlc3MgKyBuT2Zmc2V0KTsKK30KKwordW5zaWduZWQgbG9uZyBTTVRDX3JlYWQyRHJlZyh1bnNpZ25lZCBsb25nIG5PZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKHNtdGNfMkRCYXNlQWRkcmVzcyArIG5PZmZzZXQpOworfQorCit2b2lkIFNNVENfd3JpdGUyRGRhdGFwb3J0KHVuc2lnbmVkIGxvbmcgbk9mZnNldCwgdW5zaWduZWQgbG9uZyBuRGF0YSkKK3sKKwl3cml0ZWwobkRhdGEsIHNtdGNfMkRkYXRhcG9ydCArIG5PZmZzZXQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGRlSW5pdAorICoKKyAqIFB1cnBvc2UKKyAqICAgIERyYXdpbmcgZW5naW5lIGluaXRpYWxpemF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGRlSW5pdCh1bnNpZ25lZCBpbnQgbk1vZGVXaWR0aCwgdW5zaWduZWQgaW50IG5Nb2RlSGVpZ2h0LAorCQl1bnNpZ25lZCBpbnQgYnBwKQoreworCS8qIEdldCBjdXJyZW50IHBvd2VyIGNvbmZpZ3VyYXRpb24uICovCisJdW5zaWduZWQgY2hhciBjbG9jazsKKwljbG9jayA9IHNtdGNfc2VxcigweDIxKTsKKworCS8qIGluaXRpYWxpemUgZ2xvYmFsICdtdXRleCBsb2NrJyB2YXJpYWJsZSAqLworCXNtdGNfZGVfYnVzeSA9IDA7CisKKwkvKiBFbmFibGUgMkQgRHJhd2luZyBFbmdpbmUgKi8KKwlzbXRjX3NlcXcoMHgyMSwgY2xvY2sgJiAweEY4KTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9DTElQX1RMLAorCQkJRklFTERfVkFMVUUoMCwgREVfQ0xJUF9UTCwgVE9QLCAwKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ0xJUF9UTCwgU1RBVFVTLCBESVNBQkxFKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ0xJUF9UTCwgSU5ISUJJVCwgT1VUU0lERSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfQ0xJUF9UTCwgTEVGVCwgMCkpOworCisJaWYgKGJwcCA+PSAyNCkgeworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgbk1vZGVXaWR0aCAqIDMpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkJICBERV9QSVRDSCwKKwkJCQkJCQkJICBTT1VSQ0UsCisJCQkJCQkJCSAgbk1vZGVXaWR0aAorCQkJCQkJCQkgICogMykpOworCX0gZWxzZSB7CisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBuTW9kZVdpZHRoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICAgREVfUElUQ0gsCisJCQkJCQkJICAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgIG5Nb2RlV2lkdGgpKTsKKwl9CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCQkgICAgbk1vZGVXaWR0aCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICAgbk1vZGVXaWR0aCkpOworCisJc3dpdGNoIChicHApIHsKKwljYXNlIDg6CisJCVNNVENfd3JpdGUyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQlGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWFksCisJCQkJCSAgTk9STUFMKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJUEFUVEVSTl9ZLAorCQkJCQkJCTApIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YLAorCQkJCSAgICAwKSB8IEZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCSAgIFBJWEVMX0ZPUk1BVCwKKwkJCQkJCSAgIDgpIHwgRklFTERfU0VUKDAsCisJCQkJCQkJICBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQkgIEFERFJFU1NJTkcsCisJCQkJCQkJICBYWSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQlTT1VSQ0VfSEVJR0hULCAzKSk7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCVNNVENfd3JpdGUyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQlGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWFksCisJCQkJCSAgTk9STUFMKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJUEFUVEVSTl9ZLAorCQkJCQkJCTApIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YLAorCQkJCSAgICAwKSB8IEZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQkgICBQSVhFTF9GT1JNQVQsCisJCQkJCQkJICAgMjQpIHwgRklFTERfU0VUKDAsCisJCQkJCQkJICAgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJICAgQUREUkVTU0lORywKKwkJCQkJCQkgICBYWSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQlTT1VSQ0VfSEVJR0hULCAzKSk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJZGVmYXVsdDoKKwkJU01UQ193cml0ZTJEcmVnKERFX1NUUkVUQ0hfRk9STUFULAorCQkJCUZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YWSwKKwkJCQkJICBOT1JNQUwpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQlERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQlQQVRURVJOX1ksCisJCQkJCQkJMCkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1gsCisJCQkJICAgIDApIHwgRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCSAgIFBJWEVMX0ZPUk1BVCwKKwkJCQkJCQkgICAxNikgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgICBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQkgICBBRERSRVNTSU5HLAorCQkJCQkJCSAgIFhZKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCVNPVVJDRV9IRUlHSFQsIDMpKTsKKwkJYnJlYWs7CisJfQorCisJU01UQ193cml0ZTJEcmVnKERFX01BU0tTLAorCQkJRklFTERfVkFMVUUoMCwgREVfTUFTS1MsIEJZVEVfTUFTSywgMHhGRkZGKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9NQVNLUywgQklUX01BU0ssIDB4RkZGRikpOworCVNNVENfd3JpdGUyRHJlZyhERV9DT0xPUl9DT01QQVJFX01BU0ssCisJCQlGSUVMRF9WQUxVRSgwLCBERV9DT0xPUl9DT01QQVJFX01BU0ssIE1BU0tTLCBcCisJCQkJMHhGRkZGRkYpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfQ09MT1JfQ09NUEFSRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTE9SX0NPTVBBUkUsIENPTE9SLCAweEZGRkZGRikpOworfQorCit2b2lkIGRlVmVydGljYWxMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJCSAgICB1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwkJICAgIHVuc2lnbmVkIGxvbmcgblgsCisJCSAgICB1bnNpZ25lZCBsb25nIG5ZLAorCQkgICAgdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LCB1bnNpZ25lZCBsb25nIG5Db2xvcikKK3sKKwlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgQUREUkVTUywKKwkJCQkgICAgZHN0X2Jhc2UpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwgZHN0X3BpdGNoKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgU09VUkNFLCBkc3RfcGl0Y2gpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIG5YKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgblkpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIDEpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgZHN0X2hlaWdodCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwgTEVGVF9UT19SSUdIVCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIE1BSk9SLCBZKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9YLCBORUdBVElWRSkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWSwgUE9TSVRJVkUpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBMQVNUX1BJWEVMLCBPRkYpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELCBTSE9SVF9TVFJPS0UpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIDB4MEMpKTsKKworCXNtdGNfZGVfYnVzeSA9IDE7Cit9CisKK3ZvaWQgZGVIb3Jpem9udGFsTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBuWCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBuWSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsIHVuc2lnbmVkIGxvbmcgbkNvbG9yKQoreworCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBBRERSRVNTLAorCQkJCSAgICBkc3RfYmFzZSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLCBkc3RfcGl0Y2gpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBTT1VSQ0UsIGRzdF9waXRjaCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsCisJCQkgIERJU0FCTEUpIHwgRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsCisJCQkJCQkgblgpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICBERV9ERVNUSU5BVElPTiwKKwkJCQkJCQkgICBZLAorCQkJCQkJCSAgIG5ZKSk7CisJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwKKwkJCSAgICBkc3Rfd2lkdGgpIHwgRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLAorCQkJCQkJICAgICBZX0VULCAxKSk7CisJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCisJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKSB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSAgICBERV9DT05UUk9MLAorCQkJCQkJCSAgICBESVJFQ1RJT04sCisJCQkJCQkJICAgIFJJR0hUX1RPX0xFRlQpCisJCXwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIE1BSk9SLCBYKSB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSBERV9DT05UUk9MLAorCQkJCQkJCSBTVEVQX1gsCisJCQkJCQkJIFBPU0lUSVZFKQorCQl8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1ksCisJCQkgICAgTkVHQVRJVkUpIHwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsCisJCQkJCQkgIExBU1RfUElYRUwsCisJCQkJCQkgIE9GRikgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgICBERV9DT05UUk9MLAorCQkJCQkJCSAgIENPTU1BTkQsCisJCQkJCQkJICAgU0hPUlRfU1RST0tFKQorCQl8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULAorCQkJICAgIFJPUDIpIHwgRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLAorCQkJCQkJMHgwQykpOworCisJc210Y19kZV9idXN5ID0gMTsKK30KKwordm9pZCBkZUxpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJICAgIHVuc2lnbmVkIGxvbmcgblgxLAorCSAgICB1bnNpZ25lZCBsb25nIG5ZMSwKKwkgICAgdW5zaWduZWQgbG9uZyBuWDIsIHVuc2lnbmVkIGxvbmcgblkyLCB1bnNpZ25lZCBsb25nIG5Db2xvcikKK3sKKwl1bnNpZ25lZCBsb25nIG5Db21tYW5kID0KKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwgTEVGVF9UT19SSUdIVCkgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTUFKT1IsIFgpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWCwgUE9TSVRJVkUpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWSwgUE9TSVRJVkUpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIExBU1RfUElYRUwsIE9GRikgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAorCSAgICBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIDB4MEMpOworCXVuc2lnbmVkIGxvbmcgRGVsdGFYOworCXVuc2lnbmVkIGxvbmcgRGVsdGFZOworCisJLyogQ2FsY3VsYXRlIGRlbHRhIFggKi8KKwlpZiAoblgxIDw9IG5YMikKKwkJRGVsdGFYID0gblgyIC0gblgxOworCWVsc2UgeworCQlEZWx0YVggPSBuWDEgLSBuWDI7CisJCW5Db21tYW5kID0gRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBTVEVQX1gsIE5FR0FUSVZFKTsKKwl9CisKKwkvKiBDYWxjdWxhdGUgZGVsdGEgWSAqLworCWlmIChuWTEgPD0gblkyKQorCQlEZWx0YVkgPSBuWTIgLSBuWTE7CisJZWxzZSB7CisJCURlbHRhWSA9IG5ZMSAtIG5ZMjsKKwkJbkNvbW1hbmQgPSBGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIFNURVBfWSwgTkVHQVRJVkUpOworCX0KKworCS8qIERldGVybWluZSB0aGUgbWFqb3IgYXhpcyAqLworCWlmIChEZWx0YVggPCBEZWx0YVkpCisJCW5Db21tYW5kID0gRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBNQUpPUiwgWSk7CisKKwkvKiBWZXJ0aWNhbCBsaW5lPyAqLworCWlmIChuWDEgPT0gblgyKQorCQlkZVZlcnRpY2FsTGluZShkc3RfYmFzZSwgZHN0X3BpdGNoLCBuWDEsIG5ZMSwgRGVsdGFZLCBuQ29sb3IpOworCisJLyogSG9yaXpvbnRhbCBsaW5lPyAqLworCWVsc2UgaWYgKG5ZMSA9PSBuWTIpCisJCWRlSG9yaXpvbnRhbExpbmUoZHN0X2Jhc2UsIGRzdF9waXRjaCwgblgxLCBuWTEsIFwKKwkJCQlEZWx0YVgsIG5Db2xvcik7CisKKwkvKiBEaWFnb25hbCBsaW5lPyAqLworCWVsc2UgaWYgKERlbHRhWCA9PSBEZWx0YVkpIHsKKwkJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCQkJICAgIEFERFJFU1MsIGRzdF9iYXNlKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfUElUQ0gsCisJCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIDEpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgblkxKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIDEpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIERlbHRhWCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAorCQkJCUZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgQ09NTUFORCwKKwkJCQkJICBTSE9SVF9TVFJPS0UpKTsKKwl9CisKKwkvKiBHZW5lcmljIGxpbmUgKi8KKwllbHNlIHsKKwkJdW5zaWduZWQgaW50IGsxLCBrMiwgZXQsIHc7CisJCWlmIChEZWx0YVggPCBEZWx0YVkpIHsKKwkJCWsxID0gMiAqIERlbHRhWDsKKwkJCWV0ID0gazEgLSBEZWx0YVk7CisJCQlrMiA9IGV0IC0gRGVsdGFZOworCQkJdyA9IERlbHRhWSArIDE7CisJCX0gZWxzZSB7CisJCQlrMSA9IDIgKiBEZWx0YVk7CisJCQlldCA9IGsxIC0gRGVsdGFYOworCQkJazIgPSBldCAtIERlbHRhWDsKKwkJCXcgPSBEZWx0YVggKyAxOworCQl9CisKKwkJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCQkJICAgIEFERFJFU1MsIGRzdF9iYXNlKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfUElUQ0gsCisJCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfU09VUkNFLAorCQkJCUZJRUxEX1NFVCgwLCBERV9TT1VSQ0UsIFdSQVAsIERJU0FCTEUpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFhfSzEsIGsxKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBZX0syLCBrMikpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgblgxKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIG5ZMSkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCB3KSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBldCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAorCQkJCUZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgQ09NTUFORCwKKwkJCQkJICBMSU5FX0RSQVcpKTsKKwl9CisKKwlzbXRjX2RlX2J1c3kgPSAxOworfQorCit2b2lkIGRlRmlsbFJlY3QodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwkJdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJCXVuc2lnbmVkIGxvbmcgZHN0X1gsCisJCXVuc2lnbmVkIGxvbmcgZHN0X1ksCisJCXVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAorCQl1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsIHVuc2lnbmVkIGxvbmcgbkNvbG9yKQoreworCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBBRERSRVNTLAorCQkJCSAgICBkc3RfYmFzZSkpOworCisJaWYgKGRzdF9waXRjaCkgeworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICBERV9QSVRDSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfV0lORE9XX1dJRFRILAorCQkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisJfQorCisJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBkc3RfWCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIGRzdF9ZKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCBkc3Rfd2lkdGgpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgZHN0X2hlaWdodCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwgTEVGVF9UT19SSUdIVCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIExBU1RfUElYRUwsIE9GRikgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsIFJFQ1RBTkdMRV9GSUxMKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAorCQkJRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCAweDBDKSk7CisKKwlzbXRjX2RlX2J1c3kgPSAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGRlUm90YXRlUGF0dGVybgorICoKKyAqIFB1cnBvc2UKKyAqICAgIFJvdGF0ZSB0aGUgZ2l2ZW4gcGF0dGVybiBpZiBuZWNlc3NhcnkKKyAqCisgKiBQYXJhbWV0ZXJzCisgKiAgICBbaW5dCisgKgkgICBwUGF0dGVybiAgLSBQb2ludGVyIHRvIERFX1NVUkZBQ0Ugc3RydWN0dXJlIGNvbnRhaW5pbmcKKyAqCQkgICAgICAgcGF0dGVybiBhdHRyaWJ1dGVzCisgKgkgICBwYXR0ZXJuWCAgLSBYIHBvc2l0aW9uICgwLTcpIG9mIHBhdHRlcm4gb3JpZ2luCisgKgkgICBwYXR0ZXJuWSAgLSBZIHBvc2l0aW9uICgwLTcpIG9mIHBhdHRlcm4gb3JpZ2luCisgKgorICogICAgW291dF0KKyAqCSAgIHBhdHRlcm5fZHN0YWRkciAtIFBvaW50ZXIgdG8gcHJlLWFsbG9jYXRlZCBidWZmZXIgY29udGFpbmluZworICoJICAgcm90YXRlZCBwYXR0ZXJuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRlUm90YXRlUGF0dGVybih1bnNpZ25lZCBjaGFyICpwYXR0ZXJuX2RzdGFkZHIsCisJCSAgICAgdW5zaWduZWQgbG9uZyBwYXR0ZXJuX3NyY19hZGRyLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgcGF0dGVybl9CUFAsCisJCSAgICAgdW5zaWduZWQgbG9uZyBwYXR0ZXJuX3N0cmlkZSwgaW50IHBhdHRlcm5YLCBpbnQgcGF0dGVyblkpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBwYXR0ZXJuW1BBVFRFUk5fV0lEVEggKiBQQVRURVJOX0hFSUdIVF07CisJdW5zaWduZWQgaW50IHgsIHk7CisJdW5zaWduZWQgY2hhciAqcGpQYXRCeXRlOworCisJaWYgKHBhdHRlcm5fZHN0YWRkciAhPSBOVUxMKSB7CisJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCQlpZiAocGF0dGVyblggfHwgcGF0dGVyblkpIHsKKwkJCS8qIFJvdGF0ZSBwYXR0ZXJuICovCisJCQlwalBhdEJ5dGUgPSAodW5zaWduZWQgY2hhciAqKXBhdHRlcm47CisKKwkJCXN3aXRjaCAocGF0dGVybl9CUFApIHsKKwkJCWNhc2UgODoKKwkJCQl7CisJCQkJCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKwkJCQkJCXVuc2lnbmVkIGNoYXIgKnBqQnVmZmVyID0KKwkJCQkJCSAgICBwYXR0ZXJuX2RzdGFkZHIgKworCQkJCQkJICAgICgocGF0dGVyblkgKyB5KSAmIDcpICogODsKKwkJCQkJCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKwkJCQkJCQlwakJ1ZmZlclsocGF0dGVyblggKworCQkJCQkJCQkgIHgpICYgN10gPQorCQkJCQkJCSAgICBwalBhdEJ5dGVbeF07CisJCQkJCQl9CisJCQkJCQlwalBhdEJ5dGUgKz0gcGF0dGVybl9zdHJpZGU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIDE2OgorCQkJCXsKKwkJCQkJZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworCQkJCQkJdW5zaWduZWQgc2hvcnQgKnBqQnVmZmVyID0KKwkJCQkJCSAgICAodW5zaWduZWQgc2hvcnQgKikKKwkJCQkJCSAgICBwYXR0ZXJuX2RzdGFkZHIgKworCQkJCQkJICAgICgocGF0dGVyblkgKyB5KSAmIDcpICogODsKKwkJCQkJCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKwkJCQkJCQlwakJ1ZmZlclsocGF0dGVyblggKworCQkJCQkJCQkgIHgpICYgN10gPQorCQkJCQkJCSAgICAoKHVuc2lnbmVkIHNob3J0ICopCisJCQkJCQkJICAgICBwalBhdEJ5dGUpW3hdOworCQkJCQkJfQorCQkJCQkJcGpQYXRCeXRlICs9IHBhdHRlcm5fc3RyaWRlOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSAzMjoKKwkJCQl7CisJCQkJCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKwkJCQkJCXVuc2lnbmVkIGxvbmcgKnBqQnVmZmVyID0KKwkJCQkJCSAgICAodW5zaWduZWQgbG9uZyAqKQorCQkJCQkJICAgIHBhdHRlcm5fZHN0YWRkciArCisJCQkJCQkgICAgKChwYXR0ZXJuWSArIHkpICYgNykgKiA4OworCQkJCQkJZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgeworCQkJCQkJCXBqQnVmZmVyWyhwYXR0ZXJuWCArCisJCQkJCQkJCSAgeCkgJiA3XSA9CisJCQkJCQkJICAgICgodW5zaWduZWQgbG9uZyAqKQorCQkJCQkJCSAgICAgcGpQYXRCeXRlKVt4XTsKKwkJCQkJCX0KKwkJCQkJCXBqUGF0Qnl0ZSArPSBwYXR0ZXJuX3N0cmlkZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKkRvbid0IHJvdGF0ZSxqdXN0IGNvcHkgcGF0dGVybiBpbnRvIHBhdHRlcm5fZHN0YWRkciovCisJCQlmb3IgKGkgPSAwOyBpIDwgKHBhdHRlcm5fQlBQICogMik7IGkrKykgeworCQkJCSgodW5zaWduZWQgbG9uZyAqKXBhdHRlcm5fZHN0YWRkcilbaV0gPQorCQkJCSAgICBwYXR0ZXJuW2ldOworCQkJfQorCQl9CisKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZGVDb3B5CisgKgorICogUHVycG9zZQorICogICAgQ29weSBhIHJlY3Rhbmd1bGFyIGFyZWEgb2YgdGhlIHNvdXJjZSBzdXJmYWNlIHRvIGEgZGVzdGluYXRpb24gc3VyZmFjZQorICoKKyAqIFJlbWFya3MKKyAqICAgIFNvdXJjZSBiaXRtYXAgbXVzdCBoYXZlIHRoZSBzYW1lIGNvbG9yIGRlcHRoIChCUFApIGFzIHRoZSBkZXN0aW5hdGlvbgorICogICAgYml0bWFwLgorICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRlQ29weSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfQlBQLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9YLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9ZLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LAorCSAgICB1bnNpZ25lZCBsb25nIHNyY19iYXNlLAorCSAgICB1bnNpZ25lZCBsb25nIHNyY19waXRjaCwKKwkgICAgdW5zaWduZWQgbG9uZyBzcmNfWCwKKwkgICAgdW5zaWduZWQgbG9uZyBzcmNfWSwgcFRyYW5zcGFyZW50IHBUcmFuc3AsIHVuc2lnbmVkIGNoYXIgblJPUDIpCit7CisJdW5zaWduZWQgbG9uZyBuRGlyZWN0aW9uID0gMDsKKwl1bnNpZ25lZCBsb25nIG5UcmFuc3BhcmVudCA9IDA7CisJLyogRGlyZWN0aW9uIG9mIFJPUDIgb3BlcmF0aW9uOgorCSAqIDEgPSBMZWZ0IHRvIFJpZ2h0LAorCSAqICgtMSkgPSBSaWdodCB0byBMZWZ0CisJICovCisJdW5zaWduZWQgbG9uZyBvcFNpZ24gPSAxOworCS8qIHhXaWR0aCBpcyBpbiBwaXhlbHMgKi8KKwl1bnNpZ25lZCBsb25nIHhXaWR0aCA9IDE5MiAvIChkc3RfQlBQIC8gOCk7CisJdW5zaWduZWQgbG9uZyBkZV9jdHJsID0gMDsKKworCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBBRERSRVNTLAorCQkJCSAgICBkc3RfYmFzZSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19TT1VSQ0VfQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19TT1VSQ0VfQkFTRSwgQUREUkVTUywKKwkJCQkgICAgc3JjX2Jhc2UpKTsKKworCWlmIChkc3RfcGl0Y2ggJiYgc3JjX3BpdGNoKSB7CisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkgICAgIERFX1BJVENILAorCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkgICAgIHNyY19waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCSAgICAgREVfV0lORE9XX1dJRFRILAorCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkgICAgIHNyY19waXRjaCkpOworCX0KKworCS8qIFNldCB0cmFuc3BhcmVudCBiaXRzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChwVHJhbnNwICE9IE5VTEwpIHsKKwkJblRyYW5zcGFyZW50ID0KKwkJICAgIHBUcmFuc3AtPm1hdGNoIHwgcFRyYW5zcC0+c2VsZWN0IHwgcFRyYW5zcC0+Y29udHJvbDsKKworCQkvKiBTZXQgY29sb3IgY29tcGFyZSByZWdpc3RlciAqLworCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09MT1JfQ09NUEFSRSwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9DT0xPUl9DT01QQVJFLCBDT0xPUiwKKwkJCQkJICAgIHBUcmFuc3AtPmNvbG9yKSk7CisJfQorCisJLyogRGV0ZXJtaW5lIGRpcmVjdGlvbiBvZiBvcGVyYXRpb24gKi8KKwlpZiAoc3JjX1kgPCBkc3RfWSkgeworCQkvKiArLS0tLS0tLS0tLSsKKwkJICAgfFMgICAgICAgICB8CisJCSAgIHwgICAgICAgICAgKy0tLS0tLS0tLS0rCisJCSAgIHwgICAgICAgICAgfCAgICAgIHwgICB8CisJCSAgIHwgICAgICAgICAgfCAgICAgIHwgICB8CisJCSAgICstLS18LS0tLS0tKyAgICAgIHwKKwkJICAgfCAgICAgICAgICAgICAgIEQgfAorCQkgICArLS0tLS0tLS0tLSsgKi8KKworCQluRGlyZWN0aW9uID0gQk9UVE9NX1RPX1RPUDsKKwl9IGVsc2UgaWYgKHNyY19ZID4gZHN0X1kpIHsKKwkJLyogKy0tLS0tLS0tLS0rCisJCSAgIHxEICAgICAgICAgfAorCQkgICB8ICAgICAgICAgICstLS0tLS0tLS0tKworCQkgICB8ICAgICAgICAgIHwgICAgICB8ICAgfAorCQkgICB8ICAgICAgICAgIHwgICAgICB8ICAgfAorCQkgICArLS0tfC0tLS0tLSsgICAgICB8CisJCSAgIHwgICAgICAgICAgICAgICBTIHwKKwkJICAgKy0tLS0tLS0tLS0rICovCisKKwkJbkRpcmVjdGlvbiA9IFRPUF9UT19CT1RUT007CisJfSBlbHNlIHsKKwkJLyogc3JjX1kgPT0gZHN0X1kgKi8KKworCQlpZiAoc3JjX1ggPD0gZHN0X1gpIHsKKwkJCS8qICstLS0tLS0rLS0tKy0tLS0tLSsKKwkJCSAgIHxTICAgICB8ICAgfCAgICAgRHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgICstLS0tLS0rLS0tKy0tLS0tLSsgKi8KKworCQkJbkRpcmVjdGlvbiA9IFJJR0hUX1RPX0xFRlQ7CisJCX0gZWxzZSB7CisJCQkvKiBzcmNfWCA+IGRzdF9YICovCisKKwkJCS8qICstLS0tLS0rLS0tKy0tLS0tLSsKKwkJCSAgIHxEICAgICB8ICAgfCAgICAgU3wKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgICstLS0tLS0rLS0tKy0tLS0tLSsgKi8KKworCQkJbkRpcmVjdGlvbiA9IExFRlRfVE9fUklHSFQ7CisJCX0KKwl9CisKKwlpZiAoKG5EaXJlY3Rpb24gPT0gQk9UVE9NX1RPX1RPUCkgfHwgKG5EaXJlY3Rpb24gPT0gUklHSFRfVE9fTEVGVCkpIHsKKwkJc3JjX1ggKz0gZHN0X3dpZHRoIC0gMTsKKwkJc3JjX1kgKz0gZHN0X2hlaWdodCAtIDE7CisJCWRzdF9YICs9IGRzdF93aWR0aCAtIDE7CisJCWRzdF9ZICs9IGRzdF9oZWlnaHQgLSAxOworCQlvcFNpZ24gPSAoLTEpOworCX0KKworCWlmIChkc3RfQlBQID49IDI0KSB7CisJCXNyY19YICo9IDM7CisJCXNyY19ZICo9IDM7CisJCWRzdF9YICo9IDM7CisJCWRzdF9ZICo9IDM7CisJCWRzdF93aWR0aCAqPSAzOworCQlpZiAoKG5EaXJlY3Rpb24gPT0gQk9UVE9NX1RPX1RPUCkKKwkJICAgIHx8IChuRGlyZWN0aW9uID09IFJJR0hUX1RPX0xFRlQpKSB7CisJCQlzcmNfWCArPSAyOworCQkJZHN0X1ggKz0gMjsKKwkJfQorCX0KKworCS8qIFdvcmthcm91bmQgZm9yIDE5MiBieXRlIGh3IGJ1ZyAqLworCWlmICgoblJPUDIgIT0gMHgwQykgJiYgKChkc3Rfd2lkdGggKiAoZHN0X0JQUCAvIDgpKSA+PSAxOTIpKSB7CisJCS8qCisJCSAqIFBlcmZvcm0gdGhlIFJPUDIgb3BlcmF0aW9uIGluIGNodW5rcyBvZiAoeFdpZHRoICoKKwkJICogZHN0X2hlaWdodCkKKwkJICovCisJCXdoaWxlICgxKSB7CisJCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwkJCVNNVENfd3JpdGUyRHJlZyhERV9TT1VSQ0UsCisJCQkJRklFTERfU0VUKDAsIERFX1NPVVJDRSwgV1JBUCwgRElTQUJMRSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWF9LMSwgc3JjX1gpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFlfSzIsIHNyY19ZKSk7CisKKwkJCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsCisJCQkJICBESVNBQkxFKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJIERFX0RFU1RJTkFUSU9OLAorCQkJCQkJCSBYLAorCQkJCQkJCSBkc3RfWCkKKwkJCXwgRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksCisJCQkJCQkgICAgICBkc3RfWSkpOworCisJCQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwKKwkJCQkgICAgeFdpZHRoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICBERV9ESU1FTlNJT04sCisJCQkJCQkJICBZX0VULAorCQkJCQkJCSAgZHN0X2hlaWdodCkpOworCisJCQlkZV9jdHJsID0KKwkJCSAgICBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsCisJCQkJblJPUDIpIHwgblRyYW5zcGFyZW50IHwgRklFTERfU0VUKDAsCisJCQkJCQkJICBERV9DT05UUk9MLAorCQkJCQkJCSAgUk9QX1NFTEVDVCwKKwkJCQkJCQkgIFJPUDIpCisJCQkgICAgfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwKKwkJCQlCSVRCTFQpIHwgKChuRGlyZWN0aW9uID09CisJCQkJCSAgICAxKSA/IEZJRUxEX1NFVCgwLAorCQkJCQkJICAgREVfQ09OVFJPTCwKKwkJCQkJCSAgIERJUkVDVElPTiwKKwkJCQkJCSAgIFJJR0hUX1RPX0xFRlQpCisJCQkJCSAgIDogRklFTERfU0VUKDAsIERFX0NPTlRST0wsCisJCQkJCSAgICAgICBESVJFQ1RJT04sCisJCQkJCSAgICAgICBMRUZUX1RPX1JJR0hUKSkgfAorCQkJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKTsKKworCQkJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsIGRlX2N0cmwpOworCisJCQlzcmNfWCArPSAob3BTaWduICogeFdpZHRoKTsKKwkJCWRzdF9YICs9IChvcFNpZ24gKiB4V2lkdGgpOworCQkJZHN0X3dpZHRoIC09IHhXaWR0aDsKKworCQkJaWYgKGRzdF93aWR0aCA8PSAwKSB7CisJCQkJLyogUk9QMiBvcGVyYXRpb24gaXMgY29tcGxldGUgKi8KKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHhXaWR0aCA+IGRzdF93aWR0aCkKKwkJCQl4V2lkdGggPSBkc3Rfd2lkdGg7CisJCX0KKwl9IGVsc2UgeworCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisJCVNNVENfd3JpdGUyRHJlZyhERV9TT1VSQ0UsCisJCQlGSUVMRF9TRVQoMCwgREVfU09VUkNFLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFhfSzEsIHNyY19YKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFlfSzIsIHNyY19ZKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgZHN0X1gpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBkc3RfWSkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIGRzdF93aWR0aCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBkc3RfaGVpZ2h0KSk7CisKKwkJZGVfY3RybCA9IEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgblJPUDIpIHwKKwkJICAgIG5UcmFuc3BhcmVudCB8CisJCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAorCQkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsIEJJVEJMVCkgfAorCQkgICAgKChuRGlyZWN0aW9uID09IDEpID8gRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwKKwkJCQkJCSAgIFJJR0hUX1RPX0xFRlQpCisJCSAgICAgOiBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLAorCQkJCSBMRUZUX1RPX1JJR0hUKSkgfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwKKwkJCQkJCQkgICAgIFNUQVRVUywgU1RBUlQpOworCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwgZGVfY3RybCk7CisJfQorCisJc210Y19kZV9idXN5ID0gMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcGl4ZWwgZm9ybWF0IHRoYXQgd2lsbCBhcHBseSB0byB0aGUgMkQgRW5naW5lLgorICovCit2b2lkIGRlU2V0UGl4ZWxGb3JtYXQodW5zaWduZWQgbG9uZyBicHApCit7CisJdW5zaWduZWQgbG9uZyBkZV9mb3JtYXQ7CisKKwlkZV9mb3JtYXQgPSBTTVRDX3JlYWQyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCk7CisKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgODoKKwkJZGVfZm9ybWF0ID0KKwkJICAgIEZJRUxEX1NFVChkZV9mb3JtYXQsIERFX1NUUkVUQ0hfRk9STUFULCBQSVhFTF9GT1JNQVQsIDgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgMTY6CisJCWRlX2Zvcm1hdCA9CisJCSAgICBGSUVMRF9TRVQoZGVfZm9ybWF0LCBERV9TVFJFVENIX0ZPUk1BVCwgUElYRUxfRk9STUFULCAxNik7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWRlX2Zvcm1hdCA9CisJCSAgICBGSUVMRF9TRVQoZGVfZm9ybWF0LCBERV9TVFJFVENIX0ZPUk1BVCwgUElYRUxfRk9STUFULCAzMik7CisJCWJyZWFrOworCX0KKworCVNNVENfd3JpdGUyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCwgZGVfZm9ybWF0KTsKK30KKworLyoKKyAqIFN5c3RlbSBtZW1vcnkgdG8gVmlkZW8gbWVtb3J5IG1vbm9jaHJvbWUgZXhwYW5zaW9uLgorICoKKyAqIFNvdXJjZSBpcyBtb25vY2hyb21lIGltYWdlIGluIHN5c3RlbSBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIGV4cGFuZHMgdGhlCisgKiBtb25vY2hyb21lIGRhdGEgdG8gY29sb3IgaW1hZ2UgaW4gdmlkZW8gbWVtb3J5LgorICovCisKK2xvbmcgZGVTeXN0ZW1NZW0yVmlkZW9NZW1Nb25vQmx0KGNvbnN0IGNoYXIgKnBTcmNidWYsCisJCQkJIGxvbmcgc3JjRGVsdGEsCisJCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRCaXQsCisJCQkJIHVuc2lnbmVkIGxvbmcgZEJhc2UsCisJCQkJIHVuc2lnbmVkIGxvbmcgZFBpdGNoLAorCQkJCSB1bnNpZ25lZCBsb25nIGJwcCwKKwkJCQkgdW5zaWduZWQgbG9uZyBkeCwgdW5zaWduZWQgbG9uZyBkeSwKKwkJCQkgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsCisJCQkJIHVuc2lnbmVkIGxvbmcgZkNvbG9yLAorCQkJCSB1bnNpZ25lZCBsb25nIGJDb2xvciwKKwkJCQkgdW5zaWduZWQgbG9uZyByb3AyKSB7CisJdW5zaWduZWQgbG9uZyBieXRlUGVyUGl4ZWw7CisJdW5zaWduZWQgbG9uZyB1bEJ5dGVzUGVyU2NhbjsKKwl1bnNpZ25lZCBsb25nIHVsNEJ5dGVzUGVyU2NhbjsKKwl1bnNpZ25lZCBsb25nIHVsQnl0ZXNSZW1haW47CisJdW5zaWduZWQgbG9uZyBkZV9jdHJsID0gMDsKKwl1bnNpZ25lZCBjaGFyIGFqUmVtYWluWzRdOworCWxvbmcgaSwgajsKKworCWJ5dGVQZXJQaXhlbCA9IGJwcCAvIDg7CisKKwkvKiBKdXN0IG1ha2Ugc3VyZSB0aGUgc3RhcnQgYml0IGlzIHdpdGhpbiBsZWdhbCByYW5nZSAqLworCXN0YXJ0Qml0ICY9IDc7CisKKwl1bEJ5dGVzUGVyU2NhbiA9ICh3aWR0aCArIHN0YXJ0Qml0ICsgNykgLyA4OworCXVsNEJ5dGVzUGVyU2NhbiA9IHVsQnl0ZXNQZXJTY2FuICYgfjM7CisJdWxCeXRlc1JlbWFpbiA9IHVsQnl0ZXNQZXJTY2FuICYgMzsKKworCWlmIChzbXRjX2RlX2J1c3kpCisJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCS8qCisJICogMkQgU291cmNlIEJhc2UuICBVc2UgMCBmb3IgSE9TVCBCbHQuCisJICovCisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1NPVVJDRV9CQVNFLCAwKTsKKworCS8qCisJICogMkQgRGVzdGluYXRpb24gQmFzZS4KKwkgKgorCSAqIEl0IGlzIGFuIGFkZHJlc3Mgb2Zmc2V0ICgxMjggYml0IGFsaWduZWQpIGZyb20gdGhlIGJlZ2lubmluZyBvZgorCSAqIGZyYW1lIGJ1ZmZlci4KKwkgKi8KKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgZEJhc2UpOworCisJaWYgKGRQaXRjaCkgeworCisJCS8qCisJCSAqIFByb2dyYW0gcGl0Y2ggKGRpc3RhbmNlIGJldHdlZW4gdGhlIDFzdCBwb2ludHMgb2YgdHdvCisJCSAqIGFkamFjZW50IGxpbmVzKS4KKwkJICoKKwkJICogTm90ZSB0aGF0IGlucHV0IHBpdGNoIGlzIEJZVEUgdmFsdWUsIGJ1dCB0aGUgMkQgUGl0Y2gKKwkJICogcmVnaXN0ZXIgdXNlcyBwaXhlbCB2YWx1ZXMuIE5lZWQgQnl0ZSB0byBwaXhlbCBjb252ZXJ0aW9uLgorCQkgKi8KKworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkgICAgZFBpdGNoIC8KKwkJCSAgICBieXRlUGVyUGl4ZWwpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQlERV9QSVRDSCwKKwkJCQkJCQlTT1VSQ0UsCisJCQkJCQkJZFBpdGNoIC8KKwkJCQkJCQlieXRlUGVyUGl4ZWwpKTsKKworCQkvKiBTY3JlZW4gV2luZG93IHdpZHRoIGluIFBpeGVscy4KKwkJICoKKwkJICogMkQgZW5naW5lIHVzZXMgdGhpcyB2YWx1ZSB0byBjYWxjdWxhdGUgdGhlIGxpbmVhciBhZGRyZXNzIGluCisJCSAqIGZyYW1lIGJ1ZmZlciBmb3IgYSBnaXZlbiBwb2ludC4KKwkJICovCisKKwkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkgICAgKGRQaXRjaCAvCisJCQkgICAgIGJ5dGVQZXJQaXhlbCkpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgIFNPVVJDRSwKKwkJCQkJCQkgIChkUGl0Y2gKKwkJCQkJCQkgICAvCisJCQkJCQkJICAgYnl0ZVBlclBpeGVsKSkpOworCX0KKwkvKiBOb3RlOiBGb3IgMkQgU291cmNlIGluIEhvc3QgV3JpdGUsIG9ubHkgWF9LMSBmaWVsZCBpcyBuZWVkZWQsIGFuZAorCSAqIFlfSzIgZmllbGQgaXMgbm90IHVzZWQuIEZvciBtb25vIGJpdG1hcCwgdXNlIHN0YXJ0Qml0IGZvciBYX0sxLgorCSAqLworCisJU01UQ193cml0ZTJEcmVnKERFX1NPVVJDRSwKKwkJCUZJRUxEX1NFVCgwLCBERV9TT1VSQ0UsIFdSQVAsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWF9LMSwgc3RhcnRCaXQpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWV9LMiwgMCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgZHgpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBkeSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgd2lkdGgpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgaGVpZ2h0KSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwgZkNvbG9yKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfQkFDS0dST1VORCwgYkNvbG9yKTsKKworCWlmIChicHApCisJCWRlU2V0UGl4ZWxGb3JtYXQoYnBwKTsKKwkvKiBTZXQgdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgZGVzdGluYXRpb24gKi8KKworCWRlX2N0cmwgPSBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIHJvcDIpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsIEhPU1RfV1JJVEUpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIEhPU1QsIE1PTk8pIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpOworCisJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsIGRlX2N0cmwgfCBkZUdldFRyYW5zcGFyZW5jeSgpKTsKKworCS8qIFdyaXRlIE1PTk8gZGF0YSAobGluZSBieSBsaW5lKSB0byAyRCBFbmdpbmUgZGF0YSBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCS8qIEZvciBlYWNoIGxpbmUsIHNlbmQgdGhlIGRhdGEgaW4gY2h1bmtzIG9mIDQgYnl0ZXMgKi8KKwkJZm9yIChqID0gMDsgaiA8ICh1bDRCeXRlc1BlclNjYW4gLyA0KTsgaisrKQorCQkJU01UQ193cml0ZTJEZGF0YXBvcnQoMCwKKwkJCQkJICAgICAqKHVuc2lnbmVkIGxvbmcgKikocFNyY2J1ZiArCisJCQkJCQkJCShqICogNCkpKTsKKworCQlpZiAodWxCeXRlc1JlbWFpbikgeworCQkJbWVtY3B5KGFqUmVtYWluLCBwU3JjYnVmICsgdWw0Qnl0ZXNQZXJTY2FuLAorCQkJICAgICAgIHVsQnl0ZXNSZW1haW4pOworCQkJU01UQ193cml0ZTJEZGF0YXBvcnQoMCwgKih1bnNpZ25lZCBsb25nICopYWpSZW1haW4pOworCQl9CisKKwkJcFNyY2J1ZiArPSBzcmNEZWx0YTsKKwl9CisJc210Y19kZV9idXN5ID0gMTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSB0cmFuc3BhcmVuY3kgc3RhdHVzIGZyb20gREVfQ09OVFJPTCByZWdpc3Rlci4KKyAqIEl0IHJldHVybnMgYSBkb3VibGUgd29yZCB3aXRoIHRoZSB0cmFuc3BhcmVudCBmaWVsZHMgcHJvcGVybHkgc2V0LAorICogd2hpbGUgb3RoZXIgZmllbGRzIGFyZSAwLgorICovCit1bnNpZ25lZCBsb25nIGRlR2V0VHJhbnNwYXJlbmN5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBkZV9jdHJsOworCisJZGVfY3RybCA9IFNNVENfcmVhZDJEcmVnKERFX0NPTlRST0wpOworCisJZGVfY3RybCAmPQorCSAgICBGSUVMRF9NQVNLKERFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENIKSB8CisJICAgIEZJRUxEX01BU0soREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUKSB8CisJICAgIEZJRUxEX01BU0soREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1kpOworCisJcmV0dXJuIGRlX2N0cmw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkMGMzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaApAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIFNpbGljb24gTW90aW9uIFNNNzEyIDJEIGRyYXdpbmcgZW5naW5lIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgorICogQXV0aG9yOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTAkgMAorI2VuZGlmCisKKy8qIEludGVybmFsIG1hY3JvcyAqLworCisjZGVmaW5lIF9GX1NUQVJUKGYpCQkoMCA/IGYpCisjZGVmaW5lIF9GX0VORChmKQkJKDEgPyBmKQorI2RlZmluZSBfRl9TSVpFKGYpCQkoMSArIF9GX0VORChmKSAtIF9GX1NUQVJUKGYpKQorI2RlZmluZSBfRl9NQVNLKGYpCQkoKCgxVUxMIDw8IF9GX1NJWkUoZikpIC0gMSkgPDwgX0ZfU1RBUlQoZikpCisjZGVmaW5lIF9GX05PUk1BTElaRSh2LCBmKQkoKCh2KSAmIF9GX01BU0soZikpID4+IF9GX1NUQVJUKGYpKQorI2RlZmluZSBfRl9ERU5PUk1BTElaRSh2LCBmKQkoKCh2KSA8PCBfRl9TVEFSVChmKSkgJiBfRl9NQVNLKGYpKQorCisvKiBHbG9iYWwgbWFjcm9zICovCisKKyNkZWZpbmUgRklFTERfR0VUKHgsIHJlZywgZmllbGQpIFwKKyggXAorICAgIF9GX05PUk1BTElaRSgoeCksIHJlZyAjIyBfICMjIGZpZWxkKSBcCispCisKKyNkZWZpbmUgRklFTERfU0VUKHgsIHJlZywgZmllbGQsIHZhbHVlKSBcCisoIFwKKyAgICAoeCAmIH5fRl9NQVNLKHJlZyAjIyBfICMjIGZpZWxkKSkgXAorICAgIHwgX0ZfREVOT1JNQUxJWkUocmVnICMjIF8gIyMgZmllbGQgIyMgXyAjIyB2YWx1ZSwgcmVnICMjIF8gIyMgZmllbGQpIFwKKykKKworI2RlZmluZSBGSUVMRF9WQUxVRSh4LCByZWcsIGZpZWxkLCB2YWx1ZSkgXAorKCBcCisgICAgKHggJiB+X0ZfTUFTSyhyZWcgIyMgXyAjIyBmaWVsZCkpIFwKKyAgICB8IF9GX0RFTk9STUFMSVpFKHZhbHVlLCByZWcgIyMgXyAjIyBmaWVsZCkgXAorKQorCisjZGVmaW5lIEZJRUxEX0NMRUFSKHJlZywgZmllbGQpIFwKKyggXAorICAgIH5fRl9NQVNLKHJlZyAjIyBfICMjIGZpZWxkKSBcCispCisKKy8qIEZpZWxkIE1hY3JvcyAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRklFTERfU1RBUlQoZmllbGQpCSgwID8gZmllbGQpCisjZGVmaW5lIEZJRUxEX0VORChmaWVsZCkJKDEgPyBmaWVsZCkKKyNkZWZpbmUgRklFTERfU0laRShmaWVsZCkgXAorCSgxICsgRklFTERfRU5EKGZpZWxkKSAtIEZJRUxEX1NUQVJUKGZpZWxkKSkKKworI2RlZmluZSBGSUVMRF9NQVNLKGZpZWxkKSBcCisJKCgoMSA8PCAoRklFTERfU0laRShmaWVsZCktMSkpIFwKKwl8ICgoMSA8PCAoRklFTERfU0laRShmaWVsZCktMSkpIC0gMSkpIFwKKwk8PCBGSUVMRF9TVEFSVChmaWVsZCkpCisKKyNkZWZpbmUgRklFTERfTk9STUFMSVpFKHJlZywgZmllbGQpIFwKKwkoKChyZWcpICYgRklFTERfTUFTSyhmaWVsZCkpID4+IEZJRUxEX1NUQVJUKGZpZWxkKSkKKworI2RlZmluZSBGSUVMRF9ERU5PUk1BTElaRShmaWVsZCwgdmFsdWUpIFwKKwkoKCh2YWx1ZSkgPDwgRklFTERfU1RBUlQoZmllbGQpKSAmIEZJRUxEX01BU0soZmllbGQpKQorCisjZGVmaW5lIEZJRUxEX0lOSVQocmVnLCBmaWVsZCwgdmFsdWUpIFwKKwlGSUVMRF9ERU5PUk1BTElaRShyZWcgIyMgXyAjIyBmaWVsZCwgXAorCQlyZWcgIyMgXyAjIyBmaWVsZCAjIyBfICMjIHZhbHVlKQorCisjZGVmaW5lIEZJRUxEX0lOSVRfVkFMKHJlZywgZmllbGQsIHZhbHVlKSBcCisJKEZJRUxEX0RFTk9STUFMSVpFKHJlZyAjIyBfICMjIGZpZWxkLCB2YWx1ZSkpCisKKyNkZWZpbmUgRklFTERfVkFMX1NFVCh4LCByLCBmLCB2KSAoeyBcCisJeCA9ICh4ICYgfkZJRUxEX01BU0sociAjIyBfICMjIGYpKSBcCisJfCBGSUVMRF9ERU5PUk1BTElaRShyICMjIF8gIyMgZiwgciAjIyBfICMjIGYgIyMgXyAjIyB2KSBcCit9KQorCisjZGVmaW5lIFJHQihyLCBnLCBiKQkoKHVuc2lnbmVkIGxvbmcpKCgocikgPDwgMTYpIHwgKChnKSA8PCA4KSB8IChiKSkpCisKKy8qIFRyYW5zcGFyZW50IGluZm8gZGVmaW5pdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbWF0Y2g7CS8qIE1hdGNoaW5nIHBpeGVsIGlzIE9QQVFVRS9UUkFOU1BBUkVOVCAqLworCXVuc2lnbmVkIGxvbmcgc2VsZWN0OwkvKiBUcmFuc3BhcmVuY3kgY29udHJvbGxlZCBieSBTUkMvRFNUICovCisJdW5zaWduZWQgbG9uZyBjb250cm9sOwkvKiBFTkFCTEUvRElTQUJMRSB0cmFuc3BhcmVuY3kgKi8KKwl1bnNpZ25lZCBsb25nIGNvbG9yOwkvKiBUcmFuc3BhcmVudCBjb2xvciAqLworfSBUcmFuc3BhcmVudCwgKnBUcmFuc3BhcmVudDsKKworI2RlZmluZSBQSVhFTF9ERVBUSF8xX0JQCTAJLyogMSBiaXQgcGVyIHBpeGVsICovCisjZGVmaW5lIFBJWEVMX0RFUFRIXzhfQlBQCTEJLyogOCBiaXRzIHBlciBwaXhlbCAqLworI2RlZmluZSBQSVhFTF9ERVBUSF8xNl9CUFAJMgkvKiAxNiBiaXRzIHBlciBwaXhlbCAqLworI2RlZmluZSBQSVhFTF9ERVBUSF8zMl9CUFAJMwkvKiAzMiBiaXRzIHBlciBwaXhlbCAqLworI2RlZmluZSBQSVhFTF9ERVBUSF9ZVVY0MjIJOAkvKiAxNiBiaXRzIHBlciBwaXhlbCBZVVY0MjIgKi8KKyNkZWZpbmUgUElYRUxfREVQVEhfWVVWNDIwCTkJLyogMTYgYml0cyBwZXIgcGl4ZWwgWVVWNDIwICovCisKKyNkZWZpbmUgUEFUVEVSTl9XSURUSAkJOAorI2RlZmluZSBQQVRURVJOX0hFSUdIVAkJOAorCisjZGVmaW5lCVRPUF9UT19CT1RUT00JCTAKKyNkZWZpbmUJQk9UVE9NX1RPX1RPUAkJMQorI2RlZmluZSBSSUdIVF9UT19MRUZUCQlCT1RUT01fVE9fVE9QCisjZGVmaW5lIExFRlRfVE9fUklHSFQJCVRPUF9UT19CT1RUT00KKworLyogQ29uc3RhbnRzIHVzZWQgaW4gVHJhbnNwYXJlbnQgc3RydWN0dXJlICovCisjZGVmaW5lIE1BVENIX09QQVFVRQkJMHgwMDAwMDAwMAorI2RlZmluZSBNQVRDSF9UUkFOU1BBUkVOVAkweDAwMDAwNDAwCisjZGVmaW5lIFNPVVJDRQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgREVTVElOQVRJT04JCTB4MDAwMDAyMDAKKworLyogMkQgcmVnaXN0ZXJzLiAqLworCisjZGVmaW5lCURFX1NPVVJDRQkJCTB4MDAwMDAwCisjZGVmaW5lCURFX1NPVVJDRV9XUkFQCQkJMzEgOiAzMQorI2RlZmluZQlERV9TT1VSQ0VfV1JBUF9ESVNBQkxFCQkwCisjZGVmaW5lCURFX1NPVVJDRV9XUkFQX0VOQUJMRQkJMQorI2RlZmluZQlERV9TT1VSQ0VfWF9LMQkJCTI5IDogMTYKKyNkZWZpbmUJREVfU09VUkNFX1lfSzIJCQkxNSA6IDAKKworI2RlZmluZQlERV9ERVNUSU5BVElPTgkJCTB4MDAwMDA0CisjZGVmaW5lCURFX0RFU1RJTkFUSU9OX1dSQVAJCTMxIDogMzEKKyNkZWZpbmUJREVfREVTVElOQVRJT05fV1JBUF9ESVNBQkxFCTAKKyNkZWZpbmUJREVfREVTVElOQVRJT05fV1JBUF9FTkFCTEUJMQorI2RlZmluZQlERV9ERVNUSU5BVElPTl9YCQkyOCA6IDE2CisjZGVmaW5lCURFX0RFU1RJTkFUSU9OX1kJCTE1IDogMAorCisjZGVmaW5lCURFX0RJTUVOU0lPTgkJCTB4MDAwMDA4CisjZGVmaW5lCURFX0RJTUVOU0lPTl9YCQkJMjggOiAxNgorI2RlZmluZQlERV9ESU1FTlNJT05fWV9FVAkJMTUgOiAwCisKKyNkZWZpbmUJREVfQ09OVFJPTAkJCTB4MDAwMDBDCisjZGVmaW5lCURFX0NPTlRST0xfU1RBVFVTCQkzMSA6IDMxCisjZGVmaW5lCURFX0NPTlRST0xfU1RBVFVTX1NUT1AJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEFUVVNfU1RBUlQJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9QQVRURVJOCQkzMCA6IDMwCisjZGVmaW5lCURFX0NPTlRST0xfUEFUVEVSTl9NT05PCQkwCisjZGVmaW5lCURFX0NPTlRST0xfUEFUVEVSTl9DT0xPUgkxCisjZGVmaW5lCURFX0NPTlRST0xfVVBEQVRFX0RFU1RJTkFUSU9OX1gJCTI5IDogMjkKKyNkZWZpbmUJREVfQ09OVFJPTF9VUERBVEVfREVTVElOQVRJT05fWF9ESVNBQkxFCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9VUERBVEVfREVTVElOQVRJT05fWF9FTkFCTEUJMQorI2RlZmluZQlERV9DT05UUk9MX1FVSUNLX1NUQVJUCQkJMjggOiAyOAorI2RlZmluZQlERV9DT05UUk9MX1FVSUNLX1NUQVJUX0RJU0FCTEUJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9RVUlDS19TVEFSVF9FTkFCTEUJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9ESVJFQ1RJT04JCQkyNyA6IDI3CisjZGVmaW5lCURFX0NPTlRST0xfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQJMAorI2RlZmluZQlERV9DT05UUk9MX0RJUkVDVElPTl9SSUdIVF9UT19MRUZUCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9NQUpPUgkJCTI2IDogMjYKKyNkZWZpbmUJREVfQ09OVFJPTF9NQUpPUl9YCQkJMAorI2RlZmluZQlERV9DT05UUk9MX01BSk9SX1kJCQkxCisjZGVmaW5lCURFX0NPTlRST0xfU1RFUF9YCQkJMjUgOiAyNQorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWF9QT1NJVElWRQkJMQorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWF9ORUdBVElWRQkJMAorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWQkJCTI0IDogMjQKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1lfUE9TSVRJVkUJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1lfTkVHQVRJVkUJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9TVFJFVENICQkJMjMgOiAyMworI2RlZmluZQlERV9DT05UUk9MX1NUUkVUQ0hfRElTQUJMRQkJMAorI2RlZmluZQlERV9DT05UUk9MX1NUUkVUQ0hfRU5BQkxFCQkxCisjZGVmaW5lCURFX0NPTlRST0xfSE9TVAkJCQkyMiA6IDIyCisjZGVmaW5lCURFX0NPTlRST0xfSE9TVF9DT0xPUgkJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9IT1NUX01PTk8JCQkxCisjZGVmaW5lCURFX0NPTlRST0xfTEFTVF9QSVhFTAkJCTIxIDogMjEKKyNkZWZpbmUJREVfQ09OVFJPTF9MQVNUX1BJWEVMX09GRgkJMAorI2RlZmluZQlERV9DT05UUk9MX0xBU1RfUElYRUxfT04JCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5ECQkJMjAgOiAxNgorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfQklUQkxUCQkwCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9SRUNUQU5HTEVfRklMTAkxCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9ERV9USUxFCQkyCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9UUkFQRVpPSURfRklMTAkzCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9BTFBIQV9CTEVORAkJNAorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfUkxFX1NUUklQCQk1CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9TSE9SVF9TVFJPS0UJCTYKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0xJTkVfRFJBVwkJNworI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfSE9TVF9XUklURQkJOAorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfSE9TVF9SRUFECQk5CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9IT1NUX1dSSVRFX0JPVFRPTV9VUAkxMAorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfUk9UQVRFCQkxMQorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfRk9OVAkJCTEyCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9URVhUVVJFX0xPQUQJCTE1CisjZGVmaW5lCURFX0NPTlRST0xfUk9QX1NFTEVDVAkJCTE1IDogMTUKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1BfU0VMRUNUX1JPUDMJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1BfU0VMRUNUX1JPUDIJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1AyX1NPVVJDRQkJCTE0IDogMTQKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1AyX1NPVVJDRV9CSVRNQVAJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1AyX1NPVVJDRV9QQVRURVJOCQkxCisjZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBCQkJMTMgOiAxMgorI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQV9OT1RfUEFDS0VECQkwCisjZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBXzhfUEFDS0VECQkxCisjZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBXzE2X1BBQ0tFRAkJMgorI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQV8zMl9QQUNLRUQJCTMKKyNkZWZpbmUJREVfQ09OVFJPTF9SRVBFQVRfUk9UQVRFCQkxMSA6IDExCisjZGVmaW5lCURFX0NPTlRST0xfUkVQRUFUX1JPVEFURV9ESVNBQkxFCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9SRVBFQVRfUk9UQVRFX0VOQUJMRQkJMQorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9NQVRDSAkJMTAgOiAxMAorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9NQVRDSF9PUEFRVUUJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0hfVFJBTlNQQVJFTlQJMQorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9TRUxFQ1QJCQk5IDogOQorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9TRUxFQ1RfU09VUkNFCQkwCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVF9ERVNUSU5BVElPTgkxCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZCQkJCTggOiA4CisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX0RJU0FCTEUJCQkwCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX0VOQUJMRQkJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1AJCQkJCTcgOiAwCisKKy8qIFBzZXVkbyBmaWVsZHMuICovCisKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSCQkJMjcgOiAyNAorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMjI1CQkJMAorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMTM1CQkJMQorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMzE1CQkJMgorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfNDUJCQkzCisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8yNzAJCQk0CisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl85MAkJCTUKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzE4MAkJCTgKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzAJCQkxMAorI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OCQkJCTI1IDogMjQKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTl8wCQkJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTl8yNzAJCQkJMQorI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OXzkwCQkJCTIKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTl8xODAJCQkJMworCisjZGVmaW5lCURFX1BJVENICQkJCQkweDAwMDAxMAorI2RlZmluZQlERV9QSVRDSF9ERVNUSU5BVElPTgkJCQkyOCA6IDE2CisjZGVmaW5lCURFX1BJVENIX1NPVVJDRQkJCQkJMTIgOiAwCisKKyNkZWZpbmUJREVfRk9SRUdST1VORAkJCQkJMHgwMDAwMTQKKyNkZWZpbmUJREVfRk9SRUdST1VORF9DT0xPUgkJCQkzMSA6IDAKKworI2RlZmluZQlERV9CQUNLR1JPVU5ECQkJCQkweDAwMDAxOAorI2RlZmluZQlERV9CQUNLR1JPVU5EX0NPTE9SCQkJCTMxIDogMAorCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUCQkJCTB4MDAwMDFDCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWFkJCQkzMCA6IDMwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWFlfTk9STUFMCQkwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWFlfT1ZFUldSSVRFCQkxCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWQkJCTI5IDogMjcKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9YCQkJMjUgOiAyMworI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVQJCQkyMSA6IDIwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVF84CQkwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVF8xNgkJMQorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfMjQJCTMKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUXzMyCQkyCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX0FERFJFU1NJTkcJCQkxOSA6IDE2CisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX0FERFJFU1NJTkdfWFkJCQkwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX0FERFJFU1NJTkdfTElORUFSCQkxNQorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9TT1VSQ0VfSEVJR0hUCQkJMTEgOiAwCisKKyNkZWZpbmUJREVfQ09MT1JfQ09NUEFSRQkJCQkweDAwMDAyMAorI2RlZmluZQlERV9DT0xPUl9DT01QQVJFX0NPTE9SCQkJCTIzIDogMAorCisjZGVmaW5lCURFX0NPTE9SX0NPTVBBUkVfTUFTSwkJCQkweDAwMDAyNAorI2RlZmluZQlERV9DT0xPUl9DT01QQVJFX01BU0tfTUFTS1MJCQkyMyA6IDAKKworI2RlZmluZQlERV9NQVNLUwkJCQkJMHgwMDAwMjgKKyNkZWZpbmUJREVfTUFTS1NfQllURV9NQVNLCQkJCTMxIDogMTYKKyNkZWZpbmUJREVfTUFTS1NfQklUX01BU0sJCQkJMTUgOiAwCisKKyNkZWZpbmUJREVfQ0xJUF9UTAkJCQkJMHgwMDAwMkMKKyNkZWZpbmUJREVfQ0xJUF9UTF9UT1AJCQkJCTMxIDogMTYKKyNkZWZpbmUJREVfQ0xJUF9UTF9TVEFUVVMJCQkJMTMgOiAxMworI2RlZmluZQlERV9DTElQX1RMX1NUQVRVU19ESVNBQkxFCQkJMAorI2RlZmluZQlERV9DTElQX1RMX1NUQVRVU19FTkFCTEUJCQkxCisjZGVmaW5lCURFX0NMSVBfVExfSU5ISUJJVAkJCQkxMiA6IDEyCisjZGVmaW5lCURFX0NMSVBfVExfSU5ISUJJVF9PVVRTSURFCQkJMAorI2RlZmluZQlERV9DTElQX1RMX0lOSElCSVRfSU5TSURFCQkJMQorI2RlZmluZQlERV9DTElQX1RMX0xFRlQJCQkJCTExIDogMAorCisjZGVmaW5lCURFX0NMSVBfQlIJCQkJCTB4MDAwMDMwCisjZGVmaW5lCURFX0NMSVBfQlJfQk9UVE9NCQkJCTMxIDogMTYKKyNkZWZpbmUJREVfQ0xJUF9CUl9SSUdIVAkJCQkxMiA6IDAKKworI2RlZmluZQlERV9NT05PX1BBVFRFUk5fTE9XCQkJCTB4MDAwMDM0CisjZGVmaW5lCURFX01PTk9fUEFUVEVSTl9MT1dfUEFUVEVSTgkJCTMxIDogMAorCisjZGVmaW5lCURFX01PTk9fUEFUVEVSTl9ISUdICQkJCTB4MDAwMDM4CisjZGVmaW5lCURFX01PTk9fUEFUVEVSTl9ISUdIX1BBVFRFUk4JCQkzMSA6IDAKKworI2RlZmluZQlERV9XSU5ET1dfV0lEVEgJCQkJCTB4MDAwMDNDCisjZGVmaW5lCURFX1dJTkRPV19XSURUSF9ERVNUSU5BVElPTgkJCTI4IDogMTYKKyNkZWZpbmUJREVfV0lORE9XX1dJRFRIX1NPVVJDRQkJCQkxMiA6IDAKKworI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0UJCQkJMHgwMDAwNDAKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0VYVAkJCTI3IDogMjcKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0VYVF9MT0NBTAkJCTAKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0VYVF9FWFRFUk5BTAkJMQorI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfQ1MJCQkyNiA6IDI2CisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9DU18wCQkJMAorI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfQ1NfMQkJCTEKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0FERFJFU1MJCQkyNSA6IDAKKworI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRQkJCTB4MDAwMDQ0CisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0VYVAkJCTI3IDogMjcKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfRVhUX0xPQ0FMCQkwCisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0VYVF9FWFRFUk5BTAkJMQorI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9DUwkJCTI2IDogMjYKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfQ1NfMAkJCTAKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfQ1NfMQkJCTEKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfQUREUkVTUwkJMjUgOiAwCisKKyNkZWZpbmUJREVfQUxQSEEJCQkJCTB4MDAwMDQ4CisjZGVmaW5lCURFX0FMUEhBX1ZBTFVFCQkJCQk3IDogMAorCisjZGVmaW5lCURFX1dSQVAJCQkJCQkweDAwMDA0QworI2RlZmluZQlERV9XUkFQX1gJCQkJCTMxIDogMTYKKyNkZWZpbmUJREVfV1JBUF9ZCQkJCQkxNSA6IDAKKworI2RlZmluZQlERV9TVEFUVVMJCQkJCTB4MDAwMDUwCisjZGVmaW5lCURFX1NUQVRVU19DU0MJCQkJCTEgOiAxCisjZGVmaW5lCURFX1NUQVRVU19DU0NfQ0xFQVIJCQkJMAorI2RlZmluZQlERV9TVEFUVVNfQ1NDX05PVF9BQ1RJVkUJCQkwCisjZGVmaW5lCURFX1NUQVRVU19DU0NfQUNUSVZFCQkJCTEKKyNkZWZpbmUJREVfU1RBVFVTXzJECQkJCQkwIDogMAorI2RlZmluZQlERV9TVEFUVVNfMkRfQ0xFQVIJCQkJMAorI2RlZmluZQlERV9TVEFUVVNfMkRfTk9UX0FDVElWRQkJCQkwCisjZGVmaW5lCURFX1NUQVRVU18yRF9BQ1RJVkUJCQkJMQorCisvKiBDb2xvciBTcGFjZSBDb252ZXJzaW9uIHJlZ2lzdGVycy4gKi8KKworI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRQkJCQkweDAwMDBDOAorI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9FWFQJCQkJMjcgOiAyNworI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9FWFRfTE9DQUwJCQkwCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0VYVF9FWFRFUk5BTAkJCTEKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfQ1MJCQkJMjYgOiAyNgorI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9DU18wCQkJCTAKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfQ1NfMQkJCQkxCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0FERFJFU1MJCQkyNSA6IDAKKworI2RlZmluZQlDU0NfQ09OU1RBTlRTCQkJCQkweDAwMDBDQworI2RlZmluZQlDU0NfQ09OU1RBTlRTX1kJCQkJCTMxIDogMjQKKyNkZWZpbmUJQ1NDX0NPTlNUQU5UU19SCQkJCQkyMyA6IDE2CisjZGVmaW5lCUNTQ19DT05TVEFOVFNfRwkJCQkJMTUgOiA4CisjZGVmaW5lCUNTQ19DT05TVEFOVFNfQgkJCQkJNyA6IDAKKworI2RlZmluZQlDU0NfWV9TT1VSQ0VfWAkJCQkJMHgwMDAwRDAKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX1hfSU5URUdFUgkJCQkyNiA6IDE2CisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9YX0ZSQUNUSU9OCQkJCTE1IDogMworCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9ZCQkJCQkweDAwMDBENAorI2RlZmluZQlDU0NfWV9TT1VSQ0VfWV9JTlRFR0VSCQkJCTI3IDogMTYKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX1lfRlJBQ1RJT04JCQkJMTUgOiAzCisKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0UJCQkJMHgwMDAwRDgKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfRVhUCQkJCTI3IDogMjcKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfRVhUX0xPQ0FMCQkJMAorI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9FWFRfRVhURVJOQUwJCQkxCisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0NTCQkJCTI2IDogMjYKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfQ1NfMAkJCQkwCisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0NTXzEJCQkJMQorI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9BRERSRVNTCQkJMjUgOiAwCisKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0UJCQkJMHgwMDAwREMKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfRVhUCQkJCTI3IDogMjcKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfRVhUX0xPQ0FMCQkJMAorI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9FWFRfRVhURVJOQUwJCQkxCisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0NTCQkJCTI2IDogMjYKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfQ1NfMAkJCQkwCisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0NTXzEJCQkJMQorI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9BRERSRVNTCQkJMjUgOiAwCisKKyNkZWZpbmUJQ1NDX1NPVVJDRV9ESU1FTlNJT04JCQkJMHgwMDAwRTAKKyNkZWZpbmUJQ1NDX1NPVVJDRV9ESU1FTlNJT05fWAkJCQkzMSA6IDE2CisjZGVmaW5lCUNTQ19TT1VSQ0VfRElNRU5TSU9OX1kJCQkJMTUgOiAwCisKKyNkZWZpbmUJQ1NDX1NPVVJDRV9QSVRDSAkJCQkweDAwMDBFNAorI2RlZmluZQlDU0NfU09VUkNFX1BJVENIX1kJCQkJMzEgOiAxNgorI2RlZmluZQlDU0NfU09VUkNFX1BJVENIX1VWCQkJCTE1IDogMAorCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTgkJCQkJMHgwMDAwRTgKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1dSQVAJCQkJMzEgOiAzMQorI2RlZmluZQlDU0NfREVTVElOQVRJT05fV1JBUF9ESVNBQkxFCQkJMAorI2RlZmluZQlDU0NfREVTVElOQVRJT05fV1JBUF9FTkFCTEUJCQkxCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9YCQkJCTI3IDogMTYKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1kJCQkJMTEgOiAwCisKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0RJTUVOU0lPTgkJCTB4MDAwMEVDCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9ESU1FTlNJT05fWAkJCTMxIDogMTYKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0RJTUVOU0lPTl9ZCQkJMTUgOiAwCisKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1BJVENICQkJCTB4MDAwMEYwCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9QSVRDSF9YCQkJCTMxIDogMTYKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1BJVENIX1kJCQkJMTUgOiAwCisKKyNkZWZpbmUJQ1NDX1NDQUxFX0ZBQ1RPUgkJCQkweDAwMDBGNAorI2RlZmluZQlDU0NfU0NBTEVfRkFDVE9SX0hPUklaT05UQUwJCQkzMSA6IDE2CisjZGVmaW5lCUNTQ19TQ0FMRV9GQUNUT1JfVkVSVElDQUwJCQkxNSA6IDAKKworI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRQkJCQkweDAwMDBGOAorI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9FWFQJCQkyNyA6IDI3CisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0VYVF9MT0NBTAkJCTAKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfRVhUX0VYVEVSTkFMCQkxCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0NTCQkJCTI2IDogMjYKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfQ1NfMAkJCTAKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfQ1NfMQkJCTEKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfQUREUkVTUwkJCTI1IDogMAorCisjZGVmaW5lCUNTQ19DT05UUk9MCQkJCQkweDAwMDBGQworI2RlZmluZQlDU0NfQ09OVFJPTF9TVEFUVVMJCQkJMzEgOiAzMQorI2RlZmluZQlDU0NfQ09OVFJPTF9TVEFUVVNfU1RPUAkJCQkwCisjZGVmaW5lCUNTQ19DT05UUk9MX1NUQVRVU19TVEFSVAkJCTEKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVAkJCTMwIDogMjgKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9ZVVY0MjIJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9ZVVY0MjBJCQkxCisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfWVVWNDIwCQkyCisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfWVZVOQkJCTMKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9JWVUxCQkJNAorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX0lZVTIJCQk1CisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfUkdCNTY1CQk2CisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfUkdCODg4OAkJNworI2RlZmluZQlDU0NfQ09OVFJPTF9ERVNUSU5BVElPTl9GT1JNQVQJCQkyNyA6IDI2CisjZGVmaW5lCUNTQ19DT05UUk9MX0RFU1RJTkFUSU9OX0ZPUk1BVF9SR0I1NjUJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfREVTVElOQVRJT05fRk9STUFUX1JHQjg4ODgJCTEKKyNkZWZpbmUJQ1NDX0NPTlRST0xfSE9SSVpPTlRBTF9GSUxURVIJCQkyNSA6IDI1CisjZGVmaW5lCUNTQ19DT05UUk9MX0hPUklaT05UQUxfRklMVEVSX0RJU0FCTEUJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfSE9SSVpPTlRBTF9GSUxURVJfRU5BQkxFCQkxCisjZGVmaW5lCUNTQ19DT05UUk9MX1ZFUlRJQ0FMX0ZJTFRFUgkJCTI0IDogMjQKKyNkZWZpbmUJQ1NDX0NPTlRST0xfVkVSVElDQUxfRklMVEVSX0RJU0FCTEUJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfVkVSVElDQUxfRklMVEVSX0VOQUJMRQkJMQorI2RlZmluZQlDU0NfQ09OVFJPTF9CWVRFX09SREVSCQkJCTIzIDogMjMKKyNkZWZpbmUJQ1NDX0NPTlRST0xfQllURV9PUkRFUl9ZVVlWCQkJMAorI2RlZmluZQlDU0NfQ09OVFJPTF9CWVRFX09SREVSX1VZVlkJCQkxCisKKyNkZWZpbmUJREVfREFUQV9QT1JUXzUwMQkJCQkweDExMDAwMAorI2RlZmluZQlERV9EQVRBX1BPUlRfNzEyCQkJCTB4NDAwMDAwCisjZGVmaW5lCURFX0RBVEFfUE9SVF83MjIJCQkJMHg2MDAwCisKKy8qIHBvaW50IHRvIHZpcnR1YWwgTWVtb3J5IE1hcCBJTyBzdGFydGluZyBhZGRyZXNzICovCitleHRlcm4gY2hhciAqc210Y19SZWdCYXNlQWRkcmVzczsKKy8qIHBvaW50IHRvIHZpcnR1YWwgdmlkZW8gbWVtb3J5IHN0YXJ0aW5nIGFkZHJlc3MgKi8KK2V4dGVybiBjaGFyICpzbXRjX1ZSQU1CYXNlQWRkcmVzczsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNtdGNfZGVfYnVzeTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtUmVhZDMyKHVuc2lnbmVkIGxvbmcgbk9mZnNldCk7CitleHRlcm4gdm9pZCBtZW1Xcml0ZTMyKHVuc2lnbmVkIGxvbmcgbk9mZnNldCwgdW5zaWduZWQgbG9uZyBuRGF0YSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBTTVRDX3JlYWQyRHJlZyh1bnNpZ25lZCBsb25nIG5PZmZzZXQpOworCisvKiAyRCBmdW5jdGlvbnMgKi8KK2V4dGVybiB2b2lkIGRlSW5pdCh1bnNpZ25lZCBpbnQgbk1vZGVXaWR0aCwgdW5zaWduZWQgaW50IG5Nb2RlSGVpZ2h0LAorCQkgICB1bnNpZ25lZCBpbnQgYnBwKTsKKworZXh0ZXJuIHZvaWQgZGVXYWl0Rm9yTm90QnVzeSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZGVWZXJ0aWNhbExpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwl1bnNpZ25lZCBsb25nIG5YLAorCXVuc2lnbmVkIGxvbmcgblksCisJdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LAorCXVuc2lnbmVkIGxvbmcgbkNvbG9yKTsKKworZXh0ZXJuIHZvaWQgZGVIb3Jpem9udGFsTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgblgsCisJdW5zaWduZWQgbG9uZyBuWSwKKwl1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKKwl1bnNpZ25lZCBsb25nIG5Db2xvcik7CisKK2V4dGVybiB2b2lkIGRlTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgblgxLAorCXVuc2lnbmVkIGxvbmcgblkxLAorCXVuc2lnbmVkIGxvbmcgblgyLAorCXVuc2lnbmVkIGxvbmcgblkyLAorCXVuc2lnbmVkIGxvbmcgbkNvbG9yKTsKKworZXh0ZXJuIHZvaWQgZGVGaWxsUmVjdCh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgZHN0X1gsCisJdW5zaWduZWQgbG9uZyBkc3RfWSwKKwl1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKKwl1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsCisJdW5zaWduZWQgbG9uZyBuQ29sb3IpOworCitleHRlcm4gdm9pZCBkZVJvdGF0ZVBhdHRlcm4odW5zaWduZWQgY2hhciAqcGF0dGVybl9kc3RhZGRyLAorCXVuc2lnbmVkIGxvbmcgcGF0dGVybl9zcmNfYWRkciwKKwl1bnNpZ25lZCBsb25nIHBhdHRlcm5fQlBQLAorCXVuc2lnbmVkIGxvbmcgcGF0dGVybl9zdHJpZGUsCisJaW50CXBhdHRlcm5YLAorCWludAlwYXR0ZXJuWSk7CisKK2V4dGVybiB2b2lkIGRlQ29weSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgZHN0X0JQUCwKKwl1bnNpZ25lZCBsb25nIGRzdF9YLAorCXVuc2lnbmVkIGxvbmcgZHN0X1ksCisJdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCisJdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LAorCXVuc2lnbmVkIGxvbmcgc3JjX2Jhc2UsCisJdW5zaWduZWQgbG9uZyBzcmNfcGl0Y2gsCisJdW5zaWduZWQgbG9uZyBzcmNfWCwKKwl1bnNpZ25lZCBsb25nIHNyY19ZLAorCXBUcmFuc3BhcmVudAlwVHJhbnNwLAorCXVuc2lnbmVkIGNoYXIgblJPUDIpOworCisvKgorICogU3lzdGVtIG1lbW9yeSB0byBWaWRlbyBtZW1vcnkgbW9ub2Nocm9tZSBleHBhbnNpb24uCisgKgorICogU291cmNlIGlzIG1vbm9jaHJvbWUgaW1hZ2UgaW4gc3lzdGVtIG1lbW9yeS4gIFRoaXMgZnVuY3Rpb24gZXhwYW5kcyB0aGUKKyAqIG1vbm9jaHJvbWUgZGF0YSB0byBjb2xvciBpbWFnZSBpbiB2aWRlbyBtZW1vcnkuCisgKgorICogQHBTcmNidWY6IHBvaW50ZXIgdG8gc3RhcnQgb2Ygc291cmNlIGJ1ZmZlciBpbiBzeXN0ZW0gbWVtb3J5CisgKiBAc3JjRGVsdGE6IFBpdGNoIHZhbHVlIChpbiBieXRlcykgb2YgdGhlIHNvdXJjZSBidWZmZXIsICtpdmUgbWVhbnMgdG9wCisgKiAJCWRvd24gYW5kIC1pdmUgbWVhbiBidXR0b24gdXAKKyAqIEBzdGFydEJpdDogTW9ubyBkYXRhIGNhbiBzdGFydCBhdCBhbnkgYml0IGluIGEgYnl0ZSwgdGhpcyB2YWx1ZSBzaG91bGQKKyAqIAkJYmUgMCB0byA3CisgKiBAZEJhc2U6IEFkZHJlc3Mgb2YgZGVzdGluYXRpb24gOiAgb2Zmc2V0IGluIGZyYW1lIGJ1ZmZlcgorICogQGRQaXRjaDogUGl0Y2ggdmFsdWUgb2YgZGVzdGluYXRpb24gc3VyZmFjZSBpbiBCWVRFCisgKiBAYnBwOiBDb2xvciBkZXB0aCBvZiBkZXN0aW5hdGlvbiBzdXJmYWNlCisgKiBAZHgsIGR5OiBTdGFydGluZyBjb29yZGluYXRlIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UKKyAqIEB3aWR0aCwgaGVpZ2h0OiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHJlY3RhbmdlIGluIHBpeGVsIHZhbHVlCisgKiBAZkNvbG9yLGJDb2xvcjogRm9yZWdyb3VuZCwgQmFja2dyb3VuZCBjb2xvciAoY29ycmVzcG9uZGluZyB0byBhIDEsIDAgaW4KKyAqIAl0aGUgbW9ub2Nocm9tZSBkYXRhKQorICogQHJvcDI6IFJPUCB2YWx1ZQorICovCisKK2V4dGVybiBsb25nIGRlU3lzdGVtTWVtMlZpZGVvTWVtTW9ub0JsdCgKKwljb25zdCBjaGFyICpwU3JjYnVmLAorCWxvbmcgc3JjRGVsdGEsCisJdW5zaWduZWQgbG9uZyBzdGFydEJpdCwKKwl1bnNpZ25lZCBsb25nIGRCYXNlLAorCXVuc2lnbmVkIGxvbmcgZFBpdGNoLAorCXVuc2lnbmVkIGxvbmcgYnBwLAorCXVuc2lnbmVkIGxvbmcgZHgsIHVuc2lnbmVkIGxvbmcgZHksCisJdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsCisJdW5zaWduZWQgbG9uZyBmQ29sb3IsCisJdW5zaWduZWQgbG9uZyBiQ29sb3IsCisJdW5zaWduZWQgbG9uZyByb3AyKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGVHZXRUcmFuc3BhcmVuY3kodm9pZCk7CitleHRlcm4gdm9pZCBkZVNldFBpeGVsRm9ybWF0KHVuc2lnbmVkIGxvbmcgYnBwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjFkYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC0wLDAgKzEsMTI1MyBAQAorLyoKKyAqIFNpbGljb24gTW90aW9uIFNNN1hYIGZyYW1lIGJ1ZmZlciBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgorICogQXV0aG9yczogR2UgV2FuZywgZ2V3YW5nQHNpbGljb25tb3Rpb24uY29tCisgKiAJICAgIEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiBWZXJzaW9uIDAuMTAuMjYxOTIuMjEuMDEKKyAqIAktIEFkZCBQb3dlclBDL0JpZyBlbmRpYW4gc3VwcG9ydAorICogCS0gQWRkIDJEIHN1cHBvcnQgZm9yIEx5bngKKyAqIAktIFZlcmlmaWVkIG9uMi42LjE5LjIgIEJveW9kLnlhbmcgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CisgKgorICogVmVyc2lvbiAwLjA5LjI2MjEuMDAuMDEKKyAqIAktIE9ubHkgc3VwcG9ydCBMaW51eCBLZXJuZWwncyB2ZXJzaW9uIDIuNi4yMS4KKyAqCUJveW9kLnlhbmcgIDxib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuPgorICoKKyAqIFZlcnNpb24gMC4wOQorICogCS0gT25seSBzdXBwb3J0IExpbnV4IEtlcm5lbCdzIHZlcnNpb24gMi42LjEyLgorICogCUJveW9kLnlhbmcgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CisgKi8KKworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fS0VSTkVMX18KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CisKKyNpZmRlZiBDT05GSUdfUE0KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2VuZGlmCisKK3N0cnVjdCBzY3JlZW5faW5mbyBzbXRjX3NjcmVlbl9pbmZvOworCisjaW5jbHVkZSAic210Y2ZiLmgiCisjaW5jbHVkZSAic210YzJkLmgiCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBzbWRiZyhmb3JtYXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0ICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgc21kYmcoZm9ybWF0LCBhcmcuLi4pCisjZW5kaWYKKworLyoKKyogUHJpdmF0ZSBzdHJ1Y3R1cmUKKyovCitzdHJ1Y3Qgc210Y2ZiX2luZm8geworCS8qCisJICogVGhlIGZvbGxvd2luZyBpcyBhIHBvaW50ZXIgdG8gYmUgcGFzc2VkIGludG8gdGhlCisJICogZnVuY3Rpb25zIGJlbG93LiAgVGhlIG1vZHVsZXMgb3V0c2lkZSB0aGUgbWFpbgorCSAqIHZveWFnZXIuYyBkcml2ZXIgaGF2ZSBubyBrbm93bGVkZ2UgYXMgdG8gd2hhdAorCSAqIGlzIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4KKwkgKi8KKwlzdHJ1Y3QgZmJfaW5mbyBmYjsKKwlzdHJ1Y3QgZGlzcGxheV9zd2l0Y2ggKmRpc3BzdzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXNpZ25lZCBpbnQgY3VycmNvbjsKKworCXN0cnVjdCB7CisJCXU4IHJlZCwgZ3JlZW4sIGJsdWU7CisJfSBwYWxldHRlW05SX1JHQl07CisKKwl1X2ludCBwYWxldHRlX3NpemU7Cit9OworCitzdHJ1Y3QgcGFyX2luZm8geworCS8qCisJICogSGFyZHdhcmUKKwkgKi8KKwl1MTYgY2hpcElEOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqbV9wTU1JTzsKKwljaGFyIF9faW9tZW0gKm1fcExGQjsKKwljaGFyICptX3BEUFI7CisJY2hhciAqbV9wVlBSOworCWNoYXIgKm1fcENQUjsKKworCXVfaW50IHdpZHRoOworCXVfaW50IGhlaWdodDsKKwl1X2ludCBoejsKKwl1X2xvbmcgQmFzZUFkZHJlc3NJblZSQU07CisJdTggY2hpcFJldklEOworfTsKKworc3RydWN0IHZlc2FfbW9kZV90YWJsZQl7CisJY2hhciBtb2RlX2luZGV4WzZdOworCXUxNiBsZmJfd2lkdGg7CisJdTE2IGxmYl9oZWlnaHQ7CisJdTE2IGxmYl9kZXB0aDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmVzYV9tb2RlX3RhYmxlIHZlc2FfbW9kZVtdID0geworCXsiMHgzMDEiLCA2NDAsICA0ODAsICA4fSwKKwl7IjB4MzAzIiwgODAwLCAgNjAwLCAgOH0sCisJeyIweDMwNSIsIDEwMjQsIDc2OCwJOH0sCisJeyIweDMwNyIsIDEyODAsIDEwMjQsIDh9LAorCisJeyIweDMxMSIsIDY0MCwgIDQ4MCwgIDE2fSwKKwl7IjB4MzE0IiwgODAwLCAgNjAwLCAgMTZ9LAorCXsiMHgzMTciLCAxMDI0LCA3NjgsCTE2fSwKKwl7IjB4MzFBIiwgMTI4MCwgMTAyNCwgMTZ9LAorCisJeyIweDMxMiIsIDY0MCwgIDQ4MCwgIDI0fSwKKwl7IjB4MzE1IiwgODAwLCAgNjAwLCAgMjR9LAorCXsiMHgzMTgiLCAxMDI0LCA3NjgsCTI0fSwKKwl7IjB4MzFCIiwgMTI4MCwgMTAyNCwgMjR9LAorfTsKKworY2hhciBfX2lvbWVtICpzbXRjX1JlZ0Jhc2VBZGRyZXNzOwkvKiBNZW1vcnkgTWFwIElPIHN0YXJ0aW5nIGFkZHJlc3MgKi8KK2NoYXIgX19pb21lbSAqc210Y19WUkFNQmFzZUFkZHJlc3M7CS8qIHZpZGVvIG1lbW9yeSBzdGFydGluZyBhZGRyZXNzICovCisKK2NoYXIgKnNtdGNfMkRCYXNlQWRkcmVzczsJLyogMkQgZW5naW5lIHN0YXJ0aW5nIGFkZHJlc3MgKi8KK2NoYXIgKnNtdGNfMkRkYXRhcG9ydDsJCS8qIDJEIGRhdGEgcG9ydCBvZmZzZXQgKi8KK3Nob3J0IHNtdGNfMkRhY2NlbGVyYXRpb247CisKK3N0YXRpYyB1MzIgY29scmVnWzE3XTsKK3N0YXRpYyBzdHJ1Y3QgcGFyX2luZm8gaHc7CS8qIGhhcmR3YXJlIGluZm9ybWF0aW9uICovCisKK3UxNiBzbXRjX0NoaXBJRHNbXSA9IHsKKwkweDcxMCwKKwkweDcxMiwKKwkweDcyMAorfTsKKworI2RlZmluZSBudW1TTVRDY2hpcElEcyAoc2l6ZW9mKHNtdGNfQ2hpcElEcykgLyBzaXplb2YodTE2KSkKKwordm9pZCBkZVdhaXRGb3JOb3RCdXN5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBpID0gMHgxMDAwMDAwOworCXdoaWxlIChpLS0pIHsKKwkJaWYgKChzbXRjX3NlcXIoMHgxNikgJiAweDE4KSA9PSAweDEwKQorCQkJYnJlYWs7CisJfQorCXNtdGNfZGVfYnVzeSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNtNzEyX3NldF90aW1pbmcoc3RydWN0IHNtdGNmYl9pbmZvICpzZmIsCisJCQkgICAgIHN0cnVjdCBwYXJfaW5mbyAqcHBhcl9pbmZvKQoreworCWludCBpID0gMCwgaiA9IDA7CisJdTMyIG1fblNjcmVlblN0cmlkZTsKKworCXNtZGJnKCJcbnBwYXJfaW5mby0+d2lkdGggPSAlZCBwcGFyX2luZm8tPmhlaWdodCA9ICVkIgorCQkJInNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID0gJWQgcHBhcl9pbmZvLT5oeiA9ICVkXG4iLAorCQkJcHBhcl9pbmZvLT53aWR0aCwgcHBhcl9pbmZvLT5oZWlnaHQsCisJCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCwgcHBhcl9pbmZvLT5oeik7CisKKwlmb3IgKGogPSAwOyBqIDwgbnVtVkdBTW9kZXM7IGorKykgeworCQlpZiAoVkdBTW9kZVtqXS5tbVNpemVYID09IHBwYXJfaW5mby0+d2lkdGggJiYKKwkJICAgIFZHQU1vZGVbal0ubW1TaXplWSA9PSBwcGFyX2luZm8tPmhlaWdodCAmJgorCQkgICAgVkdBTW9kZVtqXS5icHAgPT0gc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgJiYKKwkJICAgIFZHQU1vZGVbal0uaHogPT0gcHBhcl9pbmZvLT5oeikgeworCisJCQlzbWRiZygiXG5WR0FNb2RlW2pdLm1tU2l6ZVggID0gJWQgVkdBTW9kZVtqXS5tbVNpemVZID0iCisJCQkJCSIlZCBWR0FNb2RlW2pdLmJwcCA9ICVkIgorCQkJCQkiVkdBTW9kZVtqXS5oej0lZFxuIiwKKwkJCQkJVkdBTW9kZVtqXS5tbVNpemVYLCBWR0FNb2RlW2pdLm1tU2l6ZVksCisJCQkJCVZHQU1vZGVbal0uYnBwLCBWR0FNb2RlW2pdLmh6KTsKKworCQkJc21kYmcoIlZHQU1vZGUgaW5kZXg9JWRcbiIsIGopOworCisJCQlzbXRjX21taW93YigweDAsIDB4M2M2KTsKKworCQkJc210Y19zZXF3KDAsIDB4MSk7CisKKwkJCXNtdGNfbW1pb3diKFZHQU1vZGVbal0uSW5pdF9NSVNDLCAweDNjMik7CisKKwkJCS8qIGluaXQgU0VRIHJlZ2lzdGVyIFNSMDAgLSBTUjA0ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9TUjAwX1NSMDQ7IGkrKykKKwkJCQlzbXRjX3NlcXcoaSwgVkdBTW9kZVtqXS5Jbml0X1NSMDBfU1IwNFtpXSk7CisKKwkJCS8qIGluaXQgU0VRIHJlZ2lzdGVyIFNSMTAgLSBTUjI0ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9TUjEwX1NSMjQ7IGkrKykKKwkJCQlzbXRjX3NlcXcoaSArIDB4MTAsCisJCQkJCSAgVkdBTW9kZVtqXS5Jbml0X1NSMTBfU1IyNFtpXSk7CisKKwkJCS8qIGluaXQgU0VRIHJlZ2lzdGVyIFNSMzAgLSBTUjc1ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9TUjMwX1NSNzU7IGkrKykKKwkJCQlpZiAoKChpICsgMHgzMCkgIT0gMHg2MikgXAorCQkJCQkmJiAoKGkgKyAweDMwKSAhPSAweDZhKSBcCisJCQkJCSYmICgoaSArIDB4MzApICE9IDB4NmIpKQorCQkJCQlzbXRjX3NlcXcoaSArIDB4MzAsCisJCQkJCQlWR0FNb2RlW2pdLkluaXRfU1IzMF9TUjc1W2ldKTsKKworCQkJLyogaW5pdCBTRVEgcmVnaXN0ZXIgU1I4MCAtIFNSOTMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX1NSODBfU1I5MzsgaSsrKQorCQkJCXNtdGNfc2VxdyhpICsgMHg4MCwKKwkJCQkJICBWR0FNb2RlW2pdLkluaXRfU1I4MF9TUjkzW2ldKTsKKworCQkJLyogaW5pdCBTRVEgcmVnaXN0ZXIgU1JBMCAtIFNSQUYgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX1NSQTBfU1JBRjsgaSsrKQorCQkJCXNtdGNfc2VxdyhpICsgMHhhMCwKKwkJCQkJICBWR0FNb2RlW2pdLkluaXRfU1JBMF9TUkFGW2ldKTsKKworCQkJLyogaW5pdCBHcmFwaGljIHJlZ2lzdGVyIEdSMDAgLSBHUjA4ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9HUjAwX0dSMDg7IGkrKykKKwkJCQlzbXRjX2dycGh3KGksIFZHQU1vZGVbal0uSW5pdF9HUjAwX0dSMDhbaV0pOworCisJCQkvKiBpbml0IEF0dHJpYnV0ZSByZWdpc3RlciBBUjAwIC0gQVIxNCAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfQVIwMF9BUjE0OyBpKyspCisJCQkJc210Y19hdHRydyhpLCBWR0FNb2RlW2pdLkluaXRfQVIwMF9BUjE0W2ldKTsKKworCQkJLyogaW5pdCBDUlRDIHJlZ2lzdGVyIENSMDAgLSBDUjE4ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9DUjAwX0NSMTg7IGkrKykKKwkJCQlzbXRjX2NydGN3KGksIFZHQU1vZGVbal0uSW5pdF9DUjAwX0NSMThbaV0pOworCisJCQkvKiBpbml0IENSVEMgcmVnaXN0ZXIgQ1IzMCAtIENSNEQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX0NSMzBfQ1I0RDsgaSsrKQorCQkJCXNtdGNfY3J0Y3coaSArIDB4MzAsCisJCQkJCSAgIFZHQU1vZGVbal0uSW5pdF9DUjMwX0NSNERbaV0pOworCisJCQkvKiBpbml0IENSVEMgcmVnaXN0ZXIgQ1I5MCAtIENSQTcgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX0NSOTBfQ1JBNzsgaSsrKQorCQkJCXNtdGNfY3J0Y3coaSArIDB4OTAsCisJCQkJCSAgIFZHQU1vZGVbal0uSW5pdF9DUjkwX0NSQTdbaV0pOworCQl9CisJfQorCXNtdGNfbW1pb3diKDB4NjcsIDB4M2MyKTsKKworCS8qIHNldCBWUFIgcmVnaXN0ZXJzICovCisJd3JpdGVsKDB4MCwgcHBhcl9pbmZvLT5tX3BWUFIgKyAweDBDKTsKKwl3cml0ZWwoMHgwLCBwcGFyX2luZm8tPm1fcFZQUiArIDB4NDApOworCisJLyogc2V0IGRhdGEgd2lkdGggKi8KKwltX25TY3JlZW5TdHJpZGUgPQorCQkocHBhcl9pbmZvLT53aWR0aCAqIHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKSAvIDY0OworCXN3aXRjaCAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCXdyaXRlbCgweDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJd3JpdGVsKDB4MDAwMjAwMDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwKTsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJd3JpdGVsKDB4MDAwNDAwMDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJd3JpdGVsKDB4MDAwMzAwMDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwKTsKKwkJYnJlYWs7CisJfQorCXdyaXRlbCgodTMyKSAoKChtX25TY3JlZW5TdHJpZGUgKyAyKSA8PCAxNikgfCBtX25TY3JlZW5TdHJpZGUpLAorCSAgICAgICBwcGFyX2luZm8tPm1fcFZQUiArIDB4MTApOworCit9CisKK3N0YXRpYyB2b2lkIHNtNzEyX3NldHBhbGV0dGUoaW50IHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQkJICAgICB1bnNpZ25lZCBibHVlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcGFyX2luZm8gKmN1cl9wYXIgPSAoc3RydWN0IHBhcl9pbmZvICopaW5mby0+cGFyOworCisJaWYgKGN1cl9wYXItPkJhc2VBZGRyZXNzSW5WUkFNKQorCQkvKgorCQkgKiBzZWNvbmQgZGlzcGxheSBwYWxldHRlIGZvciBkdWFsIGhlYWQuIEVuYWJsZSBDUlQgUkFNLCA2LWJpdAorCQkgKiBSQU0KKwkJICovCisJCXNtdGNfc2VxdygweDY2LCAoc210Y19zZXFyKDB4NjYpICYgMHhDMykgfCAweDIwKTsKKwllbHNlCisJCS8qIHByaW1hcnkgZGlzcGxheSBwYWxldHRlLiBFbmFibGUgTENEIFJBTSBvbmx5LCA2LWJpdCBSQU0gKi8KKwkJc210Y19zZXF3KDB4NjYsIChzbXRjX3NlcXIoMHg2NikgJiAweEMzKSB8IDB4MTApOworCXNtdGNfbW1pb3diKHJlZ25vLCBkYWNfcmVnKTsKKwlzbXRjX21taW93YihyZWQgPj4gMTAsIGRhY192YWwpOworCXNtdGNfbW1pb3diKGdyZWVuID4+IDEwLCBkYWNfdmFsKTsKKwlzbXRjX21taW93YihibHVlID4+IDEwLCBkYWNfdmFsKTsKK30KKworc3RhdGljIHZvaWQgc210Y19zZXRfdGltaW5nKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiLCBzdHJ1Y3QgcGFyX2luZm8KKwkJKnBwYXJfaW5mbykKK3sKKwlzd2l0Y2ggKHBwYXJfaW5mby0+Y2hpcElEKSB7CisJY2FzZSAweDcxMDoKKwljYXNlIDB4NzEyOgorCWNhc2UgMHg3MjA6CisJCXNtNzEyX3NldF90aW1pbmcoc2ZiLCBwcGFyX2luZm8pOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gc210Y2ZiX3ZhciA9IHsKKwkueHJlcyA9IDEwMjQsCisJLnlyZXMgPSA2MDAsCisJLnhyZXNfdmlydHVhbCA9IDEwMjQsCisJLnlyZXNfdmlydHVhbCA9IDYwMCwKKwkuYml0c19wZXJfcGl4ZWwgPSAxNiwKKwkucmVkID0gezE2LCA4LCAwfSwKKwkuZ3JlZW4gPSB7OCwgOCwgMH0sCisJLmJsdWUgPSB7MCwgOCwgMH0sCisJLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XLAorCS5oZWlnaHQgPSAtMSwKKwkud2lkdGggPSAtMSwKKwkudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBzbXRjZmJfZml4ID0geworCS5pZCA9ICJzbTcxMmZiIiwKKwkudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKKwkudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUiwKKwkubGluZV9sZW5ndGggPSA4MDAgKiAzLAorCS5hY2NlbCA9IEZCX0FDQ0VMX1NNSV9MWU5YLAorfTsKKworLyogY2hhbl90b19maWVsZAorICoKKyAqIGNvbnZlcnQgYSBjb2xvdXIgdmFsdWUgaW50byBhIGZpZWxkIHBvc2l0aW9uCisgKgorICogZnJvbSBweGFmYi5jCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2hhbl90b19maWVsZCh1bnNpZ25lZCBpbnQgY2hhbiwKKwkJCQkJIHN0cnVjdCBmYl9iaXRmaWVsZCAqYmYpCit7CisJY2hhbiAmPSAweGZmZmY7CisJY2hhbiA+Pj0gMTYgLSBiZi0+bGVuZ3RoOworCXJldHVybiBjaGFuIDw8IGJmLT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgc210Y2ZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwkvKiBjbGVhciBEUE1TIHNldHRpbmcgKi8KKwlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCS8qIFNjcmVlbiBPbjogSFN5bmM6IE9uLCBWU3luYyA6IE9uICovCisJCXNtdGNfc2VxdygweDAxLCAoc210Y19zZXFyKDB4MDEpICYgKH4weDIwKSkpOworCQlzbXRjX3NlcXcoMHg2YSwgMHgxNik7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4MjEsIChzbXRjX3NlcXIoMHgyMSkgJiAweDc3KSk7CisJCXNtdGNfc2VxdygweDIyLCAoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkpOworCQlzbXRjX3NlcXcoMHgyMywgKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpKTsKKwkJc210Y19zZXF3KDB4MjQsIChzbXRjX3NlcXIoMHgyNCkgfCAweDAxKSk7CisJCXNtdGNfc2VxdygweDMxLCAoc210Y19zZXFyKDB4MzEpIHwgMHgwMykpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX05PUk1BTDoKKwkJLyogU2NyZWVuIE9mZjogSFN5bmM6IE9uLCBWU3luYyA6IE9uICAgU29mdCBibGFuayAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSAmICh+MHgyMCkpKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MTYpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfc2VxdygweDIyLCAoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkpOworCQlzbXRjX3NlcXcoMHgyMywgKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpKTsKKwkJc210Y19zZXF3KDB4MjQsIChzbXRjX3NlcXIoMHgyNCkgfCAweDAxKSk7CisJCXNtdGNfc2VxdygweDMxLCAoKHNtdGNfc2VxcigweDMxKSAmICh+MHgwNykpIHwgMHgwMCkpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJCS8qIFNjcmVlbiBPbjogSFN5bmM6IE9uLCBWU3luYyA6IE9mZiAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSB8IDB4MjApKTsKKwkJc210Y19zZXF3KDB4MjAsIChzbXRjX3NlcXIoMHgyMCkgJiAofjB4QjApKSk7CisJCXNtdGNfc2VxdygweDZhLCAweDBjKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHgyMSwgKHNtdGNfc2VxcigweDIxKSB8IDB4ODgpKTsKKwkJc210Y19zZXF3KDB4MjIsICgoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkgfCAweDIwKSk7CisJCXNtdGNfc2VxdygweDIzLCAoKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpIHwgMHgyMCkpOworCQlzbXRjX3NlcXcoMHgyNCwgKHNtdGNfc2VxcigweDI0KSAmICh+MHgwMSkpKTsKKwkJc210Y19zZXF3KDB4MzEsICgoc210Y19zZXFyKDB4MzEpICYgKH4weDA3KSkgfCAweDAwKSk7CisJCXNtdGNfc2VxdygweDM0LCAoc210Y19zZXFyKDB4MzQpIHwgMHg4MCkpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJCS8qIFNjcmVlbiBPbjogSFN5bmM6IE9mZiwgVlN5bmMgOiBPbiAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSB8IDB4MjApKTsKKwkJc210Y19zZXF3KDB4MjAsIChzbXRjX3NlcXIoMHgyMCkgJiAofjB4QjApKSk7CisJCXNtdGNfc2VxdygweDZhLCAweDBjKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHgyMSwgKHNtdGNfc2VxcigweDIxKSB8IDB4ODgpKTsKKwkJc210Y19zZXF3KDB4MjIsICgoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkgfCAweDEwKSk7CisJCXNtdGNfc2VxdygweDIzLCAoKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpIHwgMHhEOCkpOworCQlzbXRjX3NlcXcoMHgyNCwgKHNtdGNfc2VxcigweDI0KSAmICh+MHgwMSkpKTsKKwkJc210Y19zZXF3KDB4MzEsICgoc210Y19zZXFyKDB4MzEpICYgKH4weDA3KSkgfCAweDAwKSk7CisJCXNtdGNfc2VxdygweDM0LCAoc210Y19zZXFyKDB4MzQpIHwgMHg4MCkpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJLyogU2NyZWVuIE9uOiBIU3luYzogT2ZmLCBWU3luYyA6IE9mZiAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSB8IDB4MjApKTsKKwkJc210Y19zZXF3KDB4MjAsIChzbXRjX3NlcXIoMHgyMCkgJiAofjB4QjApKSk7CisJCXNtdGNfc2VxdygweDZhLCAweDBjKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHgyMSwgKHNtdGNfc2VxcigweDIxKSB8IDB4ODgpKTsKKwkJc210Y19zZXF3KDB4MjIsICgoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkgfCAweDMwKSk7CisJCXNtdGNfc2VxdygweDIzLCAoKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpIHwgMHhEOCkpOworCQlzbXRjX3NlcXcoMHgyNCwgKHNtdGNfc2VxcigweDI0KSAmICh+MHgwMSkpKTsKKwkJc210Y19zZXF3KDB4MzEsICgoc210Y19zZXFyKDB4MzEpICYgKH4weDA3KSkgfCAweDAwKSk7CisJCXNtdGNfc2VxdygweDM0LCAoc210Y19zZXFyKDB4MzQpIHwgMHg4MCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbXRjX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkJCSAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnMsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiID0gKHN0cnVjdCBzbXRjZmJfaW5mbyAqKWluZm87CisJdTMyIHZhbDsKKworCWlmIChyZWdubyA+IDI1NSkKKwkJcmV0dXJuIDE7CisKKwlzd2l0Y2ggKHNmYi0+ZmIuZml4LnZpc3VhbCkgeworCWNhc2UgRkJfVklTVUFMX0RJUkVDVENPTE9SOgorCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKKwkJLyoKKwkJICogMTYvMzIgYml0IHRydWUtY29sb3VyLCB1c2UgcHNldW8tcGFsZXR0ZSBmb3IgMTYgYmFzZSBjb2xvcgorCQkgKi8KKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAxNikgeworCQkJCXUzMiAqcGFsID0gc2ZiLT5mYi5wc2V1ZG9fcGFsZXR0ZTsKKwkJCQl2YWwgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJnNmYi0+ZmIudmFyLnJlZCk7CisJCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoZ3JlZW4sIFwKKwkJCQkJCSZzZmItPmZiLnZhci5ncmVlbik7CisJCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJnNmYi0+ZmIudmFyLmJsdWUpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkJCXBhbFtyZWdub10gPQorCQkJCSAgICAoKHJlZCAmIDB4ZjgwMCkgPj4gOCkgfAorCQkJCSAgICAoKGdyZWVuICYgMHhlMDAwKSA+PiAxMykgfAorCQkJCSAgICAoKGdyZWVuICYgMHgxYzAwKSA8PCAzKSB8CisJCQkJICAgICgoYmx1ZSAmIDB4ZjgwMCkgPj4gMyk7CisjZWxzZQorCQkJCXBhbFtyZWdub10gPSB2YWw7CisjZW5kaWYKKwkJCX0gZWxzZSB7CisJCQkJdTMyICpwYWwgPSBzZmItPmZiLnBzZXVkb19wYWxldHRlOworCQkJCXZhbCA9IGNoYW5fdG9fZmllbGQocmVkLCAmc2ZiLT5mYi52YXIucmVkKTsKKwkJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgXAorCQkJCQkJJnNmYi0+ZmIudmFyLmdyZWVuKTsKKwkJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmc2ZiLT5mYi52YXIuYmx1ZSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkJdmFsID0KKwkJCQkgICAgKHZhbCAmIDB4ZmYwMGZmMDAgPj4gOCkgfAorCQkJCSAgICAodmFsICYgMHgwMGZmMDBmZiA8PCA4KTsKKyNlbmRpZgorCQkJCXBhbFtyZWdub10gPSB2YWw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJLyogY29sb3IgZGVwdGggOCBiaXQgKi8KKwkJc203MTJfc2V0cGFsZXR0ZShyZWdubywgcmVkLCBncmVlbiwgYmx1ZSwgaW5mbyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CS8qIHVua25vd24gdHlwZSAqLworCX0KKworCXJldHVybiAwOworCit9CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KK3N0YXRpYyBzc2l6ZV90IHNtdGNmYl9yZWFkKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90CisJCQkJY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKKworCXUzMiAqYnVmZmVyLCAqZHN0OworCXUzMiBfX2lvbWVtICpzcmM7CisJaW50IGMsIGksIGNudCA9IDAsIGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJaWYgKCFpbmZvIHx8ICFpbmZvLT5zY3JlZW5fYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybiAtRVBFUk07CisKKwl0b3RhbF9zaXplID0gaW5mby0+c2NyZWVuX3NpemU7CisKKwlpZiAodG90YWxfc2l6ZSA9PSAwKQorCQl0b3RhbF9zaXplID0gaW5mby0+Zml4LnNtZW1fbGVuOworCisJaWYgKHAgPj0gdG90YWxfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY291bnQgPj0gdG90YWxfc2l6ZSkKKwkJY291bnQgPSB0b3RhbF9zaXplOworCisJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpCisJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CisKKwlidWZmZXIgPSBrbWFsbG9jKChjb3VudCA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOiBjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJc3JjID0gKHUzMiBfX2lvbWVtICopIChpbmZvLT5zY3JlZW5fYmFzZSArIHApOworCisJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQorCQlpbmZvLT5mYm9wcy0+ZmJfc3luYyhpbmZvKTsKKworCXdoaWxlIChjb3VudCkgeworCQljID0gKGNvdW50ID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6IGNvdW50OworCQlkc3QgPSBidWZmZXI7CisJCWZvciAoaSA9IGMgPj4gMjsgaS0tOykgeworCQkJKmRzdCA9IGZiX3JlYWRsKHNyYysrKTsKKwkJCSpkc3QgPQorCQkJICAgICgqZHN0ICYgMHhmZjAwZmYwMCA+PiA4KSB8CisJCQkgICAgKCpkc3QgJiAweDAwZmYwMGZmIDw8IDgpOworCQkJZHN0Kys7CisJCX0KKwkJaWYgKGMgJiAzKSB7CisJCQl1OCAqZHN0OCA9ICh1OCAqKSBkc3Q7CisJCQl1OCBfX2lvbWVtICpzcmM4ID0gKHU4IF9faW9tZW0gKikgc3JjOworCisJCQlmb3IgKGkgPSBjICYgMzsgaS0tOykgeworCQkJCWlmIChpICYgMSkgeworCQkJCQkqZHN0OCsrID0gZmJfcmVhZGIoKytzcmM4KTsKKwkJCQl9IGVsc2UgeworCQkJCQkqZHN0OCsrID0gZmJfcmVhZGIoLS1zcmM4KTsKKwkJCQkJc3JjOCArPSAyOworCQkJCX0KKwkJCX0KKwkJCXNyYyA9ICh1MzIgX19pb21lbSAqKSBzcmM4OworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGJ1ZmZlciwgYykpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQkqcHBvcyArPSBjOworCQlidWYgKz0gYzsKKwkJY250ICs9IGM7CisJCWNvdW50IC09IGM7CisJfQorCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiAoZXJyKSA/IGVyciA6IGNudDsKK30KKworc3RhdGljIHNzaXplX3QKK3NtdGNmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCSAgICAgbG9mZl90ICpwcG9zKQoreworCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOworCisJdTMyICpidWZmZXIsICpzcmM7CisJdTMyIF9faW9tZW0gKmRzdDsKKwlpbnQgYywgaSwgY250ID0gMCwgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemU7CisKKwlpZiAoIWluZm8gfHwgIWluZm8tPnNjcmVlbl9iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKKwkJcmV0dXJuIC1FUEVSTTsKKworCXRvdGFsX3NpemUgPSBpbmZvLT5zY3JlZW5fc2l6ZTsKKworCWlmICh0b3RhbF9zaXplID09IDApCisJCXRvdGFsX3NpemUgPSBpbmZvLT5maXguc21lbV9sZW47CisKKwlpZiAocCA+IHRvdGFsX3NpemUpCisJCXJldHVybiAtRUZCSUc7CisKKwlpZiAoY291bnQgPiB0b3RhbF9zaXplKSB7CisJCWVyciA9IC1FRkJJRzsKKwkJY291bnQgPSB0b3RhbF9zaXplOworCX0KKworCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKSB7CisJCWlmICghZXJyKQorCQkJZXJyID0gLUVOT1NQQzsKKworCQljb3VudCA9IHRvdGFsX3NpemUgLSBwOworCX0KKworCWJ1ZmZlciA9IGttYWxsb2MoKGNvdW50ID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6IGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkc3QgPSAodTMyIF9faW9tZW0gKikgKGluZm8tPnNjcmVlbl9iYXNlICsgcCk7CisKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCisJCWluZm8tPmZib3BzLT5mYl9zeW5jKGluZm8pOworCisJd2hpbGUgKGNvdW50KSB7CisJCWMgPSAoY291bnQgPiBQQUdFX1NJWkUpID8gUEFHRV9TSVpFIDogY291bnQ7CisJCXNyYyA9IGJ1ZmZlcjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoc3JjLCBidWYsIGMpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGkgPSBjID4+IDI7IGktLTspIHsKKwkJCWZiX3dyaXRlbCgoKnNyYyAmIDB4ZmYwMGZmMDAgPj4gOCkgfAorCQkJCSAgKCpzcmMgJiAweDAwZmYwMGZmIDw8IDgpLCBkc3QrKyk7CisJCQlzcmMrKzsKKwkJfQorCQlpZiAoYyAmIDMpIHsKKwkJCXU4ICpzcmM4ID0gKHU4ICopIHNyYzsKKwkJCXU4IF9faW9tZW0gKmRzdDggPSAodTggX19pb21lbSAqKSBkc3Q7CisKKwkJCWZvciAoaSA9IGMgJiAzOyBpLS07KSB7CisJCQkJaWYgKGkgJiAxKSB7CisJCQkJCWZiX3dyaXRlYigqc3JjOCsrLCArK2RzdDgpOworCQkJCX0gZWxzZSB7CisJCQkJCWZiX3dyaXRlYigqc3JjOCsrLCAtLWRzdDgpOworCQkJCQlkc3Q4ICs9IDI7CisJCQkJfQorCQkJfQorCQkJZHN0ID0gKHUzMiBfX2lvbWVtICopIGRzdDg7CisJCX0KKworCQkqcHBvcyArPSBjOworCQlidWYgKz0gYzsKKwkJY250ICs9IGM7CisJCWNvdW50IC09IGM7CisJfQorCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiAoY250KSA/IGNudCA6IGVycjsKK30KKyNlbmRpZgkvKiAhIF9fQklHX0VORElBTiAqLworCisjaW5jbHVkZSAic210YzJkLmMiCisKK3ZvaWQgc210Y2ZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJc3RydWN0IHBhcl9pbmZvICpwID0gKHN0cnVjdCBwYXJfaW5mbyAqKWluZm8tPnBhcjsKKworCWlmIChzbXRjXzJEYWNjZWxlcmF0aW9uKSB7CisJCWlmICghYXJlYS0+d2lkdGggfHwgIWFyZWEtPmhlaWdodCkKKwkJCXJldHVybjsKKworCQlkZUNvcHkocC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwKKwkJICAgICAgIGFyZWEtPmR4LCBhcmVhLT5keSwgYXJlYS0+d2lkdGgsIGFyZWEtPmhlaWdodCwKKwkJICAgICAgIHAtPkJhc2VBZGRyZXNzSW5WUkFNLCAwLCBhcmVhLT5zeCwgYXJlYS0+c3ksIDAsIDB4Qyk7CisKKwl9IGVsc2UKKwkJY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOworfQorCit2b2lkIHNtdGNmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCXN0cnVjdCBwYXJfaW5mbyAqcCA9IChzdHJ1Y3QgcGFyX2luZm8gKilpbmZvLT5wYXI7CisKKwlpZiAoc210Y18yRGFjY2VsZXJhdGlvbikgeworCQlpZiAoIXJlY3QtPndpZHRoIHx8ICFyZWN0LT5oZWlnaHQpCisJCQlyZXR1cm47CisJCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj0gMjQpCisJCQlkZUZpbGxSZWN0KHAtPkJhc2VBZGRyZXNzSW5WUkFNLCAwLCByZWN0LT5keCAqIDMsCisJCQkJICAgcmVjdC0+ZHkgKiAzLCByZWN0LT53aWR0aCAqIDMsIHJlY3QtPmhlaWdodCwKKwkJCQkgICByZWN0LT5jb2xvcik7CisJCWVsc2UKKwkJCWRlRmlsbFJlY3QocC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIHJlY3QtPmR4LCByZWN0LT5keSwKKwkJCQkgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5jb2xvcik7CisJfSBlbHNlCisJCWNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKK30KKwordm9pZCBzbXRjZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBwYXJfaW5mbyAqcCA9IChzdHJ1Y3QgcGFyX2luZm8gKilpbmZvLT5wYXI7CisJdTMyIGJnX2NvbCA9IDAsIGZnX2NvbCA9IDA7CisKKwlpZiAoKHNtdGNfMkRhY2NlbGVyYXRpb24pICYmIChpbWFnZS0+ZGVwdGggPT0gMSkpIHsKKwkJaWYgKHNtdGNfZGVfYnVzeSkKKwkJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCQlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCQljYXNlIDg6CisJCQliZ19jb2wgPSBpbWFnZS0+YmdfY29sb3I7CisJCQlmZ19jb2wgPSBpbWFnZS0+ZmdfY29sb3I7CisJCQlicmVhazsKKwkJY2FzZSAxNjoKKwkJCWJnX2NvbCA9CisJCQkgICAgKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwkJCWZnX2NvbCA9CisJCQkgICAgKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKKwkJCWJyZWFrOworCQljYXNlIDMyOgorCQkJYmdfY29sID0KKwkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOworCQkJZmdfY29sID0KKwkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQkJYnJlYWs7CisJCX0KKworCQlkZVN5c3RlbU1lbTJWaWRlb01lbU1vbm9CbHQoCisJCQlpbWFnZS0+ZGF0YSwKKwkJCWltYWdlLT53aWR0aCAvIDgsCisJCQkwLAorCQkJcC0+QmFzZUFkZHJlc3NJblZSQU0sCisJCQkwLAorCQkJMCwKKwkJCWltYWdlLT5keCwgaW1hZ2UtPmR5LAorCQkJaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LAorCQkJZmdfY29sLCBiZ19jb2wsCisJCQkweDBDKTsKKworCX0gZWxzZQorCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgc210Y2ZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfc2V0Y29scmVnID0gc210Y19zZXRjb2xyZWcsCisJLmZiX2JsYW5rID0gc210Y2ZiX2JsYW5rLAorCS5mYl9maWxscmVjdCA9IHNtdGNmYl9maWxscmVjdCwKKwkuZmJfaW1hZ2VibGl0ID0gc210Y2ZiX2ltYWdlYmxpdCwKKwkuZmJfY29weWFyZWEgPSBzbXRjZmJfY29weWFyZWEsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJLmZiX3JlYWQgPSBzbXRjZmJfcmVhZCwKKwkuZmJfd3JpdGUgPSBzbXRjZmJfd3JpdGUsCisjZW5kaWYKKworfTsKKwordm9pZCBzbXRjZmJfc2V0bW9kZShzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYikKK3sKKwlzd2l0Y2ggKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSAzMjoKKwkJc2ZiLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJc2ZiLT5mYi5maXgubGluZV9sZW5ndGggPSBzZmItPmZiLnZhci54cmVzICogNDsKKwkJc2ZiLT5mYi52YXIucmVkLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLmJsdWUubGVuZ3RoID0gODsKKwkJc2ZiLT5mYi52YXIucmVkLm9mZnNldCA9IDE2OworCQlzZmItPmZiLnZhci5ncmVlbi5vZmZzZXQgPSA4OworCQlzZmItPmZiLnZhci5ibHVlLm9mZnNldCA9IDA7CisKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlzZmItPmZiLmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CisJCXNmYi0+ZmIuZml4LmxpbmVfbGVuZ3RoID0gc2ZiLT5mYi52YXIueHJlczsKKwkJc2ZiLT5mYi52YXIucmVkLm9mZnNldCA9IDU7CisJCXNmYi0+ZmIudmFyLnJlZC5sZW5ndGggPSAzOworCQlzZmItPmZiLnZhci5ncmVlbi5vZmZzZXQgPSAyOworCQlzZmItPmZiLnZhci5ncmVlbi5sZW5ndGggPSAzOworCQlzZmItPmZiLnZhci5ibHVlLm9mZnNldCA9IDA7CisJCXNmYi0+ZmIudmFyLmJsdWUubGVuZ3RoID0gMjsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJc2ZiLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJc2ZiLT5mYi5maXgubGluZV9sZW5ndGggPSBzZmItPmZiLnZhci54cmVzICogMzsKKwkJc2ZiLT5mYi52YXIucmVkLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLmJsdWUubGVuZ3RoID0gODsKKworCQlzZmItPmZiLnZhci5yZWQub2Zmc2V0ID0gMTY7CisJCXNmYi0+ZmIudmFyLmdyZWVuLm9mZnNldCA9IDg7CisJCXNmYi0+ZmIudmFyLmJsdWUub2Zmc2V0ID0gMDsKKworCQlicmVhazsKKwljYXNlIDE2OgorCWRlZmF1bHQ6CisJCXNmYi0+ZmIuZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCXNmYi0+ZmIuZml4LmxpbmVfbGVuZ3RoID0gc2ZiLT5mYi52YXIueHJlcyAqIDI7CisKKwkJc2ZiLT5mYi52YXIucmVkLmxlbmd0aCA9IDU7CisJCXNmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDY7CisJCXNmYi0+ZmIudmFyLmJsdWUubGVuZ3RoID0gNTsKKworCQlzZmItPmZiLnZhci5yZWQub2Zmc2V0ID0gMTE7CisJCXNmYi0+ZmIudmFyLmdyZWVuLm9mZnNldCA9IDU7CisJCXNmYi0+ZmIudmFyLmJsdWUub2Zmc2V0ID0gMDsKKworCQlicmVhazsKKwl9CisKKwlody53aWR0aCA9IHNmYi0+ZmIudmFyLnhyZXM7CisJaHcuaGVpZ2h0ID0gc2ZiLT5mYi52YXIueXJlczsKKwlody5oeiA9IDYwOworCXNtdGNfc2V0X3RpbWluZyhzZmIsICZodyk7CisJaWYgKHNtdGNfMkRhY2NlbGVyYXRpb24pIHsKKwkJcHJpbnRrKCIyRCBhY2NlbGVyYXRpb24gZW5hYmxlZCFcbiIpOworCQkvKiBJbml0IHNtdGMgZHJhd2luZyBlbmdpbmUgKi8KKwkJZGVJbml0KHNmYi0+ZmIudmFyLnhyZXMsIHNmYi0+ZmIudmFyLnlyZXMsCisJCQkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpOworCX0KK30KKworLyoKKyAqIEFsbG9jIHN0cnVjdCBzbXRjZmJfaW5mbyBhbmQgYXNzaWduIHRoZSBkZWZhdWx0IHZhbHVlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNtdGNfYWxsb2NfZmJfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJCWNoYXIgKm5hbWUpCit7CisJc3RydWN0IHNtdGNmYl9pbmZvICpzZmI7CisKKwlzZmIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc210Y2ZiX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmICghc2ZiKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChzZmIsIDAsIHNpemVvZihzdHJ1Y3Qgc210Y2ZiX2luZm8pKTsKKworCXNmYi0+Y3VycmNvbiA9IC0xOworCXNmYi0+ZGV2ID0gZGV2OworCisJLyoqKiBJbml0IHNmYi0+ZmIgd2l0aCBkZWZhdWx0IHZhbHVlICoqKi8KKwlzZmItPmZiLmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKwlzZmItPmZiLmZib3BzID0gJnNtdGNmYl9vcHM7CisJc2ZiLT5mYi52YXIgPSBzbXRjZmJfdmFyOworCXNmYi0+ZmIuZml4ID0gc210Y2ZiX2ZpeDsKKworCXN0cmNweShzZmItPmZiLmZpeC5pZCwgbmFtZSk7CisKKwlzZmItPmZiLmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCXNmYi0+ZmIuZml4LnR5cGVfYXV4ID0gMDsKKwlzZmItPmZiLmZpeC54cGFuc3RlcCA9IDA7CisJc2ZiLT5mYi5maXgueXBhbnN0ZXAgPSAwOworCXNmYi0+ZmIuZml4Lnl3cmFwc3RlcCA9IDA7CisJc2ZiLT5mYi5maXguYWNjZWwgPSBGQl9BQ0NFTF9TTUlfTFlOWDsKKworCXNmYi0+ZmIudmFyLm5vbnN0ZCA9IDA7CisJc2ZiLT5mYi52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisJc2ZiLT5mYi52YXIuaGVpZ2h0ID0gLTE7CisJc2ZiLT5mYi52YXIud2lkdGggPSAtMTsKKwkvKiB0ZXh0IG1vZGUgYWNjZWxlcmF0aW9uICovCisJc2ZiLT5mYi52YXIuYWNjZWxfZmxhZ3MgPSBGQl9BQ0NFTEZfVEVYVDsKKwlzZmItPmZiLnZhci52bW9kZSA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQ7CisJc2ZiLT5mYi5wYXIgPSAmaHc7CisJc2ZiLT5mYi5wc2V1ZG9fcGFsZXR0ZSA9IGNvbHJlZzsKKworCXJldHVybiBzZmI7Cit9CisKKy8qCisgKiBVbm1hcCBpbiB0aGUgbWVtb3J5IG1hcHBlZCBJTyByZWdpc3RlcnMKKyAqLworCitzdGF0aWMgdm9pZCBzbXRjX3VubWFwX21taW8oc3RydWN0IHNtdGNmYl9pbmZvICpzZmIpCit7CisJaWYgKHNmYiAmJiBzbXRjX1JlZ0Jhc2VBZGRyZXNzKQorCQlzbXRjX1JlZ0Jhc2VBZGRyZXNzID0gTlVMTDsKK30KKworLyoKKyAqIE1hcCBpbiB0aGUgc2NyZWVuIG1lbW9yeQorICovCisKK3N0YXRpYyBpbnQgc210Y19tYXBfc21lbShzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYiwKKwkJc3RydWN0IHBjaV9kZXYgKmRldiwgdV9sb25nIHNtZW1fbGVuKQoreworCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAzMikgeworI2lmZGVmIF9fQklHX0VORElBTgorCQlzZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkKKwkJCSsgMHg4MDAwMDA7CisjZWxzZQorCQlzZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlzZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJfQorCisJc2ZiLT5mYi5maXguc21lbV9sZW4gPSBzbWVtX2xlbjsKKworCXNmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBzbXRjX1ZSQU1CYXNlQWRkcmVzczsKKworCWlmICghc2ZiLT5mYi5zY3JlZW5fYmFzZSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5hYmxlIHRvIG1hcCBzY3JlZW4gbWVtb3J5XG4iLAorCQkJCXNmYi0+ZmIuZml4LmlkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbm1hcCBpbiB0aGUgc2NyZWVuIG1lbW9yeQorICoKKyAqLworc3RhdGljIHZvaWQgc210Y191bm1hcF9zbWVtKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiKQoreworCWlmIChzZmIgJiYgc2ZiLT5mYi5zY3JlZW5fYmFzZSkgeworCQlpb3VubWFwKHNmYi0+ZmIuc2NyZWVuX2Jhc2UpOworCQlzZmItPmZiLnNjcmVlbl9iYXNlID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBXZSBuZWVkIHRvIHdha2UgdXAgdGhlIEx5bnhFTSssIGFuZCBtYWtlIHN1cmUgaXRzIGluIGxpbmVhciBtZW1vcnkgbW9kZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNtN3h4X2luaXRfaHcodm9pZCkKK3sKKwlvdXRiX3AoMHgxOCwgMHgzYzQpOworCW91dGJfcCgweDExLCAweDNjNSk7Cit9CisKK3N0YXRpYyB2b2lkIHNtdGNfZnJlZV9mYl9pbmZvKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiKQoreworCWlmIChzZmIpIHsKKwkJZmJfYWxsb2NfY21hcCgmc2ZiLT5mYi5jbWFwLCAwLCAwKTsKKwkJa2ZyZWUoc2ZiKTsKKwl9Cit9CisKKy8qCisgKglzbTcxMnZnYV9zZXR1cCAtIHByb2Nlc3MgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGdldCB2Z2EgcGFyYW1ldGVyCisgKglAb3B0aW9uczogc3RyaW5nIG9mIG9wdGlvbnMKKyAqCVJldHVybnMgemVyby4KKyAqCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IF9fbWF5YmVfdW51c2VkIHNtNzEydmdhX3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisJaW50IGluZGV4OworCisJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykgeworCQlzbWRiZygiXG4gTm8gdmdhIHBhcmFtZXRlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNtdGNfc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gMDsKKwlzbXRjX3NjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSAwOworCXNtdGNfc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMDsKKworCXNtZGJnKCJcbnNtNzEydmdhX3NldHVwID0gJXNcbiIsIG9wdGlvbnMpOworCisJZm9yIChpbmRleCA9IDA7CisJICAgICBpbmRleCA8IChzaXplb2YodmVzYV9tb2RlKSAvIHNpemVvZihzdHJ1Y3QgdmVzYV9tb2RlX3RhYmxlKSk7CisJICAgICBpbmRleCsrKSB7CisJCWlmIChzdHJzdHIob3B0aW9ucywgdmVzYV9tb2RlW2luZGV4XS5tb2RlX2luZGV4KSkgeworCQkJc210Y19zY3JlZW5faW5mby5sZmJfd2lkdGggPSB2ZXNhX21vZGVbaW5kZXhdLmxmYl93aWR0aDsKKwkJCXNtdGNfc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9CisJCQkJCXZlc2FfbW9kZVtpbmRleF0ubGZiX2hlaWdodDsKKwkJCXNtdGNfc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gdmVzYV9tb2RlW2luZGV4XS5sZmJfZGVwdGg7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KK19fc2V0dXAoInZnYT0iLCBzbTcxMnZnYV9zZXR1cCk7CisKKy8qIEphc29uICgwOC8xMy8yMDA5KQorICogT3JpZ2luYWwgaW5pdCBmdW5jdGlvbiBjaGFuZ2VkIHRvIHByb2JlIG1ldGhvZCB0byBiZSB1c2VkIGJ5IHBjaV9kcnYKKyAqIHByb2Nlc3MgdXNlZCB0byBkZXRlY3QgY2hpcHMgcmVwbGFjZWQgd2l0aCBrZXJuZWwgcHJvY2VzcyBpbiBwY2lfZHJ2CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNtdGNmYl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKKwl1X2xvbmcgc21lbV9zaXplID0gMHgwMDgwMDAwMDsJLyogZGVmYXVsdCA4TUIgKi8KKwljaGFyIG5hbWVbMTZdOworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBwRnJhbWVidWZmZXJQaHlzaWNhbDsKKworCXByaW50ayhLRVJOX0lORk8KKwkJIlNpbGljb24gTW90aW9uIGRpc3BsYXkgZHJpdmVyICIgU01UQ19MSU5VWF9GQl9WRVJTSU9OICJcbiIpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CS8qIGVuYWJsZSBTTVRDIGNoaXAgKi8KKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gLUVOT01FTTsKKworCWh3LmNoaXBJRCA9IGVudC0+ZGV2aWNlOworCXNwcmludGYobmFtZSwgInNtJVhmYiIsIGh3LmNoaXBJRCk7CisKKwlzZmIgPSBzbXRjX2FsbG9jX2ZiX2luZm8ocGRldiwgbmFtZSk7CisKKwlpZiAoIXNmYikKKwkJZ290byBmYWlsZWQ7CisJLyogSmFzb24gKDA4LzEzLzIwMDkpCisJICogU3RvcmUgZmJfaW5mbyB0byBiZSBmdXJ0aGVyIHVzZWQgd2hlbiBzdXNwZW5kaW5nIGFuZCByZXN1bWluZworCSAqLworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBzZmIpOworCisJc203eHhfaW5pdF9odygpOworCisJLypnZXQgbW9kZSBwYXJhbWV0ZXIgZnJvbSBzbXRjX3NjcmVlbl9pbmZvICovCisJaWYgKHNtdGNfc2NyZWVuX2luZm8ubGZiX3dpZHRoICE9IDApIHsKKwkJc2ZiLT5mYi52YXIueHJlcyA9IHNtdGNfc2NyZWVuX2luZm8ubGZiX3dpZHRoOworCQlzZmItPmZiLnZhci55cmVzID0gc210Y19zY3JlZW5faW5mby5sZmJfaGVpZ2h0OworCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9IHNtdGNfc2NyZWVuX2luZm8ubGZiX2RlcHRoOworCX0gZWxzZSB7CisJCS8qIGRlZmF1bHQgcmVzb2x1dGlvbiAxMDI0eDYwMCAxNmJpdCBtb2RlICovCisJCXNmYi0+ZmIudmFyLnhyZXMgPSBTQ1JFRU5fWF9SRVM7CisJCXNmYi0+ZmIudmFyLnlyZXMgPSBTQ1JFRU5fWV9SRVM7CisJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID0gU0NSRUVOX0JQUDsKKwl9CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMjQpCisJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID0gKHNtdGNfc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMzIpOworI2VuZGlmCisJLyogTWFwIGFkZHJlc3MgYW5kIG1lbW9yeSBkZXRlY3Rpb24gKi8KKwlwRnJhbWVidWZmZXJQaHlzaWNhbCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZody5jaGlwUmV2SUQpOworCisJc3dpdGNoIChody5jaGlwSUQpIHsKKwljYXNlIDB4NzEwOgorCWNhc2UgMHg3MTI6CisJCXNmYi0+ZmIuZml4Lm1taW9fc3RhcnQgPSBwRnJhbWVidWZmZXJQaHlzaWNhbCArIDB4MDA0MDAwMDA7CisJCXNmYi0+ZmIuZml4Lm1taW9fbGVuID0gMHgwMDQwMDAwMDsKKwkJc21lbV9zaXplID0gU003MTJfVklERU9NRU1PUllTSVpFOworI2lmZGVmIF9fQklHX0VORElBTgorCQlody5tX3BMRkIgPSAoc210Y19WUkFNQmFzZUFkZHJlc3MgPQorCQkgICAgaW9yZW1hcChwRnJhbWVidWZmZXJQaHlzaWNhbCwgMHgwMGMwMDAwMCkpOworI2Vsc2UKKwkJaHcubV9wTEZCID0gKHNtdGNfVlJBTUJhc2VBZGRyZXNzID0KKwkJICAgIGlvcmVtYXAocEZyYW1lYnVmZmVyUGh5c2ljYWwsIDB4MDA4MDAwMDApKTsKKyNlbmRpZgorCQlody5tX3BNTUlPID0gKHNtdGNfUmVnQmFzZUFkZHJlc3MgPQorCQkgICAgc210Y19WUkFNQmFzZUFkZHJlc3MgKyAweDAwNzAwMDAwKTsKKwkJc210Y18yREJhc2VBZGRyZXNzID0gKGh3Lm1fcERQUiA9CisJCSAgICBzbXRjX1ZSQU1CYXNlQWRkcmVzcyArIDB4MDA0MDgwMDApOworCQlzbXRjXzJEZGF0YXBvcnQgPSBzbXRjX1ZSQU1CYXNlQWRkcmVzcyArIERFX0RBVEFfUE9SVF83MTI7CisJCWh3Lm1fcFZQUiA9IGh3Lm1fcExGQiArIDB4MDA0MGMwMDA7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAzMikgeworCQkJc210Y19WUkFNQmFzZUFkZHJlc3MgKz0gMHg4MDAwMDA7CisJCQlody5tX3BMRkIgKz0gMHg4MDAwMDA7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJIlxuc210Y19WUkFNQmFzZUFkZHJlc3M9JXAgaHcubV9wTEZCPSVwXG4iLAorCQkJCQlzbXRjX1ZSQU1CYXNlQWRkcmVzcywgaHcubV9wTEZCKTsKKwkJfQorI2VuZGlmCisJCWlmICghc210Y19SZWdCYXNlQWRkcmVzcykgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSIlczogdW5hYmxlIHRvIG1hcCBtZW1vcnkgbWFwcGVkIElPXG4iLAorCQkJCXNmYi0+ZmIuZml4LmlkKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogc2V0IE1DTEsgPSAxNC4zMTgxOCAqICgweDE2IC8gMHgyKSAqLworCQlzbXRjX3NlcXcoMHg2YSwgMHgxNik7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4NjIsIDB4M2UpOworCQkvKiBlbmFibGUgUENJIGJ1cnN0ICovCisJCXNtdGNfc2VxdygweDE3LCAweDIwKTsKKwkJLyogZW5hYmxlIHdvcmQgc3dhcCAqLworI2lmZGVmIF9fQklHX0VORElBTgorCQlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpCisJCQlzbXRjX3NlcXcoMHgxNywgMHgzMCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRkJfU003WFhfQUNDRUwKKwkJc210Y18yRGFjY2VsZXJhdGlvbiA9IDE7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAweDcyMDoKKwkJc2ZiLT5mYi5maXgubW1pb19zdGFydCA9IHBGcmFtZWJ1ZmZlclBoeXNpY2FsOworCQlzZmItPmZiLmZpeC5tbWlvX2xlbiA9IDB4MDAyMDAwMDA7CisJCXNtZW1fc2l6ZSA9IFNNNzIyX1ZJREVPTUVNT1JZU0laRTsKKwkJc210Y18yREJhc2VBZGRyZXNzID0gKGh3Lm1fcERQUiA9CisJCSAgICBpb3JlbWFwKHBGcmFtZWJ1ZmZlclBoeXNpY2FsLCAweDAwYTAwMDAwKSk7CisJCWh3Lm1fcExGQiA9IChzbXRjX1ZSQU1CYXNlQWRkcmVzcyA9CisJCSAgICBzbXRjXzJEQmFzZUFkZHJlc3MgKyAweDAwMjAwMDAwKTsKKwkJaHcubV9wTU1JTyA9IChzbXRjX1JlZ0Jhc2VBZGRyZXNzID0KKwkJICAgIHNtdGNfMkRCYXNlQWRkcmVzcyArIDB4MDAwYzAwMDApOworCQlzbXRjXzJEZGF0YXBvcnQgPSBzbXRjXzJEQmFzZUFkZHJlc3MgKyBERV9EQVRBX1BPUlRfNzIyOworCQlody5tX3BWUFIgPSBzbXRjXzJEQmFzZUFkZHJlc3MgKyAweDgwMDsKKworCQlzbXRjX3NlcXcoMHg2MiwgMHhmZik7CisJCXNtdGNfc2VxdygweDZhLCAweDBkKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjXzJEYWNjZWxlcmF0aW9uID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkiTm8gdmFsaWQgU2lsaWNvbiBNb3Rpb24gZGlzcGxheSBjaGlwIHdhcyBkZXRlY3RlZCFcbiIpOworCisJCXNtdGNfZnJlZV9mYl9pbmZvKHNmYik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogY2FuIHN1cHBvcnQgMzIgYnBwICovCisJaWYgKDE1ID09IHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKQorCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9IDE2OworCisJc2ZiLT5mYi52YXIueHJlc192aXJ0dWFsID0gc2ZiLT5mYi52YXIueHJlczsKKwlzZmItPmZiLnZhci55cmVzX3ZpcnR1YWwgPSBzZmItPmZiLnZhci55cmVzOworCWVyciA9IHNtdGNfbWFwX3NtZW0oc2ZiLCBwZGV2LCBzbWVtX3NpemUpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbGVkOworCisJc210Y2ZiX3NldG1vZGUoc2ZiKTsKKwkvKiBQcmltYXJ5IGRpc3BsYXkgc3RhcnRpbmcgZnJvbSAwIHBvc3Rpb24gKi8KKwlody5CYXNlQWRkcmVzc0luVlJBTSA9IDA7CisJc2ZiLT5mYi5wYXIgPSAmaHc7CisKKwllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmc2ZiLT5mYik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZmFpbGVkOworCisJcHJpbnRrKEtFUk5fSU5GTyAiU2lsaWNvbiBNb3Rpb24gU00lWCBSZXYlWCBwcmltYXJ5IGRpc3BsYXkgbW9kZSIKKwkJCSIlZHglZC0lZCBJbml0IENvbXBsZXRlLlxuIiwgaHcuY2hpcElELCBody5jaGlwUmV2SUQsCisJCQlzZmItPmZiLnZhci54cmVzLCBzZmItPmZiLnZhci55cmVzLAorCQkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpOworCisJcmV0dXJuIDA7CisKKyBmYWlsZWQ6CisJcHJpbnRrKEtFUk5fSU5GTyAiU2lsaWNvbiBNb3Rpb24sIEluYy4gIHByaW1hcnkgZGlzcGxheSBpbml0IGZhaWxcbiIpOworCisJc210Y191bm1hcF9zbWVtKHNmYik7CisJc210Y191bm1hcF9tbWlvKHNmYik7CisJc210Y19mcmVlX2ZiX2luZm8oc2ZiKTsKKworCXJldHVybiBlcnI7Cit9CisKKworLyogSmFzb24gKDA4LzExLzIwMDkpIFBDSV9EUlYgd3JhcHBlciBlc3NlbnRpYWwgc3RydWN0cyAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNtdGNmYl9wY2lfdGFibGVbXSA9IHsKKwl7MHgxMjZmLCAweDcxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTI2ZiwgMHg3MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDEyNmYsIDB4NzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MCx9Cit9OworCisKKy8qIEphc29uICgwOC8xNC8yMDA5KQorICogZG8gc29tZSBjbGVhbiB1cCB3aGVuIHRoZSBkcml2ZXIgbW9kdWxlIGlzIHJlbW92ZWQKKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IHNtdGNmYl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiOworCisJc2ZiID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlzbXRjX3VubWFwX3NtZW0oc2ZiKTsKKwlzbXRjX3VubWFwX21taW8oc2ZiKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZzZmItPmZiKTsKKwlzbXRjX2ZyZWVfZmJfaW5mbyhzZmIpOworfQorCisvKiBKYXNvbiAoMDgvMTQvMjAwOSkKKyAqIHN1c3BlbmQgZnVuY3Rpb24sIGNhbGxlZCB3aGVuIHRoZSBzdXNwZW5kIGV2ZW50IGlzIHRyaWdnZXJlZAorICovCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHNtdGNmYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiOworCWludCByZXR2OworCisJc2ZiID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogc2V0IHRoZSBodyBpbiBzbGVlcCBtb2RlIHVzZSBleHRlcm5lbCBjbG9jayBhbmQgc2VsZiBtZW1vcnkgcmVmcmVzaAorCSAqIHNvIHRoYXQgd2UgY2FuIHR1cm4gb2ZmIGludGVybmFsIFBMTHMgbGF0ZXIgb24KKwkgKi8KKwlzbXRjX3NlcXcoMHgyMCwgKHNtdGNfc2VxcigweDIwKSB8IDB4YzApKTsKKwlzbXRjX3NlcXcoMHg2OSwgKHNtdGNfc2VxcigweDY5KSAmIDB4ZjcpKTsKKworCXN3aXRjaCAobXNnLmV2ZW50KSB7CisJY2FzZSBQTV9FVkVOVF9GUkVFWkU6CisJY2FzZSBQTV9FVkVOVF9QUkVUSEFXOgorCQlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBtc2c7CisJCXJldHVybiAwOworCX0KKworCS8qIHdoZW4gZG9pbmcgc3VzcGVuZCwgY2FsbCBmYiBhcGlzIGFuZCBwY2kgYXBpcyAqLworCWlmIChtc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWZiX3NldF9zdXNwZW5kKCZzZmItPmZiLCAxKTsKKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR2ID0gcGNpX3NhdmVfc3RhdGUocGRldik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0diA9IHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgbXNnKTsKKwkJcmV0diA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcmV0dik7CisJfQorCisJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbXNnOworCisJLyogYWRkaXRpb25hbHkgdHVybiBvZmYgYWxsIGZ1bmN0aW9uIGJsb2NrcyBpbmNsdWRpbmcgaW50ZXJuYWwgUExMcyAqLworCXNtdGNfc2VxdygweDIxLCAweGZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHNtdGNmYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHNtdGNmYl9pbmZvICpzZmI7CisJaW50IHJldHY7CisKKwlzZmIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiB3aGVuIHJlc3VtaW5nLCByZXN0b3JlIHBjaSBkYXRhIGFuZCBmYiBjdXJzb3IgKi8KKwlpZiAocGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX0ZSRUVaRSkgeworCQlyZXR2ID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCQlyZXR2ID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKKwkJCXJldHVybiAtMTsKKwkJcGNpX3NldF9tYXN0ZXIocGRldik7CisJfQorCisJLyogcmVpbml0IGhhcmR3YXJlICovCisJc203eHhfaW5pdF9odygpOworCXN3aXRjaCAoaHcuY2hpcElEKSB7CisJY2FzZSAweDcxMDoKKwljYXNlIDB4NzEyOgorCQkvKiBzZXQgTUNMSyA9IDE0LjMxODE4ICogICgweDE2IC8gMHgyKSAqLworCQlzbXRjX3NlcXcoMHg2YSwgMHgxNik7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4NjIsIDB4M2UpOworCQkvKiBlbmFibGUgUENJIGJ1cnN0ICovCisJCXNtdGNfc2VxdygweDE3LCAweDIwKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKQorCQkJc210Y19zZXF3KDB4MTcsIDB4MzApOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgMHg3MjA6CisJCXNtdGNfc2VxdygweDYyLCAweGZmKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MGQpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCWJyZWFrOworCX0KKworCXNtdGNfc2VxdygweDM0LCAoc210Y19zZXFyKDB4MzQpIHwgMHhjMCkpOworCXNtdGNfc2VxdygweDMzLCAoKHNtdGNfc2VxcigweDMzKSB8IDB4MDgpICYgMHhmYikpOworCisJc210Y2ZiX3NldG1vZGUoc2ZiKTsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMCk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEphc29uICgwOC8xMy8yMDA5KQorICogcGNpX2RyaXZlciBzdHJ1Y3QgdXNlZCB0byB3cmFwIHRoZSBvcmlnaW5hbCBkcml2ZXIKKyAqIHNvIHRoYXQgaXQgY2FuIGJlIHJlZ2lzdGVyZWQgaW50byB0aGUga2VybmVsIGFuZAorICogdGhlIHByb3BlciBtZXRob2Qgd291bGQgYmUgY2FsbGVkIHdoZW4gc3VzcGVuZGluZyBhbmQgcmVzdW1pbmcKKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNtdGNmYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAic210Y2ZiIiwKKwkuaWRfdGFibGUgPSBzbXRjZmJfcGNpX3RhYmxlLAorCS5wcm9iZSA9IHNtdGNmYl9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNtdGNmYl9wY2lfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IHNtdGNmYl9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbXRjZmJfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbXRjZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbXRjZmJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNtdGNmYl9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzbXRjZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc210Y2ZiX2luaXQpOworbW9kdWxlX2V4aXQoc210Y2ZiX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTaWxpY29ubW90aW9uICIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIFNNSSBHcmFwaGljIENhcmRzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YyYzM0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApAQCAtMCwwICsxLDc5MyBAQAorLyoKKyAqIFNpbGljb24gTW90aW9uIFNNNzEyIGZyYW1lIGJ1ZmZlciBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgorICogQXV0aG9yczoJR2UgV2FuZywgZ2V3YW5nQHNpbGljb25tb3Rpb24uY29tCisgKgkgCUJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIFNNVENfTElOVVhfRkJfVkVSU0lPTgkidmVyc2lvbiAwLjExLjI2MTkuMjEuMDEgSnVseSAyNywgMjAwOCIKKworI2RlZmluZSBOUl9QQUxFVFRFICAgICAgICAyNTYKKyNkZWZpbmUgTlJfUkdCICAgICAgICAgICAgMgorCisjZGVmaW5lIEZCX0FDQ0VMX1NNSV9MWU5YIDg4CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgUENfVkdBICAgICAgICAgICAgMAorI2Vsc2UKKyNkZWZpbmUgUENfVkdBICAgICAgICAgICAgMQorI2VuZGlmCisKKyNkZWZpbmUgU0NSRUVOX1hfUkVTICAgICAgMTAyNAorI2RlZmluZSBTQ1JFRU5fWV9SRVMgICAgICA2MDAKKyNkZWZpbmUgU0NSRUVOX0JQUCAgICAgICAgMTYKKworI2lmbmRlZiBGSUVMRF9PRkZTRVQKKyNkZWZpbmUgRklFTERfT0ZTRkVUKHR5cGUsIGZpZWxkKSBcCisJKCh1bnNpZ25lZCBsb25nKSAoUFVDSEFSKSAmICgoKHR5cGUgKikwKS0+ZmllbGQpKQorI2VuZGlmCisKKy8qQXNzdW1lIFNNNzEyIGdyYXBoaWNzIGNoaXAgaGFzIDRNQiBWUkFNICovCisjZGVmaW5lIFNNNzEyX1ZJREVPTUVNT1JZU0laRQkgIDB4MDA0MDAwMDAKKy8qQXNzdW1lIFNNNzIyIGdyYXBoaWNzIGNoaXAgaGFzIDhNQiBWUkFNICovCisjZGVmaW5lIFNNNzIyX1ZJREVPTUVNT1JZU0laRQkgIDB4MDA4MDAwMDAKKworI2RlZmluZSBkYWNfcmVnCSgweDNjOCkKKyNkZWZpbmUgZGFjX3ZhbAkoMHgzYzkpCisKK2V4dGVybiBjaGFyICpzbXRjX1JlZ0Jhc2VBZGRyZXNzOworI2RlZmluZSBzbXRjX21taW93YihkYXQsIHJlZykJd3JpdGViKGRhdCwgc210Y19SZWdCYXNlQWRkcmVzcyArIHJlZykKKyNkZWZpbmUgc210Y19tbWlvd3coZGF0LCByZWcpCXdyaXRldyhkYXQsIHNtdGNfUmVnQmFzZUFkZHJlc3MgKyByZWcpCisjZGVmaW5lIHNtdGNfbW1pb3dsKGRhdCwgcmVnKQl3cml0ZWwoZGF0LCBzbXRjX1JlZ0Jhc2VBZGRyZXNzICsgcmVnKQorCisjZGVmaW5lIHNtdGNfbW1pb3JiKHJlZykJcmVhZGIoc210Y19SZWdCYXNlQWRkcmVzcyArIHJlZykKKyNkZWZpbmUgc210Y19tbWlvcncocmVnKQlyZWFkdyhzbXRjX1JlZ0Jhc2VBZGRyZXNzICsgcmVnKQorI2RlZmluZSBzbXRjX21taW9ybChyZWcpCXJlYWRsKHNtdGNfUmVnQmFzZUFkZHJlc3MgKyByZWcpCisKKyNkZWZpbmUgU0laRV9TUjAwX1NSMDQgICAgICAoMHgwNCAtIDB4MDAgKyAxKQorI2RlZmluZSBTSVpFX1NSMTBfU1IyNCAgICAgICgweDI0IC0gMHgxMCArIDEpCisjZGVmaW5lIFNJWkVfU1IzMF9TUjc1ICAgICAgKDB4NzUgLSAweDMwICsgMSkKKyNkZWZpbmUgU0laRV9TUjgwX1NSOTMgICAgICAoMHg5MyAtIDB4ODAgKyAxKQorI2RlZmluZSBTSVpFX1NSQTBfU1JBRiAgICAgICgweEFGIC0gMHhBMCArIDEpCisjZGVmaW5lIFNJWkVfR1IwMF9HUjA4ICAgICAgKDB4MDggLSAweDAwICsgMSkKKyNkZWZpbmUgU0laRV9BUjAwX0FSMTQgICAgICAoMHgxNCAtIDB4MDAgKyAxKQorI2RlZmluZSBTSVpFX0NSMDBfQ1IxOCAgICAgICgweDE4IC0gMHgwMCArIDEpCisjZGVmaW5lIFNJWkVfQ1IzMF9DUjREICAgICAgKDB4NEQgLSAweDMwICsgMSkKKyNkZWZpbmUgU0laRV9DUjkwX0NSQTcgICAgICAoMHhBNyAtIDB4OTAgKyAxKQorI2RlZmluZSBTSVpFX1ZQUgkJKDB4NkMgKyAxKQorI2RlZmluZSBTSVpFX0RQUgkJKDB4NDQgKyAxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc210Y19jcnRjdyhpbnQgcmVnLCBpbnQgdmFsKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzZDQpOworCXNtdGNfbW1pb3diKHZhbCwgMHgzZDUpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbXRjX2NydGNyKGludCByZWcpCit7CisJc210Y19tbWlvd2IocmVnLCAweDNkNCk7CisJcmV0dXJuIHNtdGNfbW1pb3JiKDB4M2Q1KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtdGNfZ3JwaHcoaW50IHJlZywgaW50IHZhbCkKK3sKKwlzbXRjX21taW93YihyZWcsIDB4M2NlKTsKKwlzbXRjX21taW93Yih2YWwsIDB4M2NmKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc210Y19ncnBocihpbnQgcmVnKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzY2UpOworCXJldHVybiBzbXRjX21taW9yYigweDNjZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2F0dHJ3KGludCByZWcsIGludCB2YWwpCit7CisJc210Y19tbWlvcmIoMHgzZGEpOworCXNtdGNfbW1pb3diKHJlZywgMHgzYzApOworCXNtdGNfbW1pb3JiKDB4M2MxKTsKKwlzbXRjX21taW93Yih2YWwsIDB4M2MwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtdGNfc2VxdyhpbnQgcmVnLCBpbnQgdmFsKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzYzQpOworCXNtdGNfbW1pb3diKHZhbCwgMHgzYzUpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbXRjX3NlcXIoaW50IHJlZykKK3sKKwlzbXRjX21taW93YihyZWcsIDB4M2M0KTsKKwlyZXR1cm4gc210Y19tbWlvcmIoMHgzYzUpOworfQorCisvKiBUaGUgbmV4dCBzdHJ1Y3R1cmUgaG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGV2YW50IGZvciBhIHNwZWNpZmljIHZpZGVvIG1vZGUuCisgKi8KKworc3RydWN0IE1vZGVJbml0IHsKKwlpbnQgbW1TaXplWDsKKwlpbnQgbW1TaXplWTsKKwlpbnQgYnBwOworCWludCBoejsKKwl1bnNpZ25lZCBjaGFyIEluaXRfTUlTQzsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1IwMF9TUjA0W1NJWkVfU1IwMF9TUjA0XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1IxMF9TUjI0W1NJWkVfU1IxMF9TUjI0XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1IzMF9TUjc1W1NJWkVfU1IzMF9TUjc1XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1I4MF9TUjkzW1NJWkVfU1I4MF9TUjkzXTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1JBMF9TUkFGW1NJWkVfU1JBMF9TUkFGXTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfR1IwMF9HUjA4W1NJWkVfR1IwMF9HUjA4XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfQVIwMF9BUjE0W1NJWkVfQVIwMF9BUjE0XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfQ1IwMF9DUjE4W1NJWkVfQ1IwMF9DUjE4XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfQ1IzMF9DUjREW1NJWkVfQ1IzMF9DUjREXTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfQ1I5MF9DUkE3W1NJWkVfQ1I5MF9DUkE3XTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkgU003MTIgTW9kZSB0YWJsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IE1vZGVJbml0IFZHQU1vZGVbXSA9IHsKKwl7CisJIC8qICBtb2RlIzA6IDY0MCB4IDQ4MCAgMTZCcHAgIDYwSHogKi8KKwkgNjQwLCA0ODAsIDE2LCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEUzLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMCwgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RkYsIDB4QkUsIDB4RUYsIDB4RkYsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzIsIDB4MDMsIDB4QTAsIDB4MDksIDB4QzAsIDB4MzIsIDB4MzIsIDB4MzIsCisJICAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MzIsIDB4MzIsIDB4MzIsCisJICAweDA0LCAweDI0LCAweDYzLCAweDRGLCAweDUyLCAweDBCLCAweERGLCAweEVBLAorCSAgMHgwNCwgMHg1MCwgMHgxOSwgMHgzMiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDA3LCAweDgyLCAweDA3LCAweDA0LAorCSAgMHgwMCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgzMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4NkYsIDB4N0YsIDB4N0YsIDB4RkYsIDB4MzIsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEVGLCAweEZGLCAweDMyLCAweDMyLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEVGLCAweEZGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweDVGLCAweDRGLCAweDRGLCAweDAwLCAweDUzLCAweDFGLCAweDBCLCAweDNFLAorCSAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4RUEsIDB4MEMsIDB4REYsIDB4NTAsIDB4NDAsIDB4REYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMywgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RTcsIDB4RkYsIDB4RkQsCisJICAweDVGLCAweDRGLCAweDAwLCAweDU0LCAweDAwLCAweDBCLCAweERGLCAweDAwLAorCSAgMHhFQSwgMHgwQywgMHgyRSwgMHgwMCwgMHg0RiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTYsIDB4REQsIDB4NUUsIDB4RUEsIDB4ODcsIDB4NDQsIDB4OEYsIDB4NTUsCisJICAweDBBLCAweDhGLCAweDU1LCAweDBBLCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgxMSwgMHgxMCwgMHgwQiwgMHgwQSwgMHgwQSwgMHgwQSwgMHgwQSwgMHgwMCwKKwkgIH0sCisJIH0sCisJeworCSAvKiAgbW9kZSMxOiA2NDAgeCA0ODAgIDI0QnBwICA2MEh6ICovCisJIDY0MCwgNDgwLCAyNCwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFMywKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEZGLCAweEJFLCAweEVGLCAweEZGLCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDMyLCAweDAzLCAweEEwLCAweDA5LCAweEMwLCAweDMyLCAweDMyLCAweDMyLAorCSAgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDMyLCAweDMyLCAweDMyLAorCSAgMHgwNCwgMHgyNCwgMHg2MywgMHg0RiwgMHg1MiwgMHgwQiwgMHhERiwgMHhFQSwKKwkgIDB4MDQsIDB4NTAsIDB4MTksIDB4MzIsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzIsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgwNywgMHg4MiwgMHgwNywgMHgwNCwKKwkgIDB4MDAsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MzAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweDZGLCAweDdGLCAweDdGLCAweEZGLCAweDMyLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhFRiwgMHhGRiwgMHgzMiwgMHgzMiwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhFRiwgMHhGRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHg1RiwgMHg0RiwgMHg0RiwgMHgwMCwgMHg1MywgMHgxRiwgMHgwQiwgMHgzRSwKKwkgIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEVBLCAweDBDLCAweERGLCAweDUwLCAweDQwLCAweERGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEU3LCAweEZGLCAweEZELAorCSAgMHg1RiwgMHg0RiwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwQiwgMHhERiwgMHgwMCwKKwkgIDB4RUEsIDB4MEMsIDB4MkUsIDB4MDAsIDB4NEYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU2LCAweERELCAweDVFLCAweEVBLCAweDg3LCAweDQ0LCAweDhGLCAweDU1LAorCSAgMHgwQSwgMHg4RiwgMHg1NSwgMHgwQSwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MTEsIDB4MTAsIDB4MEIsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MDAsCisJICB9LAorCSB9LAorCXsKKwkgLyogIG1vZGUjMDogNjQwIHggNDgwICAzMkJwcCAgNjBIeiAqLworCSA2NDAsIDQ4MCwgMzIsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RTMsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAwLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRiwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzMiwgMHgwMywgMHhBMCwgMHgwOSwgMHhDMCwgMHgzMiwgMHgzMiwgMHgzMiwKKwkgIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgzMiwgMHgzMiwgMHgzMiwKKwkgIDB4MDQsIDB4MjQsIDB4NjMsIDB4NEYsIDB4NTIsIDB4MEIsIDB4REYsIDB4RUEsCisJICAweDA0LCAweDUwLCAweDE5LCAweDMyLCAweDMyLCAweDAwLCAweDAwLCAweDMyLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MDcsIDB4ODIsIDB4MDcsIDB4MDQsCisJICAweDAwLCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDMwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgzMiwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RUYsIDB4RkYsIDB4MzIsIDB4MzIsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4RkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4NUYsIDB4NEYsIDB4NEYsIDB4MDAsIDB4NTMsIDB4MUYsIDB4MEIsIDB4M0UsCisJICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhFQSwgMHgwQywgMHhERiwgMHg1MCwgMHg0MCwgMHhERiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhGRiwgMHhGRCwKKwkgIDB4NUYsIDB4NEYsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MEIsIDB4REYsIDB4MDAsCisJICAweEVBLCAweDBDLCAweDJFLCAweDAwLCAweDRGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHhERCwgMHg1RSwgMHhFQSwgMHg4NywgMHg0NCwgMHg4RiwgMHg1NSwKKwkgIDB4MEEsIDB4OEYsIDB4NTUsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDExLCAweDEwLCAweDBCLCAweDBBLCAweDBBLCAweDBBLCAweDBBLCAweDAwLAorCSAgfSwKKwkgfSwKKworCXsJCQkvKiAgbW9kZSMyOiA4MDAgeCA2MDAgIDE2QnBwICA2MEh6ICovCisJIDgwMCwgNjAwLCAxNiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHgyQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEZGLCAweEJFLCAweEVFLCAweEZGLCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM0LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDI0LCAweDI0LCAweDI0LAorCSAgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MzgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDI0LCAweDI0LCAweDI0LAorCSAgMHgwNCwgMHg0OCwgMHg4MywgMHg2MywgMHg2OCwgMHg3MiwgMHg1NywgMHg1OCwKKwkgIDB4MDQsIDB4NTUsIDB4NTksIDB4MjQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjQsCisJICAweDAxLCAweDgwLCAweDdBLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgxQywgMHg4NSwgMHgzNSwgMHgxMywKKwkgIDB4MDIsIDB4NDUsIDB4MzAsIDB4MzUsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDZGLCAweDdGLCAweDdGLCAweEZGLCAweDI0LAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgyNCwgMHgyNCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHg3RiwgMHg2MywgMHg2MywgMHgwMCwgMHg2OCwgMHgxOCwgMHg3MiwgMHhGMCwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDU4LCAweDBDLCAweDU3LCAweDY0LCAweDQwLCAweDU3LCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEU3LCAweEJGLCAweEZELAorCSAgMHg3RiwgMHg2MywgMHgwMCwgMHg2OSwgMHgxOCwgMHg3MiwgMHg1NywgMHgwMCwKKwkgIDB4NTgsIDB4MEMsIDB4RTAsIDB4MjAsIDB4NjMsIDB4NTcsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU2LCAweDRCLCAweDVFLCAweDU1LCAweDg2LCAweDlELCAweDhFLCAweEFBLAorCSAgMHhEQiwgMHgyQSwgMHhERiwgMHgzMywgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MjAsIDB4MUYsIDB4MUEsIDB4MTksIDB4MEYsIDB4MEYsIDB4MEYsIDB4MDAsCisJICB9LAorCSB9LAorCXsJCQkvKiAgbW9kZSMzOiA4MDAgeCA2MDAgIDI0QnBwICA2MEh6ICovCisJIDgwMCwgNjAwLCAyNCwgNjAsCisJIDB4MkIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRSwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzNiwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgzNiwgMHgzNiwgMHgzNiwKKwkgIDB4MzYsIDB4MzYsIDB4MzYsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgzNiwgMHgzNiwgMHgzNiwKKwkgIDB4MDQsIDB4NDgsIDB4ODMsIDB4NjMsIDB4NjgsIDB4NzIsIDB4NTcsIDB4NTgsCisJICAweDA0LCAweDU1LCAweDU5LCAweDM2LCAweDM2LCAweDAwLCAweDAwLCAweDM2LAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MUMsIDB4ODUsIDB4MzUsIDB4MTMsCisJICAweDAyLCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgzNiwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RUYsIDB4RkYsIDB4MzYsIDB4MzYsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4N0YsIDB4NjMsIDB4NjMsIDB4MDAsIDB4NjgsIDB4MTgsIDB4NzIsIDB4RjAsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1OCwgMHgwQywgMHg1NywgMHg2NCwgMHg0MCwgMHg1NywgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhCRiwgMHhGRCwKKwkgIDB4N0YsIDB4NjMsIDB4MDAsIDB4NjksIDB4MTgsIDB4NzIsIDB4NTcsIDB4MDAsCisJICAweDU4LCAweDBDLCAweEUwLCAweDIwLCAweDYzLCAweDU3LAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHg0QiwgMHg1RSwgMHg1NSwgMHg4NiwgMHg5RCwgMHg4RSwgMHhBQSwKKwkgIDB4REIsIDB4MkEsIDB4REYsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDIwLCAweDFGLCAweDFBLCAweDE5LCAweDBGLCAweDBGLCAweDBGLCAweDAwLAorCSAgfSwKKwkgfSwKKwl7CQkJLyogIG1vZGUjNzogODAwIHggNjAwICAzMkJwcCAgNjBIeiAqLworCSA4MDAsIDYwMCwgMzIsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4MkIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRSwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzNCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgyNCwgMHgyNCwKKwkgIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDM4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgyNCwgMHgyNCwgMHgyNCwKKwkgIDB4MDQsIDB4NDgsIDB4ODMsIDB4NjMsIDB4NjgsIDB4NzIsIDB4NTcsIDB4NTgsCisJICAweDA0LCAweDU1LCAweDU5LCAweDI0LCAweDI0LCAweDAwLCAweDAwLCAweDI0LAorCSAgMHgwMSwgMHg4MCwgMHg3QSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MUMsIDB4ODUsIDB4MzUsIDB4MTMsCisJICAweDAyLCAweDQ1LCAweDMwLCAweDM1LCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgyNCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4MjQsIDB4MjQsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4N0YsIDB4NjMsIDB4NjMsIDB4MDAsIDB4NjgsIDB4MTgsIDB4NzIsIDB4RjAsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1OCwgMHgwQywgMHg1NywgMHg2NCwgMHg0MCwgMHg1NywgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhCRiwgMHhGRCwKKwkgIDB4N0YsIDB4NjMsIDB4MDAsIDB4NjksIDB4MTgsIDB4NzIsIDB4NTcsIDB4MDAsCisJICAweDU4LCAweDBDLCAweEUwLCAweDIwLCAweDYzLCAweDU3LAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHg0QiwgMHg1RSwgMHg1NSwgMHg4NiwgMHg5RCwgMHg4RSwgMHhBQSwKKwkgIDB4REIsIDB4MkEsIDB4REYsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDIwLCAweDFGLCAweDFBLCAweDE5LCAweDBGLCAweDBGLCAweDBGLCAweDAwLAorCSAgfSwKKwkgfSwKKwkvKiBXZSB1c2UgMTAyNHg3NjggdGFibGUgdG8gbGlnaHQgMTAyNHg2MDAgcGFuZWwgZm9yIGxlbW90ZSAqLworCXsJCQkvKiAgbW9kZSM0OiAxMDI0IHggNjAwICAxNkJwcCAgNjBIeiAgKi8KKwkgMTAyNCwgNjAwLCAxNiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEM4LCAweDQwLCAweDE0LCAweDYwLCAweDAwLCAweDBBLCAweDE3LCAweDIwLAorCSAgMHg1MSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDAsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDIyLCAweDAzLCAweDI0LCAweDA5LCAweEMwLCAweDIyLCAweDIyLCAweDIyLAorCSAgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDIyLCAweDIyLCAweDIyLAorCSAgMHgwNiwgMHg2OCwgMHhBNywgMHg3RiwgMHg4MywgMHgyNCwgMHhGRiwgMHgwMywKKwkgIDB4MDAsIDB4NjAsIDB4NTksIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MjIsCisJICAweDAxLCAweDgwLCAweDdBLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHgxNiwgMHgwMiwgMHgwRCwgMHg4MiwgMHgwOSwgMHgwMiwKKwkgIDB4MDQsIDB4NDUsIDB4M0YsIDB4MzAsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDNBLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgzQSwgMHgzQSwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZCLCAweDlGLCAweDAxLCAweDAwLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGQiwgMHhGRiwgMHhGRiwgMHg5NywgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHhBMywgMHg3RiwgMHg3RiwgMHgwMCwgMHg4NSwgMHgxNiwgMHgyNCwgMHhGNSwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDAzLCAweDA5LCAweEZGLCAweDgwLCAweDQwLCAweEZGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEZGLCAweEJGLCAweEZGLAorCSAgMHhBMywgMHg3RiwgMHgwMCwgMHg4MiwgMHgwYiwgMHg2ZiwgMHg1NywgMHgwMCwKKwkgIDB4NWMsIDB4MGYsIDB4RTAsIDB4ZTAsIDB4N0YsIDB4NTcsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU1LCAweEQ5LCAweDVELCAweEUxLCAweDg2LCAweDFCLCAweDhFLCAweDI2LAorCSAgMHhEQSwgMHg4RCwgMHhERSwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MTUsIDB4MDMsCisJICB9LAorCSB9LAorCXsJCQkvKiAgbW9kZSM1OiAxMDI0IHggNzY4ICAyNEJwcCAgNjBIeiAqLworCSAxMDI0LCA3NjgsIDI0LCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEVCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMywgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RjMsIDB4QjYsIDB4QzAsIDB4REQsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDksIDB4QzAsIDB4M0EsIDB4M0EsIDB4M0EsCisJICAweDNBLCAweDNBLCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDA2LCAweDY4LCAweEE3LCAweDdGLCAweDgzLCAweDI0LCAweEZGLCAweDAzLAorCSAgMHgwMCwgMHg2MCwgMHg1OSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDNCLCAweDBELCAweDA5LCAweDAyLAorCSAgMHgwNCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0EsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweDNBLCAweDNBLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkIsIDB4OUYsIDB4MDEsIDB4MDAsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZCLCAweEZGLCAweEZGLCAweDk3LCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweEEzLCAweDdGLCAweDdGLCAweDAwLCAweDg1LCAweDE2LCAweDI0LCAweEY1LAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4MDMsIDB4MDksIDB4RkYsIDB4ODAsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsCisJICAweEEzLCAweDdGLCAweDAwLCAweDg2LCAweDE1LCAweDI0LCAweEZGLCAweDAwLAorCSAgMHgwMSwgMHgwNywgMHhFNSwgMHgyMCwgMHg3RiwgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTUsIDB4RDksIDB4NUQsIDB4RTEsIDB4ODYsIDB4MUIsIDB4OEUsIDB4MjYsCisJICAweERBLCAweDhELCAweERFLCAweDk0LCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgxNSwgMHgwMywKKwkgIH0sCisJIH0sCisJewkJCS8qICBtb2RlIzQ6IDEwMjQgeCA3NjggIDMyQnBwICA2MEh6ICovCisJIDEwMjQsIDc2OCwgMzIsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RUIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGMywgMHhCNiwgMHhDMCwgMHhERCwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMyLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzOCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgzQSwgMHgzQSwgMHgzQSwKKwkgIDB4M0EsIDB4M0EsIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDYsIDB4NjgsIDB4QTcsIDB4N0YsIDB4ODMsIDB4MjQsIDB4RkYsIDB4MDMsCisJICAweDAwLCAweDYwLCAweDU5LCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4M0IsIDB4MEQsIDB4MDksIDB4MDIsCisJICAweDA0LCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgzQSwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4M0EsIDB4M0EsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGQiwgMHg5RiwgMHgwMSwgMHgwMCwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkIsIDB4RkYsIDB4RkYsIDB4OTcsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4QTMsIDB4N0YsIDB4N0YsIDB4MDAsIDB4ODUsIDB4MTYsIDB4MjQsIDB4RjUsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHgwMywgMHgwOSwgMHhGRiwgMHg4MCwgMHg0MCwgMHhGRiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwKKwkgIDB4QTMsIDB4N0YsIDB4MDAsIDB4ODYsIDB4MTUsIDB4MjQsIDB4RkYsIDB4MDAsCisJICAweDAxLCAweDA3LCAweEU1LCAweDIwLCAweDdGLCAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NSwgMHhEOSwgMHg1RCwgMHhFMSwgMHg4NiwgMHgxQiwgMHg4RSwgMHgyNiwKKwkgIDB4REEsIDB4OEQsIDB4REUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDE1LCAweDAzLAorCSAgfSwKKwkgfSwKKwl7CQkJLyogIG1vZGUjNjogMzIwIHggMjQwICAxNkJwcCAgNjBIeiAqLworCSAzMjAsIDI0MCwgMTYsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RUIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGMywgMHhCNiwgMHhDMCwgMHhERCwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMyLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzOCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgzQSwgMHgzQSwgMHgzQSwKKwkgIDB4M0EsIDB4M0EsIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDYsIDB4NjgsIDB4QTcsIDB4N0YsIDB4ODMsIDB4MjQsIDB4RkYsIDB4MDMsCisJICAweDAwLCAweDYwLCAweDU5LCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MDgsIDB4NDMsIDB4MDgsIDB4NDMsCisJICAweDA0LCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgzQSwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4M0EsIDB4M0EsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGQiwgMHg5RiwgMHgwMSwgMHgwMCwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkIsIDB4RkYsIDB4RkYsIDB4OTcsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4QTMsIDB4N0YsIDB4N0YsIDB4MDAsIDB4ODUsIDB4MTYsIDB4MjQsIDB4RjUsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHgwMywgMHgwOSwgMHhGRiwgMHg4MCwgMHg0MCwgMHhGRiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgzMCwgMHg0MCwgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwKKwkgIDB4MkUsIDB4MjcsIDB4MDAsIDB4MmIsIDB4MGMsIDB4MEYsIDB4RUYsIDB4MDAsCisJICAweEZlLCAweDBmLCAweDAxLCAweEMwLCAweDI3LCAweEVGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NSwgMHhEOSwgMHg1RCwgMHhFMSwgMHg4NiwgMHgxQiwgMHg4RSwgMHgyNiwKKwkgIDB4REEsIDB4OEQsIDB4REUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDE1LCAweDAzLAorCSAgfSwKKwkgfSwKKworCXsJCQkvKiAgbW9kZSM4OiAzMjAgeCAyNDAgIDMyQnBwICA2MEh6ICovCisJIDMyMCwgMjQwLCAzMiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEYzLCAweEI2LCAweEMwLCAweERELCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzIsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM4LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDNBLCAweDNBLCAweDNBLAorCSAgMHgzQSwgMHgzQSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwNiwgMHg2OCwgMHhBNywgMHg3RiwgMHg4MywgMHgyNCwgMHhGRiwgMHgwMywKKwkgIDB4MDAsIDB4NjAsIDB4NTksIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgwOCwgMHg0MywgMHgwOCwgMHg0MywKKwkgIDB4MDQsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDNBLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgzQSwgMHgzQSwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZCLCAweDlGLCAweDAxLCAweDAwLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGQiwgMHhGRiwgMHhGRiwgMHg5NywgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHhBMywgMHg3RiwgMHg3RiwgMHgwMCwgMHg4NSwgMHgxNiwgMHgyNCwgMHhGNSwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDAzLCAweDA5LCAweEZGLCAweDgwLCAweDQwLCAweEZGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDMwLCAweDQwLCAweDAwLCAweEZGLCAweEJGLCAweEZGLAorCSAgMHgyRSwgMHgyNywgMHgwMCwgMHgyYiwgMHgwYywgMHgwRiwgMHhFRiwgMHgwMCwKKwkgIDB4RmUsIDB4MGYsIDB4MDEsIDB4QzAsIDB4MjcsIDB4RUYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU1LCAweEQ5LCAweDVELCAweEUxLCAweDg2LCAweDFCLCAweDhFLCAweDI2LAorCSAgMHhEQSwgMHg4RCwgMHhERSwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MTUsIDB4MDMsCisJICB9LAorCSB9LAorfTsKKworI2RlZmluZSBudW1WR0FNb2RlcwkJKHNpemVvZihWR0FNb2RlKSAvIHNpemVvZihzdHJ1Y3QgTW9kZUluaXQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnCmluZGV4IDgyNWJiYzQuLjA2MWU3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgVlQ2NjU1CiAgICB0cmlzdGF0ZSAiVklBIFRlY2hub2xvZ2llcyBWVDY2NTUgc3VwcG9ydCIKLSAgIGRlcGVuZHMgb24gUENJCisgICBkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAgICBzZWxlY3QgV0lSRUxFU1NfRVhUCiAgICBzZWxlY3QgV0VYVF9QUklWCiAgICAtLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcKaW5kZXggODdiY2QyNi4uMTA1NWI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWVDY2NTYKIAl0cmlzdGF0ZSAiVklBIFRlY2hub2xvZ2llcyBWVDY2NTYgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQgorCWRlcGVuZHMgb24gVVNCICYmIFdMQU4KIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCmluZGV4IDdkNzZhN2YuLmFhYTcwZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCX0KIAl9CiAJKm5mY2h1bmtzID0gMDsKLQltZW1zZXQoZmNodW5rLCAwLCBzaXplb2YoZmNodW5rKSk7CisJbWVtc2V0KGZjaHVuaywgMCwgc2l6ZW9mKCpmY2h1bmspKTsKIAogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCmluZGV4IDQ3M2FhMWEuLmJlM2M5YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCkBAIC00NCw1ICs0NCwzIEBACiAKIG9iai0kKENPTkZJR19VU0JfQVRNKQkJKz0gYXRtLwogb2JqLSQoQ09ORklHX1VTQl9TUEVFRFRPVUNIKQkrPSBhdG0vCi0KLW9iai0kKENPTkZJR19VU0JfVUxQSSkJCSs9IG90Zy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDZkYWMzYjguLjA0OTVmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMTU5Nyw3ICsxNTk3LDkgQEAKIH0KIAogLyoqCi0gKiBDaGVjayB3aGV0aGVyIGEgbmV3IGJhbmR3aWR0aCBzZXR0aW5nIGV4Y2VlZHMgdGhlIGJ1cyBiYW5kd2lkdGguCisgKiB1c2JfaGNkX2FsbG9jX2JhbmR3aWR0aCAtIGNoZWNrIHdoZXRoZXIgYSBuZXcgYmFuZHdpZHRoIHNldHRpbmcgZXhjZWVkcworICoJCQkJdGhlIGJ1cyBiYW5kd2lkdGgKKyAqIEB1ZGV2OiB0YXJnZXQgJnVzYl9kZXZpY2UKICAqIEBuZXdfY29uZmlnOiBuZXcgY29uZmlndXJhdGlvbiB0byBpbnN0YWxsCiAgKiBAY3VyX2FsdDogdGhlIGN1cnJlbnQgYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nCiAgKiBAbmV3X2FsdDogYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIHRoYXQgaXMgYmVpbmcgaW5zdGFsbGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCAwNmFmOTcwLi4wY2VjNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTE2NTgsMTIgKzE2NTgsMTIgQEAKICNlbmRpZgogCiAvKioKLSAqIHVzYl9jb25maWd1cmVfZGV2aWNlX290ZyAtIEZJWE1FICh1c2Jjb3JlLWludGVybmFsKQorICogdXNiX2VudW1lcmF0ZV9kZXZpY2Vfb3RnIC0gRklYTUUgKHVzYmNvcmUtaW50ZXJuYWwpCiAgKiBAdWRldjogbmV3bHkgYWRkcmVzc2VkIGRldmljZSAoaW4gQUREUkVTUyBzdGF0ZSkKICAqCi0gKiBEbyBjb25maWd1cmF0aW9uIGZvciBPbi1UaGUtR28gZGV2aWNlcworICogRmluaXNoIGVudW1lcmF0aW9uIGZvciBPbi1UaGUtR28gZGV2aWNlcwogICovCi1zdGF0aWMgaW50IHVzYl9jb25maWd1cmVfZGV2aWNlX290ZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3N0YXRpYyBpbnQgdXNiX2VudW1lcmF0ZV9kZXZpY2Vfb3RnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludCBlcnIgPSAwOwogCkBAIC0xNzM0LDcgKzE3MzQsNyBAQAogCiAKIC8qKgotICogdXNiX2NvbmZpZ3VyZV9kZXZpY2UgLSBEZXRlY3QgYW5kIHByb2JlIGRldmljZSBpbnRmcy9vdGcgKHVzYmNvcmUtaW50ZXJuYWwpCisgKiB1c2JfZW51bWVyYXRlX2RldmljZSAtIFJlYWQgZGV2aWNlIGNvbmZpZ3MvaW50ZnMvb3RnICh1c2Jjb3JlLWludGVybmFsKQogICogQHVkZXY6IG5ld2x5IGFkZHJlc3NlZCBkZXZpY2UgKGluIEFERFJFU1Mgc3RhdGUpCiAgKgogICogVGhpcyBpcyBvbmx5IGNhbGxlZCBieSB1c2JfbmV3X2RldmljZSgpIGFuZCB1c2JfYXV0aG9yaXplX2RldmljZSgpCkBAIC0xNzQ1LDcgKzE3NDUsNyBAQAogICogdGhlIHN0cmluZyBkZXNjcmlwdG9ycywgYXMgdGhleSB3aWxsIGJlIGVycm9yZWQgb3V0IGJ5IHRoZSBkZXZpY2UKICAqIHVudGlsIGl0IGhhcyBiZWVuIGF1dGhvcml6ZWQuCiAgKi8KLXN0YXRpYyBpbnQgdXNiX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCitzdGF0aWMgaW50IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludCBlcnI7CiAKQEAgLTE3NjksNyArMTc2OSw3IEBACiAJCQkJCQkgICAgICB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIpOwogCQl1ZGV2LT5zZXJpYWwgPSB1c2JfY2FjaGVfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcik7CiAJfQotCWVyciA9IHVzYl9jb25maWd1cmVfZGV2aWNlX290Zyh1ZGV2KTsKKwllcnIgPSB1c2JfZW51bWVyYXRlX2RldmljZV9vdGcodWRldik7CiBmYWlsOgogCXJldHVybiBlcnI7CiB9CkBAIC0xNzc5LDggKzE3NzksOCBAQAogICogdXNiX25ld19kZXZpY2UgLSBwZXJmb3JtIGluaXRpYWwgZGV2aWNlIHNldHVwICh1c2Jjb3JlLWludGVybmFsKQogICogQHVkZXY6IG5ld2x5IGFkZHJlc3NlZCBkZXZpY2UgKGluIEFERFJFU1Mgc3RhdGUpCiAgKgotICogVGhpcyBpcyBjYWxsZWQgd2l0aCBkZXZpY2VzIHdoaWNoIGhhdmUgYmVlbiBlbnVtZXJhdGVkLCBidXQgbm90IHlldAotICogY29uZmlndXJlZC4gIFRoZSBkZXZpY2UgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIGJ1dCBub3QgZGVzY3JpcHRvcnMKKyAqIFRoaXMgaXMgY2FsbGVkIHdpdGggZGV2aWNlcyB3aGljaCBoYXZlIGJlZW4gZGV0ZWN0ZWQgYnV0IG5vdCBmdWxseQorICogZW51bWVyYXRlZC4gIFRoZSBkZXZpY2UgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIGJ1dCBub3QgZGVzY3JpcHRvcnMKICAqIGZvciBhbnkgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBsb2NrZWQgZWl0aGVyCiAgKiB0aGUgcGFyZW50IGh1YiAoaWYgdWRldiBpcyBhIG5vcm1hbCBkZXZpY2UpIG9yIGVsc2UgdGhlCiAgKiB1c2JfYnVzX2xpc3RfbG9jayAoaWYgdWRldiBpcyBhIHJvb3QgaHViKS4gIFRoZSBwYXJlbnQncyBwb2ludGVyIHRvCkBAIC0xODAzLDggKzE4MDMsOCBAQAogCWlmICh1ZGV2LT5wYXJlbnQpCiAJCXVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2LT5wYXJlbnQpOwogCi0JdXNiX2RldGVjdF9xdWlya3ModWRldik7CQkvKiBEZXRlcm1pbmUgcXVpcmtzICovCi0JZXJyID0gdXNiX2NvbmZpZ3VyZV9kZXZpY2UodWRldik7CS8qIGRldGVjdCAmIHByb2JlIGRldi9pbnRmcyAqLworCXVzYl9kZXRlY3RfcXVpcmtzKHVkZXYpOworCWVyciA9IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHVkZXYpOwkvKiBSZWFkIGRlc2NyaXB0b3JzICovCiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZmFpbDsKIAlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1ZGV2ICVkLCBidXNudW0gJWQsIG1pbm9yID0gJWRcbiIsCkBAIC0xODQ5LDIxICsxODQ5LDIzIEBACiAgKi8KIGludCB1c2JfZGVhdXRob3JpemVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQogewotCXVuc2lnbmVkIGNudDsKIAl1c2JfbG9ja19kZXZpY2UodXNiX2Rldik7CiAJaWYgKHVzYl9kZXYtPmF1dGhvcml6ZWQgPT0gMCkKIAkJZ290byBvdXRfdW5hdXRob3JpemVkOworCiAJdXNiX2Rldi0+YXV0aG9yaXplZCA9IDA7CiAJdXNiX3NldF9jb25maWd1cmF0aW9uKHVzYl9kZXYsIC0xKTsKKworCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOwogCXVzYl9kZXYtPnByb2R1Y3QgPSBrc3RyZHVwKCJuL2EgKHVuYXV0aG9yaXplZCkiLCBHRlBfS0VSTkVMKTsKKwlrZnJlZSh1c2JfZGV2LT5tYW51ZmFjdHVyZXIpOwogCXVzYl9kZXYtPm1hbnVmYWN0dXJlciA9IGtzdHJkdXAoIm4vYSAodW5hdXRob3JpemVkKSIsIEdGUF9LRVJORUwpOworCWtmcmVlKHVzYl9kZXYtPnNlcmlhbCk7CiAJdXNiX2Rldi0+c2VyaWFsID0ga3N0cmR1cCgibi9hICh1bmF1dGhvcml6ZWQpIiwgR0ZQX0tFUk5FTCk7Ci0Ja2ZyZWUodXNiX2Rldi0+Y29uZmlnKTsKLQl1c2JfZGV2LT5jb25maWcgPSBOVUxMOwotCWZvciAoY250ID0gMDsgY250IDwgdXNiX2Rldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7IGNudCsrKQotCQlrZnJlZSh1c2JfZGV2LT5yYXdkZXNjcmlwdG9yc1tjbnRdKTsKKworCXVzYl9kZXN0cm95X2NvbmZpZ3VyYXRpb24odXNiX2Rldik7CiAJdXNiX2Rldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPSAwOwotCWtmcmVlKHVzYl9kZXYtPnJhd2Rlc2NyaXB0b3JzKTsKKwogb3V0X3VuYXV0aG9yaXplZDoKIAl1c2JfdW5sb2NrX2RldmljZSh1c2JfZGV2KTsKIAlyZXR1cm4gMDsKQEAgLTE4NzMsMTUgKzE4NzUsMTEgQEAKIGludCB1c2JfYXV0aG9yaXplX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKIHsKIAlpbnQgcmVzdWx0ID0gMCwgYzsKKwogCXVzYl9sb2NrX2RldmljZSh1c2JfZGV2KTsKIAlpZiAodXNiX2Rldi0+YXV0aG9yaXplZCA9PSAxKQogCQlnb3RvIG91dF9hdXRob3JpemVkOwotCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOwotCXVzYl9kZXYtPnByb2R1Y3QgPSBOVUxMOwotCWtmcmVlKHVzYl9kZXYtPm1hbnVmYWN0dXJlcik7Ci0JdXNiX2Rldi0+bWFudWZhY3R1cmVyID0gTlVMTDsKLQlrZnJlZSh1c2JfZGV2LT5zZXJpYWwpOwotCXVzYl9kZXYtPnNlcmlhbCA9IE5VTEw7CisKIAlyZXN1bHQgPSB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodXNiX2Rldik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycigmdXNiX2Rldi0+ZGV2LApAQCAtMTg5NCwxMCArMTg5MiwxOCBAQAogCQkJImF1dGhvcml6YXRpb246ICVkXG4iLCByZXN1bHQpOwogCQlnb3RvIGVycm9yX2RldmljZV9kZXNjcmlwdG9yOwogCX0KKworCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOworCXVzYl9kZXYtPnByb2R1Y3QgPSBOVUxMOworCWtmcmVlKHVzYl9kZXYtPm1hbnVmYWN0dXJlcik7CisJdXNiX2Rldi0+bWFudWZhY3R1cmVyID0gTlVMTDsKKwlrZnJlZSh1c2JfZGV2LT5zZXJpYWwpOworCXVzYl9kZXYtPnNlcmlhbCA9IE5VTEw7CisKIAl1c2JfZGV2LT5hdXRob3JpemVkID0gMTsKLQlyZXN1bHQgPSB1c2JfY29uZmlndXJlX2RldmljZSh1c2JfZGV2KTsKKwlyZXN1bHQgPSB1c2JfZW51bWVyYXRlX2RldmljZSh1c2JfZGV2KTsKIAlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBlcnJvcl9jb25maWd1cmU7CisJCWdvdG8gZXJyb3JfZW51bWVyYXRlOwogCS8qIENob29zZSBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uLiAgVGhpcyByZWdpc3RlcnMgdGhlIGludGVyZmFjZXMKIAkgKiB3aXRoIHRoZSBkcml2ZXIgY29yZSBhbmQgbGV0cyBpbnRlcmZhY2UgZHJpdmVycyBiaW5kIHRvIHRoZW0uCiAJICovCkBAIC0xOTEyLDggKzE5MTgsMTAgQEAKIAkJfQogCX0KIAlkZXZfaW5mbygmdXNiX2Rldi0+ZGV2LCAiYXV0aG9yaXplZCB0byBjb25uZWN0XG4iKTsKLWVycm9yX2NvbmZpZ3VyZToKKworZXJyb3JfZW51bWVyYXRlOgogZXJyb3JfZGV2aWNlX2Rlc2NyaXB0b3I6CisJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1c2JfZGV2KTsKIGVycm9yX2F1dG9yZXN1bWU6CiBvdXRfYXV0aG9yaXplZDoKIAl1c2JfdW5sb2NrX2RldmljZSh1c2JfZGV2KTsJLy8gY29tcGxlbWVudHMgbG9ja3RyZWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwppbmRleCAxNTQ3NzAwLi40ODVlZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC04Miw5ICs4MiwxMyBAQAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJCQkJCVwKKwlpbnQgcmV0dmFsOwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdWRldi0+bmFtZSk7CQkJXAorCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsJCQkJCQlcCisJcmV0dmFsID0gc3ByaW50ZihidWYsICIlc1xuIiwgdWRldi0+bmFtZSk7CQkJXAorCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwkJCQkJXAorCXJldHVybiByZXR2YWw7CQkJCQkJCVwKIH0JCQkJCQkJCQlcCiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCAyZmI0MjA0Li4wZGFmZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTY2LDkgKzY2LDkgQEAKIC8qKgogICogdXNiX2ZpbmRfYWx0X3NldHRpbmcoKSAtIEdpdmVuIGEgY29uZmlndXJhdGlvbiwgZmluZCB0aGUgYWx0ZXJuYXRlIHNldHRpbmcKICAqIGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLgotICogQGNvbmZpZyAtIHRoZSBjb25maWd1cmF0aW9uIHRvIHNlYXJjaCAobm90IG5lY2Vzc2FyaWx5IHRoZSBjdXJyZW50IGNvbmZpZykuCi0gKiBAaWZhY2VfbnVtIC0gaW50ZXJmYWNlIG51bWJlciB0byBzZWFyY2ggaW4KLSAqIEBhbHRfbnVtIC0gYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIG51bWJlciB0byBzZWFyY2ggZm9yLgorICogQGNvbmZpZzogdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VhcmNoIChub3QgbmVjZXNzYXJpbHkgdGhlIGN1cnJlbnQgY29uZmlnKS4KKyAqIEBpZmFjZV9udW06IGludGVyZmFjZSBudW1iZXIgdG8gc2VhcmNoIGluCisgKiBAYWx0X251bTogYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIG51bWJlciB0byBzZWFyY2ggZm9yLgogICoKICAqIFNlYXJjaCB0aGUgY29uZmlndXJhdGlvbidzIGludGVyZmFjZSBjYWNoZSBmb3IgdGhlIGdpdmVuIGFsdCBzZXR0aW5nLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCmluZGV4IDEyMDZhMjYuLjI5NThhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCisrKyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCkBAIC02MTMsNyArNjEzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRiZ3BfZXh0ZXJuYWxfc3RhcnR1cCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGVoY2lfcmVzZXRfcG9ydChpbnQgcG9ydCkKK3N0YXRpYyBpbnQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQogewogCXUzMiBwb3J0c2M7CiAJdTMyIGRlbGF5X3RpbWUsIGRlbGF5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F1ZGlvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYwppbmRleCA1OGYyMjAzLi5hNjJhZjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYwpAQCAtMTU4LDYgKzE1OCw3IEBACiAKIHN0YXRpYyBpbnQgX19leGl0IGF1ZGlvX3VuYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7CisJZ2F1ZGlvX2NsZWFudXAoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKaW5kZXggYzQzYzg5Zi4uZGY3N2Y2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCkBAIC01NiwxMyArNTYsMTYgQEAKIERFQ0xBUkVfVUFDX0FDX0hFQURFUl9ERVNDUklQVE9SKDIpOwogCiAjZGVmaW5lIFVBQ19EVF9BQ19IRUFERVJfTEVOR1RICVVBQ19EVF9BQ19IRUFERVJfU0laRShGX0FVRElPX05VTV9JTlRFUkZBQ0VTKQorLyogMSBpbnB1dCB0ZXJtaW5hbCwgMSBvdXRwdXQgdGVybWluYWwgYW5kIDEgZmVhdHVyZSB1bml0ICovCisjZGVmaW5lIFVBQ19EVF9UT1RBTF9MRU5HVEggKFVBQ19EVF9BQ19IRUFERVJfTEVOR1RIICsgVUFDX0RUX0lOUFVUX1RFUk1JTkFMX1NJWkUgXAorCSsgVUFDX0RUX09VVFBVVF9URVJNSU5BTF9TSVpFICsgVUFDX0RUX0ZFQVRVUkVfVU5JVF9TSVpFKDApKQogLyogQi4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCiBzdGF0aWMgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8yIGFjX2hlYWRlcl9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVBQ19EVF9BQ19IRUFERVJfTEVOR1RILAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVQUNfSEVBREVSLAogCS5iY2RBREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAotCS53VG90YWxMZW5ndGggPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCksCisJLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVBQ19EVF9UT1RBTF9MRU5HVEgpLAogCS5iSW5Db2xsZWN0aW9uID0JRl9BVURJT19OVU1fSU5URVJGQUNFUywKIAkuYmFJbnRlcmZhY2VOciA9IHsKIAkJWzBdID0JCUZfQVVESU9fQUNfSU5URVJGQUNFLApAQCAtMjUyLDEyICsyNTUsMTIgQEAKIAogCWNvcHlfYnVmID0ga3phbGxvYyhzaXplb2YgKmNvcHlfYnVmLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWNvcHlfYnVmKQotCQlyZXR1cm4gKHN0cnVjdCBmX2F1ZGlvX2J1ZiAqKS1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY29weV9idWYtPmJ1ZiA9IGt6YWxsb2MoYnVmX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghY29weV9idWYtPmJ1ZikgewogCQlrZnJlZShjb3B5X2J1Zik7Ci0JCXJldHVybiAoc3RydWN0IGZfYXVkaW9fYnVmICopLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCiAJcmV0dXJuIGNvcHlfYnVmOwpAQCAtMzMyLDcgKzMzNSw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmNvcHlfYnVmLT5saXN0LCAmYXVkaW8tPnBsYXlfcXVldWUpOwogCQlzY2hlZHVsZV93b3JrKCZhdWRpby0+cGxheWJhY2tfd29yayk7CiAJCWNvcHlfYnVmID0gZl9hdWRpb19idWZmZXJfYWxsb2MoYXVkaW9fYnVmX3NpemUpOwotCQlpZiAoY29weV9idWYgPCAwKQorCQlpZiAoSVNfRVJSKGNvcHlfYnVmKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNTc2LDYgKzU3OSw4IEBACiAJCQl1c2JfZXBfZW5hYmxlKG91dF9lcCwgYXVkaW8tPm91dF9kZXNjKTsKIAkJCW91dF9lcC0+ZHJpdmVyX2RhdGEgPSBhdWRpbzsKIAkJCWF1ZGlvLT5jb3B5X2J1ZiA9IGZfYXVkaW9fYnVmZmVyX2FsbG9jKGF1ZGlvX2J1Zl9zaXplKTsKKwkJCWlmIChJU19FUlIoYXVkaW8tPmNvcHlfYnVmKSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKIAogCQkJLyoKIAkJCSAqIGFsbG9jYXRlIGEgYnVuY2ggb2YgcmVhZCBidWZmZXJzCkBAIC03ODcsNyArNzkyLDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogCiBhZGRfZmFpbDoKLQlnYXVkaW9fY2xlYW51cCgmYXVkaW8tPmNhcmQpOworCWdhdWRpb19jbGVhbnVwKCk7CiBzZXR1cF9mYWlsOgogCWtmcmVlKGF1ZGlvKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMKaW5kZXggODI1MjU5NWQuLjM1ZTA5MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYwpAQCAtMjg4LDYgKzI4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZ2F1ZGlvICp0aGVfY2FyZDsKIC8qKgogICogZ2F1ZGlvX3NldHVwIC0gc2V0dXAgQUxTQSBpbnRlcmZhY2UgYW5kIHByZXBhcmluZyBmb3IgVVNCIHRyYW5zZmVyCiAgKgpAQCAtMzAzLDYgKzMwNCw5IEBACiAJaWYgKHJldCkKIAkJRVJST1IoY2FyZCwgIndlIG5lZWQgYXQgbGVhc3Qgb25lIGNvbnRyb2wgZGV2aWNlXG4iKTsKIAorCWlmICghdGhlX2NhcmQpCisJCXRoZV9jYXJkID0gY2FyZDsKKwogCXJldHVybiByZXQ7CiAKIH0KQEAgLTMxMiw5ICszMTYsMTEgQEAKICAqCiAgKiBUaGlzIGlzIGNhbGxlZCB0byBmcmVlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IEBnYXVkaW9fc2V0dXAoKS4KICAqLwotdm9pZCBnYXVkaW9fY2xlYW51cChzdHJ1Y3QgZ2F1ZGlvICpjYXJkKQordm9pZCBnYXVkaW9fY2xlYW51cCh2b2lkKQogewotCWlmIChjYXJkKQotCQlnYXVkaW9fY2xvc2Vfc25kX2RldihjYXJkKTsKKwlpZiAodGhlX2NhcmQpIHsKKwkJZ2F1ZGlvX2Nsb3NlX3NuZF9kZXYodGhlX2NhcmQpOworCQl0aGVfY2FyZCA9IE5VTEw7CisJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uaAppbmRleCBjYzhkMTU5Li4wOGZmY2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmgKQEAgLTUxLDYgKzUxLDYgQEAKIH07CiAKIGludCBnYXVkaW9fc2V0dXAoc3RydWN0IGdhdWRpbyAqY2FyZCk7Ci12b2lkIGdhdWRpb19jbGVhbnVwKHN0cnVjdCBnYXVkaW8gKmNhcmQpOwordm9pZCBnYXVkaW9fY2xlYW51cCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fVV9BVURJT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1zY2hlZC5jCmluZGV4IDAwYTI5ODUuLmZmNDM3NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1zY2hlZC5jCkBAIC0zNyw3ICszNyw3IEBACiAJcGt0LT5pbmZvID0gMDsKIAlwa3QtPnByaXZfZGF0YSA9IE5VTEw7CiAKLQljcV9wdXQodXNiLT5lcDAtPmVtcHR5X2ZyYW1lX1EsIHBrdCk7CisJY3FfcHV0KCZ1c2ItPmVwMC0+ZW1wdHlfZnJhbWVfUSwgcGt0KTsKIH0KIAogLyogY29uZmlybSBzdWJtaXR0ZWQgcGFja2V0ICovCkBAIC01Nyw3ICs1Nyw3IEBACiAJCWlmICgodGQtPmRhdGEgKyB0ZC0+YWN0dWFsX2xlbikgJiYgdHJhbnNfbGVuKQogCQkJbWVtY3B5KHRkLT5kYXRhICsgdGQtPmFjdHVhbF9sZW4sIHBrdC0+ZGF0YSwKIAkJCSAgICAgICB0cmFuc19sZW4pOwotCQljcV9wdXQodXNiLT5lcDAtPmR1bW15X3BhY2tldHNfUSwgcGt0LT5kYXRhKTsKKwkJY3FfcHV0KCZ1c2ItPmVwMC0+ZHVtbXlfcGFja2V0c19RLCBwa3QtPmRhdGEpOwogCX0KIAogCXJlY3ljbGVfZnJhbWUodXNiLCBwa3QpOwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJfQogCiAJLyogdXBkYXRlIGZyYW1lIG9iamVjdCBmaWVsZHMgYmVmb3JlIHRyYW5zbWl0dGluZyAqLwotCXBrdCA9IGNxX2dldCh1c2ItPmVwMC0+ZW1wdHlfZnJhbWVfUSk7CisJcGt0ID0gY3FfZ2V0KCZ1c2ItPmVwMC0+ZW1wdHlfZnJhbWVfUSk7CiAJaWYgKCFwa3QpIHsKIAkJZmhjaV9kYmcodXNiLT5maGNpLCAidGhlcmUgaXMgbm8gZW1wdHkgZnJhbWVcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAogCXBrdC0+aW5mbyA9IDA7CiAJaWYgKGRhdGEgPT0gTlVMTCkgewotCQlkYXRhID0gY3FfZ2V0KHVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EpOworCQlkYXRhID0gY3FfZ2V0KCZ1c2ItPmVwMC0+ZHVtbXlfcGFja2V0c19RKTsKIAkJQlVHX09OKCFkYXRhKTsKIAkJcGt0LT5pbmZvID0gUEtUX0RVTU1ZX1BBQ0tFVDsKIAl9CkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJbGlzdF9kZWxfaW5pdCgmdGQtPmZyYW1lX2xoKTsKIAkJdGQtPnN0YXR1cyA9IFVTQl9URF9PSzsKIAkJaWYgKHBrdC0+aW5mbyAmIFBLVF9EVU1NWV9QQUNLRVQpCi0JCQljcV9wdXQodXNiLT5lcDAtPmR1bW15X3BhY2tldHNfUSwgcGt0LT5kYXRhKTsKKwkJCWNxX3B1dCgmdXNiLT5lcDAtPmR1bW15X3BhY2tldHNfUSwgcGt0LT5kYXRhKTsKIAkJcmVjeWNsZV9mcmFtZSh1c2IsIHBrdCk7CiAJCXVzYi0+YWN0dWFsX2ZyYW1lLT50b3RhbF9ieXRlcyAtPSAobGVuICsgUFJPVE9DT0xfT1ZFUkhFQUQpOwogCQlmaGNpX2Vycih1c2ItPmZoY2ksICJob3N0IHRyYW5zYWN0aW9uIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKaW5kZXggYjQwMzMyMi4uZDIyNGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYwpAQCAtMTA2LDMzICsxMDYsMzMgQEAKIAkJCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQoZXAtPnRkX2Jhc2UpKTsKIAogCQlpZiAoZXAtPmNvbmZfZnJhbWVfUSkgewotCQkJc2l6ZSA9IGNxX2hvd21hbnkoZXAtPmNvbmZfZnJhbWVfUSk7CisJCQlzaXplID0gY3FfaG93bWFueSgmZXAtPmNvbmZfZnJhbWVfUSk7CiAJCQlmb3IgKDsgc2l6ZTsgc2l6ZS0tKSB7Ci0JCQkJc3RydWN0IHBhY2tldCAqcGt0ID0gY3FfZ2V0KGVwLT5jb25mX2ZyYW1lX1EpOworCQkJCXN0cnVjdCBwYWNrZXQgKnBrdCA9IGNxX2dldCgmZXAtPmNvbmZfZnJhbWVfUSk7CiAKIAkJCQlrZnJlZShwa3QpOwogCQkJfQotCQkJY3FfZGVsZXRlKGVwLT5jb25mX2ZyYW1lX1EpOworCQkJY3FfZGVsZXRlKCZlcC0+Y29uZl9mcmFtZV9RKTsKIAkJfQogCiAJCWlmIChlcC0+ZW1wdHlfZnJhbWVfUSkgewotCQkJc2l6ZSA9IGNxX2hvd21hbnkoZXAtPmVtcHR5X2ZyYW1lX1EpOworCQkJc2l6ZSA9IGNxX2hvd21hbnkoJmVwLT5lbXB0eV9mcmFtZV9RKTsKIAkJCWZvciAoOyBzaXplOyBzaXplLS0pIHsKLQkJCQlzdHJ1Y3QgcGFja2V0ICpwa3QgPSBjcV9nZXQoZXAtPmVtcHR5X2ZyYW1lX1EpOworCQkJCXN0cnVjdCBwYWNrZXQgKnBrdCA9IGNxX2dldCgmZXAtPmVtcHR5X2ZyYW1lX1EpOwogCiAJCQkJa2ZyZWUocGt0KTsKIAkJCX0KLQkJCWNxX2RlbGV0ZShlcC0+ZW1wdHlfZnJhbWVfUSk7CisJCQljcV9kZWxldGUoJmVwLT5lbXB0eV9mcmFtZV9RKTsKIAkJfQogCiAJCWlmIChlcC0+ZHVtbXlfcGFja2V0c19RKSB7Ci0JCQlzaXplID0gY3FfaG93bWFueShlcC0+ZHVtbXlfcGFja2V0c19RKTsKKwkJCXNpemUgPSBjcV9ob3dtYW55KCZlcC0+ZHVtbXlfcGFja2V0c19RKTsKIAkJCWZvciAoOyBzaXplOyBzaXplLS0pIHsKLQkJCQl1OCAqYnVmZiA9IGNxX2dldChlcC0+ZHVtbXlfcGFja2V0c19RKTsKKwkJCQl1OCAqYnVmZiA9IGNxX2dldCgmZXAtPmR1bW15X3BhY2tldHNfUSk7CiAKIAkJCQlrZnJlZShidWZmKTsKIAkJCX0KLQkJCWNxX2RlbGV0ZShlcC0+ZHVtbXlfcGFja2V0c19RKTsKKwkJCWNxX2RlbGV0ZSgmZXAtPmR1bW15X3BhY2tldHNfUSk7CiAJCX0KIAogCQlrZnJlZShlcCk7CkBAIC0xNzUsMTAgKzE3NSw5IEBACiAJZXAtPnRkX2Jhc2UgPSBjcG1fbXVyYW1fYWRkcihlcF9vZmZzZXQpOwogCiAJLyogemVybyBhbGwgcXVldWUgcG9pbnRlcnMgKi8KLQllcC0+Y29uZl9mcmFtZV9RID0gY3FfbmV3KHJpbmdfbGVuICsgMik7Ci0JZXAtPmVtcHR5X2ZyYW1lX1EgPSBjcV9uZXcocmluZ19sZW4gKyAyKTsKLQllcC0+ZHVtbXlfcGFja2V0c19RID0gY3FfbmV3KHJpbmdfbGVuICsgMik7Ci0JaWYgKCFlcC0+Y29uZl9mcmFtZV9RIHx8ICFlcC0+ZW1wdHlfZnJhbWVfUSB8fCAhZXAtPmR1bW15X3BhY2tldHNfUSkgeworCWlmIChjcV9uZXcoJmVwLT5jb25mX2ZyYW1lX1EsIHJpbmdfbGVuICsgMikgfHwKKwkgICAgY3FfbmV3KCZlcC0+ZW1wdHlfZnJhbWVfUSwgcmluZ19sZW4gKyAyKSB8fAorCSAgICBjcV9uZXcoJmVwLT5kdW1teV9wYWNrZXRzX1EsIHJpbmdfbGVuICsgMikpIHsKIAkJZXJyX2ZvciA9ICJmcmFtZV9xdWV1ZXMiOwogCQlnb3RvIGVycjsKIAl9CkBAIC0xOTksOCArMTk4LDggQEAKIAkJCWVycl9mb3IgPSAiYnVmZmVyIjsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCWNxX3B1dChlcC0+ZW1wdHlfZnJhbWVfUSwgcGt0KTsKLQkJY3FfcHV0KGVwLT5kdW1teV9wYWNrZXRzX1EsIGJ1ZmYpOworCQljcV9wdXQoJmVwLT5lbXB0eV9mcmFtZV9RLCBwa3QpOworCQljcV9wdXQoJmVwLT5kdW1teV9wYWNrZXRzX1EsIGJ1ZmYpOwogCX0KIAogCS8qIHdlIHB1dCB0aGUgZW5kcG9pbnQgcGFyYW1ldGVyIFJBTSByaWdodCBiZWhpbmQgdGhlIFREIHJpbmcgKi8KQEAgLTMxOSw3ICszMTgsNyBAQAogCQlpZiAoKGJ1ZiA9PSBEVU1NWTJfQkRfQlVGRkVSKSAmJiAhKHRkX3N0YXR1cyAmIH5URF9XKSkKIAkJCWNvbnRpbnVlOwogCi0JCXBrdCA9IGNxX2dldChlcC0+Y29uZl9mcmFtZV9RKTsKKwkJcGt0ID0gY3FfZ2V0KCZlcC0+Y29uZl9mcmFtZV9RKTsKIAkJaWYgKCFwa3QpCiAJCQlmaGNpX2Vycih1c2ItPmZoY2ksICJubyBmcmFtZSB0byBjb25maXJtXG4iKTsKIApAQCAtNDYwLDkgKzQ1OSw5IEBACiAJCW91dF9iZTE2KCZ0ZC0+bGVuZ3RoLCBwa3QtPmxlbik7CiAKIAkvKiBwdXQgdGhlIGZyYW1lIHRvIHRoZSBjb25maXJtYXRpb24gcXVldWUgKi8KLQljcV9wdXQoZXAtPmNvbmZfZnJhbWVfUSwgcGt0KTsKKwljcV9wdXQoJmVwLT5jb25mX2ZyYW1lX1EsIHBrdCk7CiAKLQlpZiAoY3FfaG93bWFueShlcC0+Y29uZl9mcmFtZV9RKSA9PSAxKQorCWlmIChjcV9ob3dtYW55KCZlcC0+Y29uZl9mcmFtZV9RKSA9PSAxKQogCQlvdXRfOCgmdXNiLT5maGNpLT5yZWdzLT51c2JfY29tbSwgVVNCX0NNRF9TVFJfRklGTyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLmgKaW5kZXggNzExNjI4NC4uNzJkYWUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLmgKQEAgLTQyMyw5ICs0MjMsOSBAQAogCXN0cnVjdCB1c2JfdGQgX19pb21lbSAqdGRfYmFzZTsgLyogZmlyc3QgVEQgaW4gdGhlIHJpbmcgKi8KIAlzdHJ1Y3QgdXNiX3RkIF9faW9tZW0gKmNvbmZfdGQ7IC8qIG5leHQgVEQgZm9yIGNvbmZpcm0gYWZ0ZXIgdHJhbnNhYyAqLwogCXN0cnVjdCB1c2JfdGQgX19pb21lbSAqZW1wdHlfdGQ7LyogbmV4dCBURCBmb3IgbmV3IHRyYW5zYWN0aW9uIHJlcS4gKi8KLQlzdHJ1Y3Qga2ZpZm8gKmVtcHR5X2ZyYW1lX1E7ICAvKiBFbXB0eSBmcmFtZXMgbGlzdCB0byB1c2UgKi8KLQlzdHJ1Y3Qga2ZpZm8gKmNvbmZfZnJhbWVfUTsgICAvKiBmcmFtZXMgcGFzc2VkIHRvIFREcyx3YWl0aW5nIGZvciB0eCAqLwotCXN0cnVjdCBrZmlmbyAqZHVtbXlfcGFja2V0c19ROy8qIGR1bW15IHBhY2tldHMgZm9yIHRoZSBDUkMgb3ZlcnVuICovCisJc3RydWN0IGtmaWZvIGVtcHR5X2ZyYW1lX1E7ICAvKiBFbXB0eSBmcmFtZXMgbGlzdCB0byB1c2UgKi8KKwlzdHJ1Y3Qga2ZpZm8gY29uZl9mcmFtZV9ROyAgIC8qIGZyYW1lcyBwYXNzZWQgdG8gVERzLHdhaXRpbmcgZm9yIHR4ICovCisJc3RydWN0IGtmaWZvIGR1bW15X3BhY2tldHNfUTsvKiBkdW1teSBwYWNrZXRzIGZvciB0aGUgQ1JDIG92ZXJ1biAqLwogCiAJYm9vbCBhbHJlYWR5X3B1c2hlZF9kdW1teV9iZDsKIH07CkBAIC00OTMsOSArNDkzLDkgQEAKIH0KIAogLyogZmlmbyBvZiBwb2ludGVycyAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qga2ZpZm8gKmNxX25ldyhpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGNxX25ldyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIGludCBzaXplKQogewotCXJldHVybiBrZmlmb19hbGxvYyhzaXplICogc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwsIE5VTEwpOworCXJldHVybiBrZmlmb19hbGxvYyhmaWZvLCBzaXplICogc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY3FfZGVsZXRlKHN0cnVjdCBrZmlmbyAqa2ZpZm8pCkBAIC01MDUsMTkgKzUwNSwxOSBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcV9ob3dtYW55KHN0cnVjdCBrZmlmbyAqa2ZpZm8pCiB7Ci0JcmV0dXJuIF9fa2ZpZm9fbGVuKGtmaWZvKSAvIHNpemVvZih2b2lkICopOworCXJldHVybiBrZmlmb19sZW4oa2ZpZm8pIC8gc2l6ZW9mKHZvaWQgKik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNxX3B1dChzdHJ1Y3Qga2ZpZm8gKmtmaWZvLCB2b2lkICpwKQogewotCXJldHVybiBfX2tmaWZvX3B1dChrZmlmbywgKHZvaWQgKikmcCwgc2l6ZW9mKHApKTsKKwlyZXR1cm4ga2ZpZm9faW4oa2ZpZm8sICh2b2lkICopJnAsIHNpemVvZihwKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqY3FfZ2V0KHN0cnVjdCBrZmlmbyAqa2ZpZm8pCiB7CiAJdm9pZCAqcCA9IE5VTEw7CiAKLQlfX2tmaWZvX2dldChrZmlmbywgKHZvaWQgKikmcCwgc2l6ZW9mKHApKTsKKwlrZmlmb19vdXQoa2ZpZm8sICh2b2lkICopJnAsIHNpemVvZihwKSk7CiAJcmV0dXJuIHA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCmluZGV4IDFkOGUzOWEuLjFlYjllNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwpAQCAtNjAsNiArNjAsNyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFwcGxlZGlzcGxheV90YWJsZSBbXSA9IHsKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjE4KSB9LAogCXsgQVBQTEVESVNQTEFZX0RFVklDRSgweDkyMTkpIH0sCisJeyBBUFBMRURJU1BMQVlfREVWSUNFKDB4OTIxYykgfSwKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjFkKSB9LAogCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTcyLDggKzczLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLwogCXN0cnVjdCB1cmIgKnVyYjsJCS8qIHVzYiByZXF1ZXN0IGJsb2NrICovCiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwkvKiBiYWNrbGlnaHQgZGV2aWNlICovCi0JY2hhciAqdXJiZGF0YTsJCQkvKiBpbnRlcnJ1cHQgVVJCIGRhdGEgYnVmZmVyICovCi0JY2hhciAqbXNnZGF0YTsJCQkvKiBjb250cm9sIG1lc3NhZ2UgZGF0YSBidWZmZXIgKi8KKwl1OCAqdXJiZGF0YTsJCQkvKiBpbnRlcnJ1cHQgVVJCIGRhdGEgYnVmZmVyICovCisJdTggKm1zZ2RhdGE7CQkJLyogY29udHJvbCBtZXNzYWdlIGRhdGEgYnVmZmVyICovCiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJaW50IGJ1dHRvbl9wcmVzc2VkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCmluZGV4IDYwMmVlMDUuLjU5ODYwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX2Z1bmNfXywgZXJyKTsKIAkJCWdvdG8gd3JhcGVycjsKIAkJfQotCX0gd2hpbGUgKGkgPiAwKTsKKwl9IHdoaWxlIChyZWMpOwogCiAJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KIAllcnIgPSBlbWk2Ml9zZXRfcmVzZXQoZGV2LDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCmluZGV4IGZlNDkzNGQuLmFkMjZlNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKQEAgLTI5LDYgKzI5LDggQEAKIHsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKIAl2b2lkIF9faW9tZW0gKmVwaW8gPSBod19lcC0+cmVnczsKKwl1OCBlcG51bSA9IGh3X2VwLT5lcG51bTsKKwl1MTYgZG1hX3JlZyA9IDA7CiAKIAlwcmVmZXRjaCgodTggKilzcmMpOwogCkBAIC0zOSw2NyArNDEsMTEzIEBACiAKIAlkdW1wX2ZpZm9fZGF0YShzcmMsIGxlbik7CiAKLQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpc3JjICYgMHgwMSkpCi0JCW91dHN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAotCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOwotCWVsc2UKLQkJb3V0c3coKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAotCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOwotfQorCWlmICghQU5PTUFMWV8wNTAwMDM4MCAmJiBlcG51bSAhPSAwKSB7CisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgaW50KXNyYywKKwkJCSh1bnNpZ25lZCBpbnQpKHNyYyArIGxlbikpOwogCisJCS8qIFNldHVwIERNQSBhZGRyZXNzIHJlZ2lzdGVyICovCisJCWRtYV9yZWcgPSAodTE2KSAoKHUzMikgc3JjICYgMHhGRkZGKTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0xPVyksIGRtYV9yZWcpOworCQlTU1lOQygpOworCisJCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIHNyYyA+PiAxNikgJiAweEZGRkYpOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfSElHSCksIGRtYV9yZWcpOworCQlTU1lOQygpOworCisJCS8qIFNldHVwIERNQSBjb3VudCByZWdpc3RlciAqLworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0xPVyksIGxlbik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ09VTlRfSElHSCksIDApOworCQlTU1lOQygpOworCisJCS8qIEVuYWJsZSB0aGUgRE1BICovCisJCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQSB8IERJUkVDVElPTjsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CisKKwkJLyogV2FpdCBmb3IgY29tcGVsZXRlICovCisJCXdoaWxlICghKGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpICYgKDEgPDwgZXBudW0pKSkKKwkJCWNwdV9yZWxheCgpOworCisJCS8qIGFja25vd2xlZGdlIGRtYSBpbnRlcnJ1cHQgKi8KKwkJYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCgxIDw8IGVwbnVtKTsKKwkJU1NZTkMoKTsKKworCQkvKiBSZXNldCBETUEgKi8KKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgMCk7CisJCVNTWU5DKCk7CisJfSBlbHNlIHsKKwkJU1NZTkMoKTsKKworCQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpc3JjICYgMHgwMSkpCisJCQlvdXRzd184KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKKwkJCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7CisJCWVsc2UKKwkJCW91dHN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKKwkJCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7CisKKwl9Cit9CiAvKgogICogVW5sb2FkIGFuIGVuZHBvaW50J3MgRklGTwogICovCiB2b2lkIG11c2JfcmVhZF9maWZvKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGxlbiwgdTggKmRzdCkKIHsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKLQotI2lmZGVmIENPTkZJR19CRjUyeAogCXU4IGVwbnVtID0gaHdfZXAtPmVwbnVtOwogCXUxNiBkbWFfcmVnID0gMDsKIAotCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpZHN0LAotCQkodW5zaWduZWQgaW50KShkc3QgKyBsZW4pKTsKKwlpZiAoQU5PTUFMWV8wNTAwMDQ2NyAmJiBlcG51bSAhPSAwKSB7CiAKLQkvKiBTZXR1cCBETUEgYWRkcmVzcyByZWdpc3RlciAqLwotCWRtYV9yZWcgPSAodTE2KSAoKHUzMikgZHN0ICYgMHhGRkZGKTsKLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfTE9XKSwgZG1hX3JlZyk7Ci0JU1NZTkMoKTsKKwkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGludClkc3QsCisJCQkodW5zaWduZWQgaW50KShkc3QgKyBsZW4pKTsKIAotCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIGRzdCA+PiAxNikgJiAweEZGRkYpOwotCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7Ci0JU1NZTkMoKTsKKwkJLyogU2V0dXAgRE1BIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwkJZG1hX3JlZyA9ICh1MTYpICgodTMyKSBkc3QgJiAweEZGRkYpOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfTE9XKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBTZXR1cCBETUEgY291bnQgcmVnaXN0ZXIgKi8KLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0xPVyksIGxlbik7Ci0JYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9ISUdIKSwgMCk7Ci0JU1NZTkMoKTsKKwkJZG1hX3JlZyA9ICh1MTYpICgoKHUzMikgZHN0ID4+IDE2KSAmIDB4RkZGRik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBFbmFibGUgdGhlIERNQSAqLwotCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQTsKLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCBkbWFfcmVnKTsKLQlTU1lOQygpOworCQkvKiBTZXR1cCBETUEgY291bnQgcmVnaXN0ZXIgKi8KKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9MT1cpLCBsZW4pOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0hJR0gpLCAwKTsKKwkJU1NZTkMoKTsKIAotCS8qIFdhaXQgZm9yIGNvbXBlbGV0ZSAqLwotCXdoaWxlICghKGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpICYgKDEgPDwgZXBudW0pKSkKLQkJY3B1X3JlbGF4KCk7CisJCS8qIEVuYWJsZSB0aGUgRE1BICovCisJCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBhY2tub3dsZWRnZSBkbWEgaW50ZXJydXB0ICovCi0JYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCgxIDw8IGVwbnVtKTsKLQlTU1lOQygpOworCQkvKiBXYWl0IGZvciBjb21wZWxldGUgKi8KKwkJd2hpbGUgKCEoYmZpbl9yZWFkX1VTQl9ETUFfSU5URVJSVVBUKCkgJiAoMSA8PCBlcG51bSkpKQorCQkJY3B1X3JlbGF4KCk7CiAKLQkvKiBSZXNldCBETUEgKi8KLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCAwKTsKLQlTU1lOQygpOwotI2Vsc2UKLQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMHgwMSkpCi0JCWluc3dfOCgodW5zaWduZWQgbG9uZylmaWZvLCBkc3QsCi0JCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7Ci0JZWxzZQotCQlpbnN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIGRzdCwKLQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKLSNlbmRpZgorCQkvKiBhY2tub3dsZWRnZSBkbWEgaW50ZXJydXB0ICovCisJCWJmaW5fd3JpdGVfVVNCX0RNQV9JTlRFUlJVUFQoMSA8PCBlcG51bSk7CisJCVNTWU5DKCk7CiAKKwkJLyogUmVzZXQgRE1BICovCisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ1RSTCksIDApOworCQlTU1lOQygpOworCX0gZWxzZSB7CisJCVNTWU5DKCk7CisJCS8qIFJlYWQgdGhlIGxhc3QgYnl0ZSBvZiBwYWNrZXQgd2l0aCBvZGQgc2l6ZSBmcm9tIGFkZHJlc3MgZmlmbyArIDQKKwkJICogdG8gdHJpZ2dlciAxIGJ5dGUgYWNjZXNzIHRvIEVQMCBGSUZPLgorCQkgKi8KKwkJaWYgKGxlbiA9PSAxKQorCQkJKmRzdCA9ICh1OClpbncoKHVuc2lnbmVkIGxvbmcpZmlmbyArIDQpOworCQllbHNlIHsKKwkJCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylkc3QgJiAweDAxKSkKKwkJCQlpbnN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgZHN0LCBsZW4gPj4gMSk7CisJCQllbHNlCisJCQkJaW5zdygodW5zaWduZWQgbG9uZylmaWZvLCBkc3QsIGxlbiA+PiAxKTsKKworCQkJaWYgKGxlbiAmIDB4MDEpCisJCQkJKihkc3QgKyBsZW4gLSAxKSA9ICh1OClpbncoKHVuc2lnbmVkIGxvbmcpZmlmbyArIDQpOworCQl9CisJfQogCURCRyg0LCAiJWNYIGVwJWQgZmlmbyAlcCBjb3VudCAlZCBidWYgJXBcbiIsCiAJCQknUicsIGh3X2VwLT5lcG51bSwgZmlmbywgbGVuLCBkc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmggYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmgKaW5kZXggMTBiN2Q3NS4uYmQ5MzUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uaApAQCAtNjksNyArNjksNiBAQAogI2RlZmluZSBkdW1wX2ZpZm9fZGF0YShidWYsIGxlbikJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CRjUyeAogCiAjZGVmaW5lIFVTQl9ETUFfQkFTRQkJVVNCX0RNQV9JTlRFUlJVUFQKICNkZWZpbmUgVVNCX0RNQXhfQ1RSTAkJMHgwNApAQCAtNzksNyArNzgsNiBAQAogI2RlZmluZSBVU0JfRE1BeF9DT1VOVF9ISUdICTB4MTQKIAogI2RlZmluZSBVU0JfRE1BX1JFRyhlcCwgcmVnKQkoVVNCX0RNQV9CQVNFICsgMHgyMCAqIGVwICsgcmVnKQotI2VuZGlmCiAKIC8qIEFsbW9zdCAxIHNlY29uZCAqLwogI2RlZmluZSBUSU1FUl9ERUxBWQkoMSAqIEhaKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCmluZGV4IGVmMjMzMmEuLmE0NGE0NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKQEAgLTExNTQsOCArMTE1NCwxMSBAQAogCXN0cnVjdCBtdXNiX2h3X2VwCSpod19lcCA9IE5VTEw7CiAJdTMyCQkJcngsIHR4OwogCWludAkJCWksIGluZGV4OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJY3BwaSA9IGNvbnRhaW5lcl9vZihtdXNiLT5kbWFfY29udHJvbGxlciwgc3RydWN0IGNwcGksIGNvbnRyb2xsZXIpOworCWlmIChjcHBpLT5pcnEpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKIAl0aWJhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CiAKQEAgLTEyODUsNiArMTI4OCw5IEBACiAJLyogd3JpdGUgdG8gQ1BQSSBFT0kgcmVnaXN0ZXIgdG8gcmUtZW5hYmxlIGludGVycnVwdHMgKi8KIAltdXNiX3dyaXRlbCh0aWJhc2UsIERBVklOQ0lfQ1BQSV9FT0lfUkVHLCAwKTsKIAorCWlmIChjcHBpLT5pcnEpCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwppbmRleCBlMTZmZjYwLi42NjkxMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIm11c2JfY29yZS5oIgogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KLSNkZWZpbmUgR1BJT19uVkJVU19EUlYJCTE0NAorI2RlZmluZSBHUElPX25WQlVTX0RSVgkJMTYwCiAjZW5kaWYKIAogI2luY2x1ZGUgImRhdmluY2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IGJmZTA4ZjQuLjVlYjkzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtMTMxOSw3ICsxMzE5LDcgQEAKICNlbmRpZgogCXU4IHJlZzsKIAljaGFyICp0eXBlOwotCWNoYXIgYUluZm9bNzhdLCBhUmV2aXNpb25bMzJdLCBhRGF0ZVsxMl07CisJY2hhciBhSW5mb1s5MF0sIGFSZXZpc2lvblszMl0sIGFEYXRlWzEyXTsKIAl2b2lkIF9faW9tZW0JKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJaW50CQlzdGF0dXMgPSAwOwogCWludAkJaTsKQEAgLTE1MjEsNiArMTUyMSwxNCBAQAogCQkoZGV2Y3RsICYgTVVTQl9ERVZDVExfSE0pID8gImhvc3QiIDogInBlcmlwaGVyYWwiLAogCQltdXNiLT5pbnRfdXNiLCBtdXNiLT5pbnRfdHgsIG11c2ItPmludF9yeCk7CiAKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKKwlpZiAoaXNfb3RnX2VuYWJsZWQobXVzYikgfHwgaXNfcGVyaXBoZXJhbF9lbmFibGVkKG11c2IpKQorCQlpZiAoIW11c2ItPmdhZGdldF9kcml2ZXIpIHsKKwkJCURCRyg1LCAiTm8gZ2FkZ2V0IGRyaXZlciBsb2FkZWRcbiIpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisjZW5kaWYKKwogCS8qIHRoZSBjb3JlIGNhbiBpbnRlcnJ1cHQgdXMgZm9yIG11bHRpcGxlIHJlYXNvbnM7IGRvY3MgaGF2ZQogCSAqIGEgZ2VuZXJpYyBpbnRlcnJ1cHQgZmxvd2NoYXJ0IHRvIGZvbGxvdwogCSAqLwpAQCAtMjEzOSw3ICsyMTQ3LDcgQEAKIAlyZXR1cm4gbXVzYl9pbml0X2NvbnRyb2xsZXIoZGV2LCBpcnEsIGJhc2UpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBtdXNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2V4aXQgbXVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbXVzYgkqbXVzYiA9IGRldl90b19tdXNiKCZwZGV2LT5kZXYpOwogCXZvaWQgX19pb21lbQkqY3RybF9iYXNlID0gbXVzYi0+Y3RybF9iYXNlOwpAQCAtMjIzMSw3ICsyMjM5LDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucG0JCT0gTVVTQl9ERVZfUE1fT1BTLAogCX0sCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtdXNiX3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2V4aXRfcChtdXNiX3JlbW92ZSksCiAJLnNodXRkb3duCT0gbXVzYl9zaHV0ZG93biwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwppbmRleCBjNDliOWJhLi5jYmNmMTRhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCQlzaXplX3QgcmVxdWVzdF9zaXplOwogCiAJCQkvKiBzZXR1cCBETUEsIHRoZW4gcHJvZ3JhbSBlbmRwb2ludCBDU1IgKi8KLQkJCXJlcXVlc3Rfc2l6ZSA9IG1pbihyZXF1ZXN0LT5sZW5ndGgsCisJCQlyZXF1ZXN0X3NpemUgPSBtaW5fdChzaXplX3QsIHJlcXVlc3QtPmxlbmd0aCwKIAkJCQkJCW11c2JfZXAtPmRtYS0+bWF4X2xlbik7CiAJCQlpZiAocmVxdWVzdF9zaXplIDwgbXVzYl9lcC0+cGFja2V0X3N6KQogCQkJCW11c2JfZXAtPmRtYS0+ZGVzaXJlZF9tb2RlID0gMDsKQEAgLTMxOSw3ICszMTksNyBAQAogCQkJdXNlX2RtYSA9IHVzZV9kbWEgJiYgYy0+Y2hhbm5lbF9wcm9ncmFtKAogCQkJCQltdXNiX2VwLT5kbWEsIG11c2JfZXAtPnBhY2tldF9zeiwKIAkJCQkJbXVzYl9lcC0+ZG1hLT5kZXNpcmVkX21vZGUsCi0JCQkJCXJlcXVlc3QtPmRtYSwgcmVxdWVzdF9zaXplKTsKKwkJCQkJcmVxdWVzdC0+ZG1hICsgcmVxdWVzdC0+YWN0dWFsLCByZXF1ZXN0X3NpemUpOwogCQkJaWYgKHVzZV9kbWEpIHsKIAkJCQlpZiAobXVzYl9lcC0+ZG1hLT5kZXNpcmVkX21vZGUgPT0gMCkgewogCQkJCQkvKgpAQCAtNTE1LDEyICs1MTUsMTIgQEAKIAkJCWlmIChjc3IgJiBNVVNCX1RYQ1NSX0ZJRk9OT1RFTVBUWSkKIAkJCQlyZXR1cm47CiAKLQkJCWlmICghbXVzYl9lcC0+ZGVzYykgeworCQkJcmVxdWVzdCA9IG11c2JfZXAtPmRlc2MgPyBuZXh0X3JlcXVlc3QobXVzYl9lcCkgOiBOVUxMOworCQkJaWYgKCFyZXF1ZXN0KSB7CiAJCQkJREJHKDQsICIlcyBpZGxlIG5vd1xuIiwKIAkJCQkJbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUpOwogCQkJCXJldHVybjsKLQkJCX0gZWxzZQotCQkJCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3QobXVzYl9lcCk7CisJCQl9CiAJCX0KIAogCQl0eHN0YXRlKG11c2IsIHRvX211c2JfcmVxdWVzdChyZXF1ZXN0KSk7CkBAIC03NDYsNiArNzQ2LDggQEAKIAltdXNiX2VwX3NlbGVjdChtYmFzZSwgZXBudW0pOwogCiAJcmVxdWVzdCA9IG5leHRfcmVxdWVzdChtdXNiX2VwKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybjsKIAogCWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENTUik7CiAJZG1hID0gaXNfZG1hX2NhcGFibGUoKSA/IG11c2JfZXAtPmRtYSA6IE5VTEw7CkBAIC0xNzMxLDYgKzE3MzMsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCiAJCW90Z19zZXRfcGVyaXBoZXJhbChtdXNiLT54Y2VpdiwgJm11c2ItPmcpOworCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOwogCQltdXNiLT5pc19hY3RpdmUgPSAxOwogCiAJCS8qIEZJWE1FIHRoaXMgaWdub3JlcyB0aGUgc29mdGNvbm5lY3QgZmxhZy4gIERyaXZlcnMgYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYwppbmRleCA4ZmJhM2YxLi41M2QwNjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogCQkJbXVzYi0+ZXAwX3N0YXRlID0gTVVTQl9FUDBfU1RBR0VfU1RBVFVTSU47CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCUVSUigiU2V0dXBFbmQgY2FtZSBpbiBhIHdyb25nIGVwMHN0YWdlICVzIiwKKwkJCUVSUigiU2V0dXBFbmQgY2FtZSBpbiBhIHdyb25nIGVwMHN0YWdlICVzXG4iLAogCQkJICAgIGRlY29kZV9lcDBzdGFnZShtdXNiLT5lcDBfc3RhdGUpKTsKIAkJfQogCQljc3IgPSBtdXNiX3JlYWR3KHJlZ3MsIE1VU0JfQ1NSMCk7CkBAIC03ODcsMTIgKzc4NywxOCBAQAogCQkJCWhhbmRsZWQgPSBzZXJ2aWNlX3plcm9fZGF0YV9yZXF1ZXN0KAogCQkJCQkJbXVzYiwgJnNldHVwKTsKIAorCQkJCS8qCisJCQkJICogV2UncmUgZXhwZWN0aW5nIG5vIGRhdGEgaW4gYW55IGNhc2UsIHNvCisJCQkJICogYWx3YXlzIHNldCB0aGUgREFUQUVORCBiaXQgLS0gZG9pbmcgdGhpcworCQkJCSAqIGhlcmUgaGVscHMgYXZvaWQgU2V0dXBFbmQgaW50ZXJydXB0IGNvbWluZworCQkJCSAqIGluIHRoZSBpZGxlIHN0YWdlIHdoZW4gd2UncmUgc3RhbGxpbmcuLi4KKwkJCQkgKi8KKwkJCQltdXNiLT5hY2twZW5kIHw9IE1VU0JfQ1NSMF9QX0RBVEFFTkQ7CisKIAkJCQkvKiBzdGF0dXMgc3RhZ2UgbWlnaHQgYmUgaW1tZWRpYXRlICovCi0JCQkJaWYgKGhhbmRsZWQgPiAwKSB7Ci0JCQkJCW11c2ItPmFja3BlbmQgfD0gTVVTQl9DU1IwX1BfREFUQUVORDsKKwkJCQlpZiAoaGFuZGxlZCA+IDApCiAJCQkJCW11c2ItPmVwMF9zdGF0ZSA9CiAJCQkJCQlNVVNCX0VQMF9TVEFHRV9TVEFUVVNJTjsKLQkJCQl9CiAJCQkJYnJlYWs7CiAKIAkJCS8qIHNlcXVlbmNlICMxIChJTiB0byBob3N0KSwgaW5jbHVkZXMgR0VUX1NUQVRVUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCmluZGV4IGQ1NDQ2MGEuLjc4YTIwOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKQEAgLTg0Myw3ICs4NDMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3RnX2RldjsKIAotc3RhdGljIGludCBvdGdfaW5pdChzdHJ1Y3QgaXNwMTMwMSAqaXNwKQorc3RhdGljIGludCBpc3AxMzAxX290Z19pbml0KHN0cnVjdCBpc3AxMzAxICppc3ApCiB7CiAJdTMyIGw7CiAKQEAgLTEyNzUsNyArMTI3NSw3IEBACiBzdGF0aWMgaW50IGlzcDEzMDFfb3RnX2VuYWJsZShzdHJ1Y3QgaXNwMTMwMSAqaXNwKQogewogCXBvd2VyX3VwKGlzcCk7Ci0Jb3RnX2luaXQoaXNwKTsKKwlpc3AxMzAxX290Z19pbml0KGlzcCk7CiAKIAkvKiBOT1RFOiAgc2luY2Ugd2UgZG9uJ3QgY2hhbmdlIHRoaXMsIHRoaXMgcHJvdmlkZXMKIAkgKiBhIGZldyBtb3JlIGludGVycnVwdHMgdGhhbiBhcmUgc3RyaWN0bHkgbmVlZGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBmOTk0OThmLi4yMTZmMTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlICJmdGRpX3Npby5oIgorI2luY2x1ZGUgImZ0ZGlfc2lvX2lkcy5oIgogCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCA0NTg2YTI0Li5iMGUwZDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtMSw3ICsxLDEwIEBACiAvKgotICogRGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0KKyAqIERyaXZlciBkZWZpbml0aW9ucyBmb3IgdGhlIEZUREkgVVNCIFNpbmdsZSBQb3J0IFNlcmlhbCBDb252ZXJ0ZXIgLQogICoga25vd24gYXMgRlRESV9TSU8gKFNlcmlhbCBJbnB1dC9PdXRwdXQgYXBwbGljYXRpb24gb2YgdGhlIGNoaXBzZXQpCiAgKgorICogRm9yIFVTQiB2ZW5kb3IvcHJvZHVjdCBJRHMgKFZJRC9QSUQpLCBwbGVhc2Ugc2VlIGZ0ZGlfc2lvX2lkcy5oCisgKgorICoKICAqIFRoZSBleGFtcGxlIEkgaGF2ZSBpcyBrbm93biBhcyB0aGUgVVNDLTEwMDAgd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20KICAqIGh0dHA6Ly93d3cuZHNlLmNvLm56IC0gY2F0IG5vIFhINDIxNCBJdCBsb29rcyBzaW1pbGFyIHRvIHRoaXM6CiAgKiBodHRwOi8vd3d3LmRhbnNkYXRhLmNvbS91c2JzZXIuaHRtIGJ1dCBJIGNhbid0IGJlIHN1cmUgVGhlcmUgYXJlIG90aGVyCkBAIC0xNyw4ODEgKzIwLDggQEAKICAqIEJpbGwgUnlkZXIgLSBicnlkZXJAc2dpLmNvbSBmb3JtZXJseSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLSB3cm90ZSB0aGUKICAqIEZURElfU0lPIGltcGxlbWVudGF0aW9uLgogICoKLSAqIFBoaWxpcHAgR8O8aHJpbmcgLSBwZ0BmdXR1cmV3YXJlLmF0IC0gYWRkZWQgdGhlIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcwotICogZnJvbSBSdWRvbGYgR3VnbGVyCi0gKgogICovCiAKLSNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBGVERJX1NJT19QSUQJMHg4MzcyCS8qIFByb2R1Y3QgSWQgU0lPIGFwcGxpY2F0aW9uIG9mIDhVMTAwQVggICovCi0jZGVmaW5lIEZURElfOFUyMzJBTV9QSUQgMHg2MDAxIC8qIFNpbWlsYXIgZGV2aWNlIHRvIFNJTyBhYm92ZSAqLwotI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCi0jZGVmaW5lIEZURElfOFUyMjMyQ19QSUQgMHg2MDEwIC8qIER1YWwgY2hhbm5lbCBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV8yMzJSTF9QSUQgIDB4RkJGQSAgLyogUHJvZHVjdCBJRCBmb3IgRlQyMzJSTCAqLwotI2RlZmluZSBGVERJXzQyMzJIX1BJRCAweDYwMTEgLyogUXVhZCBjaGFubmVsIGhpLXNwZWVkIGRldmljZSAqLwotI2RlZmluZSBGVERJX1JFTEFJU19QSUQJMHhGQTEwICAvKiBSZWxhaXMgZGV2aWNlIGZyb20gUnVkb2xmIEd1Z2xlciAqLwotI2RlZmluZSBGVERJX05GX1JJQ19WSUQJMHgwRENECS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9VU0JYXzcwN19QSUQgMHhGODU3CS8qIEFEU1RlY2ggSVIgQmxhc3RlciBVU0JYLTcwNyAqLwotCi0vKiBMYXJzZW4gYW5kIEJydXNnYWFyZCBBbHRpVHJhY2svVVNCdHJhY2sgICovCi0jZGVmaW5lIExBUlNFTkJSVVNHQUFSRF9WSUQJCTB4MEZEOAotI2RlZmluZSBMQl9BTFRJVFJBQ0tfUElECQkweDAwMDEKLQotLyogd3d3LmNhbnVzYi5jb20gTGF3aWNlbCBDQU5VU0IgZGV2aWNlICovCi0jZGVmaW5lIEZURElfQ0FOVVNCX1BJRCAweEZGQTggLyogUHJvZHVjdCBJZCAqLwotCi0vKiBBbHBoYU1pY3JvIENvbXBvbmVudHMgQU1DLTIzMlVTQjAxIGRldmljZSAqLwotI2RlZmluZSBGVERJX0FNQzIzMl9QSUQgMHhGRjAwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyogd3d3LmNhbmRhcHRlci5jb20gRXdlcnQgRW5lcmd5IFN5c3RlbXMgQ0FOZGFwdGVyIGRldmljZSAqLwotI2RlZmluZSBGVERJX0NBTkRBUFRFUl9QSUQgMHg5RjgwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyogU0NTIEhGIFJhZGlvIE1vZGVtcyBQSUQncyAoaHR0cDovL3d3dy5zY3MtcHRjLmNvbSkgKi8KLS8qIHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzBfUElEIDB4RDAxMCAgICAvKiBTQ1MgUFRDLUlJdXNiICovCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV8xX1BJRCAweEQwMTEgICAgLyogU0NTIFRyYWNrZXIgLyBEU1AgVE5DICovCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV8yX1BJRCAweEQwMTIKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzNfUElEIDB4RDAxMwotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNF9QSUQgMHhEMDE0Ci0jZGVmaW5lIEZURElfU0NTX0RFVklDRV81X1BJRCAweEQwMTUKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzZfUElEIDB4RDAxNgotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfN19QSUQgMHhEMDE3Ci0KLS8qIEFDVCBTb2x1dGlvbnMgSG9tZVBybyBaV2F2ZSBpbnRlcmZhY2UgKGh0dHA6Ly93d3cuYWN0LXNvbHV0aW9ucy5jb20vSG9tZVByby5odG0pICovCi0jZGVmaW5lIEZURElfQUNUWldBVkVfUElECTB4RjJEMAotCi0KLS8qIHd3dy5zdGFydGluZy1wb2ludC1zeXN0ZW1zLmNvbSDCtUNoYW1lbGVvbiBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9NSUNST19DSEFNRUxFT05fUElECTB4Q0FBMAkvKiBQcm9kdWN0IElkICovCi0KLS8qIHd3dy5pcnRyYW5zLmRlIGRldmljZSAqLwotI2RlZmluZSBGVERJX0lSVFJBTlNfUElEIDB4RkM2MCAvKiBQcm9kdWN0IElkICovCi0KLQotLyogd3d3LnRob3VnaHR0ZWNobm9sb2d5LmNvbS8gVFQtVVNCIHByb3ZpZGUgd2l0aCBwcm9jb21wIHVzZSBmdGRpX3NpbyAqLwotI2RlZmluZSBGVERJX1RUVVNCX1BJRCAweEZGMjAgLyogUHJvZHVjdCBJZCAqLwotCi0vKiBpUGx1cyBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9JUExVU19QSUQgMHhEMDcwIC8qIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9JUExVUzJfUElEIDB4RDA3MSAvKiBQcm9kdWN0IElkICovCi0KLS8qIERNWDRBTEwgRE1YIEludGVyZmFjZXMgKi8KLSNkZWZpbmUgRlRESV9ETVg0QUxMIDB4Qzg1MAotCi0vKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLwotI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOAotI2RlZmluZSBGVERJX09QRU5EQ0NfU05JRkZFUl9QSUQJMHhCRkQ5Ci0jZGVmaW5lIEZURElfT1BFTkRDQ19USFJPVFRMRV9QSUQJMHhCRkRBCi0jZGVmaW5lIEZURElfT1BFTkRDQ19HQVRFV0FZX1BJRAkweEJGREIKLQotLyogU3Byb2cgSUkgKEFuZHJldyBDcm9zbGFuZCdzIFNwcm9nSUkgRENDIGludGVyZmFjZSkgKi8KLSNkZWZpbmUgRlRESV9TUFJPR19JSQkJMHhGMEM4Ci0KLS8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMgLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhICovCi0vKiB0aGV5IHVzZSB0aGUgZnRkaSBjaGlwc2V0IGZvciB0aGUgVVNCIGludGVyZmFjZSBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZSAqLwotI2RlZmluZSBGVERJX1hGXzYzMl9QSUQgMHhGQzA4CS8qIDYzMjogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzYzNF9QSUQgMHhGQzA5CS8qIDYzNDogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzU0N19QSUQgMHhGQzBBCS8qIDU0NzogVHdvIGxpbmUgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzYzM19QSUQgMHhGQzBCCS8qIDYzMzogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSB3aXRoIEtleXMgKi8KLSNkZWZpbmUgRlRESV9YRl82MzFfUElEIDB4RkMwQwkvKiA2MzE6IDIweDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82MzVfUElEIDB4RkMwRAkvKiA2MzU6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82NDBfUElEIDB4RkMwRQkvKiA2NDA6IFR3byBsaW5lIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82NDJfUElEIDB4RkMwRgkvKiA2NDI6IFR3byBsaW5lIERpc3BsYXkgKi8KLQotLyogVmlkZW8gTmV0d29ya3MgTGltaXRlZCAvIEhvbWVjaG9pY2UgaW4gdGhlIFVLIHVzZSBhbiBmdGRpLWJhc2VkIGRldmljZSBmb3IgdGhlaXIgMU1iICovCi0vKiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZCBieSB0aGUgdXNiIGRldmljZSBzdXBwbGllZCAqLwotLyogKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KLSNkZWZpbmUgRlRESV9WTkhDUENVU0JfRF9QSUQgMHhmZTM4IC8qIFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFBDREogdXNlIGZ0ZGkgYmFzZWQgZGotY29udHJvbGxlcnMuICBUaGUgZm9sbG93aW5nIFBJRCBpcyBmb3IgdGhlaXIgREFDLTIgZGV2aWNlCi0gKiBodHRwOi8vd3d3LnBjZGpoYXJkd2FyZS5jb20vREFDMi5hc3AgKFBJRCBzZW50IGJ5IFdvdXRlciBQYWVzZW4pCi0gKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLwotI2RlZmluZSBGVERJX1BDREpfREFDMl9QSUQgMHhGQTg4Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAotICogd2hpY2ggYXJlIHRoZSBGVDIzMkJNICggc2ltaWxhciB0byB0aGUgOFUyMzJBTSApCi0gKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMV9QSUQgICAgICAweEZBMDEgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMl9QSUQgICAgICAweEZBMDIgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNF9QSUQgICAgICAweEZBMDQgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNV9QSUQgICAgICAweEZBMDUgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLQotLyogT09DRGxpbmsgYnkgSm9lcm4gS2FpcGYgPGpvZXJua0B3ZWIuZGU+Ci0gKiAoaHR0cDovL3d3dy5qb2Vybm9ubGluZS5kZS9kdy9kb2t1LnBocD9pZD1zdGFydCZpZHg9cHJvamVjdHM6b29jZGxpbmspICovCi0jZGVmaW5lIEZURElfT09DRExJTktfUElECTB4YmFmOAkvKiBBbW9udGVjIEpUQUdrZXkgKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNYXRyaXggT3JiaXRhbCBGVERJIFJhbmdlCi0gKiBBbnl0aGluZyBpbiB0aGlzIHJhbmdlIHdpbGwgdXNlIGFuIEZUMjMyUkwuCi0gKi8KLSNkZWZpbmUgTVRYT1JCX1ZJRAkJCTB4MUIzRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAwX1BJRAkweDAxMDAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMV9QSUQJMHgwMTAxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDJfUElECTB4MDEwMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAzX1BJRAkweDAxMDMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNF9QSUQJMHgwMTA0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDVfUElECTB4MDEwNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA2X1BJRAkweDAxMDYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwN19QSUQJMHgwMTA3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDhfUElECTB4MDEwOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA5X1BJRAkweDAxMDkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQV9QSUQJMHgwMTBBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEJfUElECTB4MDEwQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBDX1BJRAkweDAxMEMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRF9QSUQJMHgwMTBECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEVfUElECTB4MDEwRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBGX1BJRAkweDAxMEYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMF9QSUQJMHgwMTEwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTFfUElECTB4MDExMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTEyX1BJRAkweDAxMTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExM19QSUQJMHgwMTEzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTRfUElECTB4MDExNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE1X1BJRAkweDAxMTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNl9QSUQJMHgwMTE2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTdfUElECTB4MDExNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE4X1BJRAkweDAxMTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExOV9QSUQJMHgwMTE5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUFfUElECTB4MDExQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFCX1BJRAkweDAxMUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQ19QSUQJMHgwMTFDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMURfUElECTB4MDExRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFFX1BJRAkweDAxMUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRl9QSUQJMHgwMTFGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjBfUElECTB4MDEyMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIxX1BJRAkweDAxMjEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMl9QSUQJMHgwMTIyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjNfUElECTB4MDEyMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI0X1BJRAkweDAxMjQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNV9QSUQJMHgwMTI1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjZfUElECTB4MDEyNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI3X1BJRAkweDAxMjcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyOF9QSUQJMHgwMTI4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjlfUElECTB4MDEyOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJBX1BJRAkweDAxMkEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQl9QSUQJMHgwMTJCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkNfUElECTB4MDEyQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJEX1BJRAkweDAxMkQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRV9QSUQJMHgwMTJFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkZfUElECTB4MDEyRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMwX1BJRAkweDAxMzAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMV9QSUQJMHgwMTMxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzJfUElECTB4MDEzMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMzX1BJRAkweDAxMzMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNF9QSUQJMHgwMTM0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzVfUElECTB4MDEzNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM2X1BJRAkweDAxMzYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzN19QSUQJMHgwMTM3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzhfUElECTB4MDEzOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM5X1BJRAkweDAxMzkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQV9QSUQJMHgwMTNBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0JfUElECTB4MDEzQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNDX1BJRAkweDAxM0MKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRF9QSUQJMHgwMTNECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0VfUElECTB4MDEzRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNGX1BJRAkweDAxM0YKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0MF9QSUQJMHgwMTQwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDFfUElECTB4MDE0MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQyX1BJRAkweDAxNDIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0M19QSUQJMHgwMTQzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDRfUElECTB4MDE0NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ1X1BJRAkweDAxNDUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Nl9QSUQJMHgwMTQ2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDdfUElECTB4MDE0NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ4X1BJRAkweDAxNDgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0OV9QSUQJMHgwMTQ5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEFfUElECTB4MDE0QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRCX1BJRAkweDAxNEIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Q19QSUQJMHgwMTRDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNERfUElECTB4MDE0RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRFX1BJRAkweDAxNEUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Rl9QSUQJMHgwMTRGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTBfUElECTB4MDE1MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUxX1BJRAkweDAxNTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ml9QSUQJMHgwMTUyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTNfUElECTB4MDE1MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU0X1BJRAkweDAxNTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1NV9QSUQJMHgwMTU1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTZfUElECTB4MDE1NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU3X1BJRAkweDAxNTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1OF9QSUQJMHgwMTU4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTlfUElECTB4MDE1OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVBX1BJRAkweDAxNUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ql9QSUQJMHgwMTVCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUNfUElECTB4MDE1QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVEX1BJRAkweDAxNUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1RV9QSUQJMHgwMTVFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUZfUElECTB4MDE1RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYwX1BJRAkweDAxNjAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2MV9QSUQJMHgwMTYxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjJfUElECTB4MDE2MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYzX1BJRAkweDAxNjMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2NF9QSUQJMHgwMTY0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjVfUElECTB4MDE2NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY2X1BJRAkweDAxNjYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2N19QSUQJMHgwMTY3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjhfUElECTB4MDE2OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY5X1BJRAkweDAxNjkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2QV9QSUQJMHgwMTZBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkJfUElECTB4MDE2QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZDX1BJRAkweDAxNkMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2RF9QSUQJMHgwMTZECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkVfUElECTB4MDE2RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZGX1BJRAkweDAxNkYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3MF9QSUQJMHgwMTcwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzFfUElECTB4MDE3MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcyX1BJRAkweDAxNzIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3M19QSUQJMHgwMTczCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzRfUElECTB4MDE3NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc1X1BJRAkweDAxNzUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Nl9QSUQJMHgwMTc2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzdfUElECTB4MDE3NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc4X1BJRAkweDAxNzgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3OV9QSUQJMHgwMTc5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0FfUElECTB4MDE3QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdCX1BJRAkweDAxN0IKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Q19QSUQJMHgwMTdDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0RfUElECTB4MDE3RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdFX1BJRAkweDAxN0UKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Rl9QSUQJMHgwMTdGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODBfUElECTB4MDE4MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgxX1BJRAkweDAxODEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Ml9QSUQJMHgwMTgyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODNfUElECTB4MDE4MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg0X1BJRAkweDAxODQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4NV9QSUQJMHgwMTg1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODZfUElECTB4MDE4NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg3X1BJRAkweDAxODcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4OF9QSUQJMHgwMTg4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODlfUElECTB4MDE4OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThBX1BJRAkweDAxOEEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Ql9QSUQJMHgwMThCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOENfUElECTB4MDE4QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThEX1BJRAkweDAxOEQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4RV9QSUQJMHgwMThFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEZfUElECTB4MDE4RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkwX1BJRAkweDAxOTAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5MV9QSUQJMHgwMTkxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTJfUElECTB4MDE5MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkzX1BJRAkweDAxOTMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5NF9QSUQJMHgwMTk0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTVfUElECTB4MDE5NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk2X1BJRAkweDAxOTYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5N19QSUQJMHgwMTk3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOThfUElECTB4MDE5OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk5X1BJRAkweDAxOTkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5QV9QSUQJMHgwMTlBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUJfUElECTB4MDE5QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlDX1BJRAkweDAxOUMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5RF9QSUQJMHgwMTlECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUVfUElECTB4MDE5RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlGX1BJRAkweDAxOUYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMF9QSUQJMHgwMUEwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTFfUElECTB4MDFBMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUEyX1BJRAkweDAxQTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBM19QSUQJMHgwMUEzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTRfUElECTB4MDFBNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE1X1BJRAkweDAxQTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNl9QSUQJMHgwMUE2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTdfUElECTB4MDFBNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE4X1BJRAkweDAxQTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBOV9QSUQJMHgwMUE5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUFfUElECTB4MDFBQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFCX1BJRAkweDAxQUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQ19QSUQJMHgwMUFDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQURfUElECTB4MDFBRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFFX1BJRAkweDAxQUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRl9QSUQJMHgwMUFGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjBfUElECTB4MDFCMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIxX1BJRAkweDAxQjEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMl9QSUQJMHgwMUIyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjNfUElECTB4MDFCMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI0X1BJRAkweDAxQjQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNV9QSUQJMHgwMUI1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjZfUElECTB4MDFCNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI3X1BJRAkweDAxQjcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCOF9QSUQJMHgwMUI4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjlfUElECTB4MDFCOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJBX1BJRAkweDAxQkEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQl9QSUQJMHgwMUJCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkNfUElECTB4MDFCQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJEX1BJRAkweDAxQkQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRV9QSUQJMHgwMUJFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkZfUElECTB4MDFCRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMwX1BJRAkweDAxQzAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMV9QSUQJMHgwMUMxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzJfUElECTB4MDFDMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMzX1BJRAkweDAxQzMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNF9QSUQJMHgwMUM0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzVfUElECTB4MDFDNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM2X1BJRAkweDAxQzYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDN19QSUQJMHgwMUM3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzhfUElECTB4MDFDOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM5X1BJRAkweDAxQzkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQV9QSUQJMHgwMUNBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0JfUElECTB4MDFDQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNDX1BJRAkweDAxQ0MKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRF9QSUQJMHgwMUNECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0VfUElECTB4MDFDRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNGX1BJRAkweDAxQ0YKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMF9QSUQJMHgwMUQwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDFfUElECTB4MDFEMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQyX1BJRAkweDAxRDIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEM19QSUQJMHgwMUQzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDRfUElECTB4MDFENAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ1X1BJRAkweDAxRDUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENl9QSUQJMHgwMUQ2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDdfUElECTB4MDFENwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ4X1BJRAkweDAxRDgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEOV9QSUQJMHgwMUQ5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREFfUElECTB4MDFEQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURCX1BJRAkweDAxREIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQ19QSUQJMHgwMURDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRERfUElECTB4MDFERAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURFX1BJRAkweDAxREUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERl9QSUQJMHgwMURGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTBfUElECTB4MDFFMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUxX1BJRAkweDAxRTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMl9QSUQJMHgwMUUyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTNfUElECTB4MDFFMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU0X1BJRAkweDAxRTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNV9QSUQJMHgwMUU1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTZfUElECTB4MDFFNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU3X1BJRAkweDAxRTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFOF9QSUQJMHgwMUU4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTlfUElECTB4MDFFOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVBX1BJRAkweDAxRUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQl9QSUQJMHgwMUVCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUNfUElECTB4MDFFQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVEX1BJRAkweDAxRUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRV9QSUQJMHgwMUVFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUZfUElECTB4MDFFRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYwX1BJRAkweDAxRjAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMV9QSUQJMHgwMUYxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjJfUElECTB4MDFGMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYzX1BJRAkweDAxRjMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNF9QSUQJMHgwMUY0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjVfUElECTB4MDFGNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY2X1BJRAkweDAxRjYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGN19QSUQJMHgwMUY3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjhfUElECTB4MDFGOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY5X1BJRAkweDAxRjkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQV9QSUQJMHgwMUZBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkJfUElECTB4MDFGQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZDX1BJRAkweDAxRkMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRF9QSUQJMHgwMUZECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkVfUElECTB4MDFGRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZGX1BJRAkweDAxRkYKLQotCi0KLS8qIEludGVyYmlvbWV0cmljcyBVU0IgSS9PIEJvYXJkICovCi0vKiBEZXZlbG9wZWQgZm9yIEludGVyYmlvbWV0cmljcyBieSBSdWRvbGYgR3VnbGVyICovCi0jZGVmaW5lIElOVEVSQklPTUVUUklDU19WSUQgICAgICAgICAgICAgIDB4MTIwOQotI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQgICAgICAweDEwMDIKLSNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX01JTklfSU9CT0FSRF9QSUQgMHgxMDA2Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgUGVybGUgU3lzdGVtcwotICogVWx0cmFQb3J0IFVTQiBzZXJpYWwgY29udmVydGVycwotICovCi0jZGVmaW5lIEZURElfUEVSTEVfVUxUUkFQT1JUX1BJRCAweEYwQzAJLyogUGVybGUgVWx0cmFQb3J0IFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBTZWFsZXZlbCBTZWFMSU5LKyBhZGFwdGVycy4KLSAqIChPcmlnaW5hbCBsaXN0IHNlbnQgYnkgVHVhbiBIb2FuZy4gIElhbiBBYmJvdHQgcmVuYW1lZCB0aGUgbWFjcm9zIGFuZAotICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCi0gKi8KLSNkZWZpbmUgU0VBTEVWRUxfVklECQkweDBjNTIJLyogU2VhbGV2ZWwgVmVuZG9yIElEICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMTAyX1BJRAkweDIxMDIJLyogU2VhTElOSys0ODUgKDIxMDIpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDNfUElECTB4MjEwMwkvKiBTZWFMSU5LKzIzMkkgKDIxMDMpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDZfUElECTB4OTAyMAkvKiBTZWFMSU5LKzQyMiAoMjEwNikgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDFfMl9QSUQJMHgyMjIxCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yMjAyXzFfUElECTB4MjIxMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDNfMV9QSUQJMHgyMjEzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDNfMl9QSUQJMHgyMjIzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAxXzJfUElECTB4MjQyMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMV8zX1BJRAkweDI0MzEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAzICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAyXzFfUElECTB4MjQxMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMl8yX1BJRAkweDI0MjIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAyXzRfUElECTB4MjQ0MgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18xX1BJRAkweDI0MTMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18zX1BJRAkweDI0MzMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM180X1BJRAkweDI0NDMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfMl9QSUQJMFgyODIxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzNfUElECTBYMjgzMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfNV9QSUQJMFgyODUxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzZfUElECTBYMjg2MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDYgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfOF9QSUQJMFgyODgxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgOCAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzFfUElECTBYMjgxMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfM19QSUQJMFgyODMyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzRfUElECTBYMjg0MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfNl9QSUQJMFgyODYyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzdfUElECTBYMjg3MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDcgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfMV9QSUQJMFgyODEzCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfMl9QSUQJMFgyODIzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM180X1BJRAkwWDI4NDMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfNV9QSUQJMFgyODUzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM183X1BJRAkwWDI4NzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA3ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfOF9QSUQJMFgyODgzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgOCAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdHdvIEtPQklMIGNoaXBjYXJkIHRlcm1pbmFscy4KLSAqLwotI2RlZmluZSBLT0JJTF9WSUQJCTB4MGQ0NgkvKiBLT0JJTCBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgS09CSUxfQ09OVl9CMV9QSUQJMHgyMDIwCS8qIEtPQklMIEtvbnZlcnRlciBmb3IgQjEgKi8KLSNkZWZpbmUgS09CSUxfQ09OVl9LQUFOX1BJRAkweDIwMjEJLyogS09CSUxfS29udmVydGVyIGZvciBLQUFOICovCi0KLS8qCi0gKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgotICovCi0KLSNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2Ci0jZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAotCi0vKgotICogQVNLLmZyIGRldmljZXMKLSAqLwotI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KLQotLyoKLSAqIEZUREkgVVNCIFVBUlQgY2hpcHMgdXNlZCBpbiBjb25zdHJ1Y3Rpb24gcHJvamVjdHMgZnJvbSB0aGUKLSAqIEVsZWt0b3IgRWxlY3Ryb25pY3MgbWFnYXppbmUgKGh0dHA6Ly9lbGVrdG9yLWVsZWN0cm9uaWNzLmNvLnVrKQotICovCi0jZGVmaW5lIEVMRUtUT1JfVklECQkweDBDN0QKLSNkZWZpbmUgRUxFS1RPUl9GVDMyM1JfUElECTB4MDAwNQkvKiBSRklELVJlYWRlciwgaXNzdWUgMDktMjAwNiAqLwotCi0vKgotICogRFNTLTIwIFN5bmMgU3RhdGlvbiBmb3IgU29ueSBFcmljc3NvbiBQODAwCi0gKi8KLSNkZWZpbmUgRlRESV9EU1MyMF9QSUQgICAgICAgICAgMHhGQzgyCi0KLS8qCi0gKiBIb21lIEVsZWN0cm9uaWNzICh3d3cuaG9tZS1lbGVjdHJvLmNvbSkgVVNCIGdhZGdldHMKLSAqLwotI2RlZmluZSBGVERJX0hFX1RJUkExX1BJRAkweEZBNzgJLyogVGlyYS0xIElSIHRyYW5zY2VpdmVyICovCi0KLS8qIFVTQi1VSVJUIC0gQW4gaW5mcmFyZWQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIHVzaW5nIHRoZSA4VTIzMkFNIGNoaXAgKi8KLS8qIGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bSAqLwotI2RlZmluZSBGVERJX1VTQl9VSVJUX1BJRAkweEY4NTAJLyogUHJvZHVjdCBJZCAqLwotCi0vKiBUTkMtWCBVU0ItdG8tcGFja2V0LXJhZGlvIGFkYXB0ZXIsIHZlcnNpb25zIHByaW9yIHRvIDMuMCAoRExQIG1vZHVsZSkgKi8KLQotI2RlZmluZSBGVERJX1ROQ19YX1BJRAkJMHhFQkUwCi0KLS8qCi0gKiBFTFYgVVNCIGRldmljZXMgc3VibWl0dGVkIGJ5IENocmlzdGlhbiBBYnQgb2YgRUxWICh3d3cuZWx2LmRlKS4KLSAqIEFsbCBvZiB0aGVzZSBkZXZpY2VzIHVzZSBGVERJJ3MgdmVuZG9yIElEICgweDA0MDMpLgotICoKLSAqIFRoZSBwcmV2aW91c2x5IGluY2x1ZGVkIFBJRCBmb3IgdGhlIFVPIDEwMCBtb2R1bGUgd2FzIGluY29ycmVjdC4KLSAqIEluIGZhY3QsIHRoYXQgUElEIHdhcyBmb3IgRUxWJ3MgVVIgMTAwIFVTQi1SUzIzMiBjb252ZXJ0ZXIgKDB4RkI1OCkuCi0gKgotICogQXJtaW4gTGFldWdlciBvcmlnaW5hbGx5IHNlbnQgdGhlIFBJRCBmb3IgdGhlIFVNIDEwMCBtb2R1bGUuCi0gKi8KLSNkZWZpbmUgRlRESV9SMjAwMEtVX1RSVUVfUk5HCTB4RkI4MCAgLyogUjIwMDBLVSBUUlVFIFJORyAqLwotI2RlZmluZSBGVERJX0VMVl9VUjEwMF9QSUQJMHhGQjU4CS8qIFVTQi1SUzIzMi1VbXNldHplciAoVVIgMTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9VTTEwMF9QSUQJMHhGQjVBCS8qIFVTQi1Nb2R1bCBVTSAxMDAgKi8KLSNkZWZpbmUgRlRESV9FTFZfVU8xMDBfUElECTB4RkI1QgkvKiBVU0ItTW9kdWwgVU8gMTAwICovCi0jZGVmaW5lIEZURElfRUxWX0FMQzg1MDBfUElECTB4RjA2RQkvKiBBTEMgODUwMCBFeHBlcnQgKi8KLS8qIEFkZGl0aW9uYWwgRUxWIFBJRHMgdGhhdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSBGVERJIEQyWFggZHJpdmVycyBvbgotICogTVMgV2luZG93cywgcmF0aGVyIHRoYW4gdGhlIEZUREkgVmlydHVhbCBDb20gUG9ydCBkcml2ZXJzLgotICogTWF5YmUgdGhlc2Ugd2lsbCBiZSBlYXNpZXIgdG8gdXNlIHdpdGggdGhlIGxpYmZ0ZGkvbGlidXNiIHVzZXItc3BhY2UKLSAqIGRyaXZlcnMsIG9yIHBvc3NpYmx5IHRoZSBDb21lZGkgZHJpdmVycyBpbiBzb21lIGNhc2VzLiAqLwotI2RlZmluZSBGVERJX0VMVl9DTEk3MDAwX1BJRAkweEZCNTkJLyogQ29tcHV0ZXItTGlnaHQtSW50ZXJmYWNlIChDTEkgNzAwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfUFBTNzMzMF9QSUQJMHhGQjVDCS8qIFByb2Nlc3Nvci1Qb3dlci1TdXBwbHkgKFBQUyA3MzMwKSAqLwotI2RlZmluZSBGVERJX0VMVl9URk0xMDBfUElECTB4RkI1RAkvKiBUZW1wZXJhcnR1ci1GZXVjaHRlIE1lc3NnZXJhZXQgKFRGTSAxMDApICovCi0jZGVmaW5lIEZURElfRUxWX1VERjc3X1BJRAkweEZCNUUJLyogVVNCIERDRiBGdW5rdXJoIChVREYgNzcpICovCi0jZGVmaW5lIEZURElfRUxWX1VJTzg4X1BJRAkweEZCNUYJLyogVVNCLUkvTyBJbnRlcmZhY2UgKFVJTyA4OCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVUFEOF9QSUQJMHhGMDY4CS8qIFVTQi1BRC1XYW5kbGVyIChVQUQgOCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVURBN19QSUQJMHhGMDY5CS8qIFVTQi1EQS1XYW5kbGVyIChVREEgNykgKi8KLSNkZWZpbmUgRlRESV9FTFZfVVNJMl9QSUQJMHhGMDZBCS8qIFVTQi1TY2hyaXR0bW90b3Jlbi1JbnRlcmZhY2UgKFVTSSAyKSAqLwotI2RlZmluZSBGVERJX0VMVl9UMTEwMF9QSUQJMHhGMDZCCS8qIFRoZXJtb21ldGVyIChUIDExMDApICovCi0jZGVmaW5lIEZURElfRUxWX1BDRDIwMF9QSUQJMHhGMDZDCS8qIFBDLURhdGVubG9nZ2VyIChQQ0QgMjAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9VTEEyMDBfUElECTB4RjA2RAkvKiBVU0ItTENELUFuc3RldWVydW5nIChVTEEgMjAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9GSFoxMDAwUENfUElECTB4RjA2RgkvKiBGSFogMTAwMCBQQyAqLwotI2RlZmluZSBGVERJX0VMVl9DU0k4X1BJRAkweEUwRjAJLyogQ29tcHV0ZXItU2NoYWx0LUludGVyZmFjZSAoQ1NJIDgpICovCi0jZGVmaW5lIEZURElfRUxWX0VNMTAwMERMX1BJRAkweEUwRjEJLyogUEMtRGF0ZW5sb2dnZXIgZnVlciBFbmVyZ2llbW9uaXRvciAoRU0gMTAwMCBETCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfUENLMTAwX1BJRAkweEUwRjIJLyogUEMtS2FiZWx0ZXN0ZXIgKFBDSyAxMDApICovCi0jZGVmaW5lIEZURElfRUxWX1JGUDUwMF9QSUQJMHhFMEYzCS8qIEhGLUxlaXN0dW5nc21lc3NlciAoUkZQIDUwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfRlMyMFNJR19QSUQJMHhFMEY0CS8qIFNpZ25hbGdlYmVyIChGUyAyMCBTSUcpICovCi0jZGVmaW5lIEZURElfRUxWX1dTMzAwUENfUElECTB4RTBGNgkvKiBQQy1XZXR0ZXJzdGF0aW9uIChXUyAzMDAgUEMpICovCi0jZGVmaW5lIEZURElfRUxWX0ZIWjEzMDBQQ19QSUQJMHhFMEU4CS8qIEZIWiAxMzAwIFBDICovCi0jZGVmaW5lIEZURElfRUxWX1dTNTAwX1BJRAkweEUwRTkJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgNTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9IUzQ4NV9QSUQJMHhFMEVBCS8qIFVTQiB0byBSUy00ODUgYWRhcHRlciAqLwotI2RlZmluZSBGVERJX0VMVl9FTTEwMTBQQ19QSUQJMHhFMEVGCS8qIEVuZ2VyeSBtb25pdG9yIEVNIDEwMTAgUEMgKi8KLSNkZWZpbmUgRlRESV9QSElfRklTQ09fUElEICAgICAgMHhFNDBCICAvKiBQSEkgRmlzY28gVVNCIHRvIFNlcmlhbCBjYWJsZSAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcwotICovCi0jZGVmaW5lIElEVEVDSF9WSUQJCTB4MEFDRAkvKiBJRCBURUNIIFZlbmRvciBJRCAqLwotI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKLSAqLwotI2RlZmluZSBPQ1RfVklECQkJMHgwQjM5CS8qIE9DVCB2ZW5kb3IgSUQgKi8KLS8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KLS8qIEFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoQXVzKSBYSDY0NTEgKi8KLS8qIEFsc28gcmViYWRnZWQgYXMgU0lJRyBJbmMuIG1vZGVsIFVTMjMwOCBoYXJkd2FyZSB2ZXJzaW9uIDEgKi8KLSNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCi0KLS8qIGFuIGluZnJhcmVkIHJlY2VpdmVyIGZvciB1c2VyIGFjY2VzcyBjb250cm9sIHdpdGggSVIgdGFncyAqLwotI2RlZmluZSBGVERJX1BJRUdST1VQX1BJRAkweEYyMDgJLyogUHJvZHVjdCBJZCAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIEFydGVtaXMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCi0gKiBDaGVjayBpdCBhdCBodHRwOi8vd3d3LmFydGVtaXNjY2QuY28udWsvCi0gKi8KLSNkZWZpbmUgRlRESV9BUlRFTUlTX1BJRAkweERGMjgJLyogQWxsIEFydGVtaXMgQ2FtZXJhcyAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIEFUSUsgSW5zdHJ1bWVudHMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCi0gKiBDaGVjayBpdCBhdCBodHRwOi8vd3d3LmF0aWstaW5zdHJ1bWVudHMuY29tLwotICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNl9QSUQJMHhERjMwCS8qIEFUSUsgQVRLLTE2IEdyYXlzY2FsZSBDYW1lcmEgKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2Q19QSUQJMHhERjMyCS8qIEFUSUsgQVRLLTE2QyBDb2xvdXIgQ2FtZXJhICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNkhSX1BJRAkweERGMzEJLyogQVRJSyBBVEstMTZIUiBHcmF5c2NhbGUgQ2FtZXJhICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNkhSQ19QSUQJMHhERjMzCS8qIEFUSUsgQVRLLTE2SFJDIENvbG91ciBDYW1lcmEgKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2SUNfUElEICAgMHhERjM1ICAvKiBBVElLIEFUSy0xNklDIEdyYXlzY2FsZSBDYW1lcmEgKi8KLQotLyoKLSAqIFByb3RlZ28gcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMQkweEZDNzAJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotI2RlZmluZSBQUk9URUdPX1IyWDAJCTB4RkM3MQkvKiBSMjAwLVVTQiBUUk5HIHVuaXQgKFIyMTAsIFIyMjAsIGFuZCBSMjMwKSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMwkweEZDNzIJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfNAkweEZDNzMJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotCi0vKgotICogR3VkZSBBbmFsb2ctIHVuZCBEaWdpdGFsc3lzdGVtZSBHbWJICi0gKi8KLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MDhfUElEICAgIDB4RTgwOAotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOV9QSUQgICAgMHhFODA5Ci0jZGVmaW5lIEZURElfR1VERUFEU19FODBBX1BJRCAgICAweEU4MEEKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MEJfUElEICAgIDB4RTgwQgotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQ19QSUQgICAgMHhFODBDCi0jZGVmaW5lIEZURElfR1VERUFEU19FODBEX1BJRCAgICAweEU4MEQKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MEVfUElEICAgIDB4RTgwRQotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRl9QSUQgICAgMHhFODBGCi0jZGVmaW5lIEZURElfR1VERUFEU19FODg4X1BJRCAgICAweEU4ODggIC8qIEV4cGVydCBJU0ROIENvbnRyb2wgVVNCICovCi0jZGVmaW5lIEZURElfR1VERUFEU19FODg5X1BJRCAgICAweEU4ODkgIC8qIFVTQiBSUy0yMzIgT3B0b0JyaWRnZSAqLwotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4QV9QSUQgICAgMHhFODhBCi0jZGVmaW5lIEZURElfR1VERUFEU19FODhCX1BJRCAgICAweEU4OEIKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OENfUElEICAgIDB4RTg4QwotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RF9QSUQgICAgMHhFODhECi0jZGVmaW5lIEZURElfR1VERUFEU19FODhFX1BJRCAgICAweEU4OEUKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OEZfUElEICAgIDB4RTg4RgotCi0vKgotICogTGlueCBUZWNobm9sb2dpZXMgcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBMSU5YX1NETVVTQlFTU19QSUQJMHhGNDQ4CS8qIExpbnggU0RNLVVTQi1RUy1TICovCi0jZGVmaW5lIExJTlhfTUFTVEVSREVWRUwyX1BJRCAgIDB4RjQ0OSAgIC8qIExpbnggTWFzdGVyIERldmVsb3BtZW50IDIuMCAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8wX1BJRCAgIDB4RjQ0QSAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QiAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8yX1BJRCAgIDB4RjQ0QyAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotCi0vKiBDQ1MgSW5jLiBJQ0RVL0lDRFU0MCBwcm9kdWN0IElEIC0gdGhlIEZUMjMyQk0gaXMgdXNlZCBpbiBhbiBpbi1jaXJjdWl0LWRlYnVnZ2VyICovCi0vKiB1bml0IGZvciBQSUMxNidzL1BJQzE4J3MgKi8KLSNkZWZpbmUgRlRESV9DQ1NJQ0RVMjBfMF9QSUQgICAgMHhGOUQwCi0jZGVmaW5lIEZURElfQ0NTSUNEVTQwXzFfUElEICAgIDB4RjlEMQotI2RlZmluZSBGVERJX0NDU01BQ0hYXzJfUElEICAgICAweEY5RDIKLSNkZWZpbmUgRlRESV9DQ1NMT0FEX05fR09fM19QSUQgMHhGOUQzCi0jZGVmaW5lIEZURElfQ0NTSUNEVTY0XzRfUElEICAgIDB4RjlENAotI2RlZmluZSBGVERJX0NDU1BSSU1FOF81X1BJRCAgICAweEY5RDUKLQotLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KLSNkZWZpbmUgSU5TSURFX0FDQ0VTU08JCTB4RkFEMAotCi0vKgotICogSW50cmVwaWQgQ29udHJvbCBTeXN0ZW1zIChodHRwOi8vd3d3LmludHJlcGlkY3MuY29tLykgVmFsdWVDQU4gYW5kIE5lb1ZJCi0gKi8KLSNkZWZpbmUgSU5UUkVQSURfVklECQkweDA5M0MKLSNkZWZpbmUgSU5UUkVQSURfVkFMVUVDQU5fUElECTB4MDYwMQotI2RlZmluZSBJTlRSRVBJRF9ORU9WSV9QSUQJMHgwNzAxCi0KLS8qCi0gKiBGYWxjb20gV2lyZWxlc3MgQ29tbXVuaWNhdGlvbnMgR21iSAotICovCi0jZGVmaW5lIEZBTENPTV9WSUQJCTB4MEY5NAkvKiBWZW5kb3IgSWQgKi8KLSNkZWZpbmUgRkFMQ09NX1RXSVNUX1BJRAkweDAwMDEJLyogRmFsY29tIFR3aXN0IFVTQiBHUFJTIG1vZGVtICovCi0jZGVmaW5lIEZBTENPTV9TQU1CQV9QSUQJMHgwMDA1CS8qIEZhbGNvbSBTYW1iYSBVU0IgR1BSUyBtb2RlbSAqLwotCi0vKgotICogU1VVTlRPIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgRlRESV9TVVVOVE9fU1BPUlRTX1BJRAkweEY2ODAJLyogU3V1bnRvIFNwb3J0cyBpbnN0cnVtZW50ICovCi0KLS8qCi0gKiBPY2VhbmljIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgRlRESV9PQ0VBTklDX1BJRAkweEY0NjAgIC8qIE9jZWFuaWMgZGl2ZSBpbnN0cnVtZW50ICovCi0KLS8qCi0gKiBUVGkgKFRodXJsYnkgVGhhbmRhciBJbnN0cnVtZW50cykKLSAqLwotI2RlZmluZSBUVElfVklECQkJMHgxMDNFCS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBUVElfUUwzNTVQX1BJRAkJMHgwM0U4CS8qIFRUaSBRTDM1NVAgcG93ZXIgc3VwcGx5ICovCi0KLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgQiZCIEVsZWN0cm9uaWNzIHByb2R1Y3RzLgotICovCi0jZGVmaW5lIEJBTkRCX1ZJRAkJMHgwODU2CS8qIEImQiBFbGVjdHJvbmljcyBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgQkFOREJfVVNPVEw0X1BJRAkweEFDMDEJLyogVVNPVEw0IElzb2xhdGVkIFJTLTQ4NSBDb252ZXJ0ZXIgKi8KLSNkZWZpbmUgQkFOREJfVVNUTDRfUElECQkweEFDMDIJLyogVVNUTDQgUlMtNDg1IENvbnZlcnRlciAqLwotI2RlZmluZSBCQU5EQl9VU085TUwyX1BJRAkweEFDMDMJLyogVVNPOU1MMiBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCi0jZGVmaW5lIEJBTkRCX1VTT1BUTDRfUElECTB4QUMxMQotI2RlZmluZSBCQU5EQl9VU1BUTDRfUElECTB4QUMxMgotI2RlZmluZSBCQU5EQl9VU085TUwyRFJfMl9QSUQJMHhBQzE2Ci0jZGVmaW5lIEJBTkRCX1VTTzlNTDJEUl9QSUQJMHhBQzE3Ci0jZGVmaW5lIEJBTkRCX1VTT1BUTDREUjJfUElECTB4QUMxOAkvKiBVU09QVEw0Ui0yIDItcG9ydCBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCi0jZGVmaW5lIEJBTkRCX1VTT1BUTDREUl9QSUQJMHhBQzE5Ci0jZGVmaW5lIEJBTkRCXzQ4NVVTQjlGXzJXX1BJRAkweEFDMjUKLSNkZWZpbmUgQkFOREJfNDg1VVNCOUZfNFdfUElECTB4QUMyNgotI2RlZmluZSBCQU5EQl8yMzJVU0I5TV9QSUQJMHhBQzI3Ci0jZGVmaW5lIEJBTkRCXzQ4NVVTQlRCXzJXX1BJRAkweEFDMzMKLSNkZWZpbmUgQkFOREJfNDg1VVNCVEJfNFdfUElECTB4QUMzNAotI2RlZmluZSBCQU5EQl9UVEw1VVNCOU1fUElECTB4QUM0OQotI2RlZmluZSBCQU5EQl9UVEwzVVNCOU1fUElECTB4QUM1MAotI2RlZmluZSBCQU5EQl9aWl9QUk9HMV9VU0JfUElECTB4QkEwMgotCi0vKgotICogUk0gTWljaGFlbGlkZXMgQ0FOdmlldyBVU0IgKGh0dHA6Ly93d3cucm1jYW4uY29tKQotICogQ0FOIGZpZWxkYnVzIGludGVyZmFjZSBhZGFwdGVyLCBhZGRlZCBieSBwb3J0IEdtYkggd3d3LnBvcnQuZGUpCi0gKiBJYW4gQWJib3R0IGNoYW5nZWQgdGhlIG1hY3JvIG5hbWVzIGZvciBjb25zaXN0ZW5jeS4KLSAqLwotI2RlZmluZSBGVERJX1JNX0NBTlZJRVdfUElECTB4ZmQ2MAkvKiBQcm9kdWN0IElkICovCi0KLS8qCi0gKiBFVkVSIEVjbyBQcm8gVVBTIChodHRwOi8vd3d3LmV2ZXIuY29tLnBsLykKLSAqLwotCi0jZGVmaW5lCUVWRVJfRUNPX1BST19DRFMJMHhlNTIwCS8qIFJTLTIzMiBjb252ZXJ0ZXIgKi8KLQotLyoKLSAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAotICogVVNCLVRUWSBhY3RpdiwgVVNCLVRUWSBwYXNzaXYuICBTb21lIFBJRHMgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZXZpY2VzCi0gKiBhbmQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoaWNoIGFyZSB1c2VkIGJ5IHdoaWNoLgotICovCi0jZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAotI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKLQotLyoKLSAqIE1vYmlsaXR5IEVsZWN0cm9uaWNzIHByb2R1Y3RzLgotICovCi0jZGVmaW5lIE1PQklMSVRZX1ZJRAkJCTB4MTM0MgotI2RlZmluZSBNT0JJTElUWV9VU0JfU0VSSUFMX1BJRAkJMHgwMjAyCS8qIEVhc2lEb2NrIFVTQiAyMDAgc2VyaWFsICovCi0KLS8qCi0gKiBtaWNyb0hBTSBwcm9kdWN0IElEcyAoaHR0cDovL3d3dy5taWNyb2hhbS5jb20pLgotICogU3VibWl0dGVkIGJ5IEp1c3RpbiBCdXJrZXQgKEtMMVJMKSA8em9ydG9uQGp0YW4uY29tPgotICogYW5kIE1pa2UgU3R1ZGVyIChLNkVFUCkgPGs2ZWVwQGhhbXNvZnR3YXJlLm9yZz4uCi0gKiBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4gYWRkZWQgYSBmZXcgbW9yZSBmcm9tIHRoZSBkcml2ZXIgSU5GIGZpbGUuCi0gKi8KLSNkZWZpbmUgRlRESV9NSEFNX0tXX1BJRCAweEVFRTgJCS8qIFVTQi1LVyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1lTX1BJRCAweEVFRTkJCS8qIFVTQi1ZUyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k2X1BJRCAweEVFRUEJCS8qIFVTQi1ZNiBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k4X1BJRCAweEVFRUIJCS8qIFVTQi1ZOCBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX0lDX1BJRCAweEVFRUMJCS8qIFVTQi1JQyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX0RCOV9QSUQgMHhFRUVECS8qIFVTQi1EQjkgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9SUzIzMl9QSUQgMHhFRUVFCS8qIFVTQi1SUzIzMiBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k5X1BJRCAweEVFRUYJCS8qIFVTQi1ZOSBpbnRlcmZhY2UgKi8KLQotLyoKLSAqIEFjdGl2ZSBSb2JvdHMgcHJvZHVjdCBpZHMuCi0gKi8KLSNkZWZpbmUgRlRESV9BQ1RJVkVfUk9CT1RTX1BJRAkweEU1NDgJLyogVVNCIGNvbW1zIGJvYXJkICovCi0KLS8qCi0gKiBYc2VucyBUZWNobm9sb2dpZXMgQlYgcHJvZHVjdHMgKGh0dHA6Ly93d3cueHNlbnMuY29tKS4KLSAqLwotI2RlZmluZSBYU0VOU19DT05WRVJURVJfMF9QSUQJMHhEMzg4Ci0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8xX1BJRAkweEQzODkKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzJfUElECTB4RDM4QQotI2RlZmluZSBYU0VOU19DT05WRVJURVJfM19QSUQJMHhEMzhCCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl80X1BJRAkweEQzOEMKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzVfUElECTB4RDM4RAotI2RlZmluZSBYU0VOU19DT05WRVJURVJfNl9QSUQJMHhEMzhFCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl83X1BJRAkweEQzOEYKLQotLyoKLSAqIFRlcmF0cm9uaWsgcHJvZHVjdCBpZHMuCi0gKiBTdWJtaXR0ZWQgYnkgTy4gV8O2bGZlbHNjaG5laWRlci4KLSAqLwotI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfVkNQX1BJRAkgMHhFQzg4CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIFZDUCBkcml2ZXIgb24gd2luZG93cykgKi8KLSNkZWZpbmUgRlRESV9URVJBVFJPTklLX0QyWFhfUElEIDB4RUM4OQkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBEMlhYIGRyaXZlciBvbiB3aW5kb3dzKSAqLwotCi0vKgotICogRXZvbHV0aW9uIFJvYm90aWNzIHByb2R1Y3RzIChodHRwOi8vd3d3LmV2b2x1dGlvbi5jb20vKS4KLSAqIFN1Ym1pdHRlZCBieSBTaGF3biBNLiBMYXZlbGxlLgotICovCi0jZGVmaW5lIEVWT0xVVElPTl9WSUQJCTB4REVFRQkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgRVZPTFVUSU9OX0VSMV9QSUQJMHgwMzAwCS8qIEVSMSBDb250cm9sIE1vZHVsZSAqLwotI2RlZmluZSBFVk9fOFUyMzJBTV9QSUQJMHgwMkZGCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ00yIChGVDIzMkFNKSovCi0jZGVmaW5lIEVWT19IWUJSSURfUElECQkweDAzMDIJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEIChGVDIzMkJNKSovCi0jZGVmaW5lIEVWT19SQ000X1BJRAkJMHgwMzAzCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ000IFBJRCAqLwotCi0vKiBQeXJhbWlkIENvbXB1dGVyIEdtYkggKi8KLSNkZWZpbmUgRlRESV9QWVJBTUlEX1BJRAkweEU2QzgJLyogUHlyYW1pZCBBcHBsaWFuY2UgRGlzcGxheSAqLwotCi0vKgotICogTkRJICh3d3cubmRpZ2l0YWwuY29tKSBwcm9kdWN0IGlkcwotICovCi0jZGVmaW5lIEZURElfTkRJX0hVQ19QSUQJCTB4REE3MAkvKiBOREkgSG9zdCBVU0IgQ29udmVydGVyICovCi0jZGVmaW5lIEZURElfTkRJX1NQRUNUUkFfU0NVX1BJRAkweERBNzEJLyogTkRJIFNwZWN0cmEgU0NVICovCi0jZGVmaW5lIEZURElfTkRJX0ZVVFVSRV8yX1BJRAkJMHhEQTcyCS8qIE5ESSBmdXR1cmUgZGV2aWNlICMyICovCi0jZGVmaW5lIEZURElfTkRJX0ZVVFVSRV8zX1BJRAkJMHhEQTczCS8qIE5ESSBmdXR1cmUgZGV2aWNlICMzICovCi0jZGVmaW5lIEZURElfTkRJX0FVUk9SQV9TQ1VfUElECQkweERBNzQJLyogTkRJIEF1cm9yYSBTQ1UgKi8KLQotLyoKLSAqIFBvc2lmbGV4IGluYyByZXRhaWwgZXF1aXBtZW50IChodHRwOi8vd3d3LnBvc2lmbGV4LmNvbS50dykKLSAqLwotI2RlZmluZSBQT1NJRkxFWF9WSUQJCTB4MGQzYSAgLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFBPU0lGTEVYX1BQNzAwMF9QSUQJMHgwMzAwICAvKiBQUC03MDAwSUkgdGhlcm1hbCBwcmludGVyICovCi0KLS8qCi0gKiBXZXN0cmV4IEludGVybmF0aW9uYWwgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ29yeSBMZWUKLSAqLwotI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRAkweERDMDAJLyogTW9kZWwgNzc3ICovCi0jZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQJMHhEQzAxCS8qIE1vZGVsIDg5MDBGICovCi0KLS8qCi0gKiBSUi1DaXJLaXRzIExvY29CdWZmZXIgVVNCIChodHRwOi8vd3d3LnJyLWNpcmtpdHMuY29tKQotICovCi0jZGVmaW5lIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElECTB4YzdkMAkvKiBMb2NvQnVmZmVyIFVTQiAqLwotCi0vKgotICogRWNsbyAoaHR0cDovL3d3dy5lY2xvLnB0LykgcHJvZHVjdCBJRHMuCi0gKiBQSUQgMHhFQTkwIHN1Ym1pdHRlZCBieSBNYXJ0aW4gR3JpbGwuCi0gKi8KLSNkZWZpbmUgRlRESV9FQ0xPX0NPTV8xV0lSRV9QSUQJMHhFQTkwCS8qIENPTSB0byAxLVdpcmUgVVNCIGFkYXB0b3IgKi8KLQotLyoKLSAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQotICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KLSAqLwotCi0jZGVmaW5lIFBBUE9VQ0hfVklECQkJMHg1MDUwCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBQQVBPVUNIX1RNVV9QSUQJCQkweDA0MDAJLyogVE1VIFVTQiBUaGVybW9tZXRlciAqLwotI2RlZmluZSBQQVBPVUNIX1FVSURPNHg0X1BJRAkJMHgwOTAwCS8qIFF1aWRvIDQvNCBNb2R1bGUgKi8KLQotLyoKLSAqIEFDRyBJZGVudGlmaWNhdGlvbiBUZWNobm9sb2dpZXMgR21iSCBwcm9kdWN0cyAoaHR0cDovL3d3dy5hY2cuZGUvKS4KLSAqIFN1Ym1pdHRlZCBieSBhbnRvbiAtYXQtIGdvdG8xMCAtZG90LSBvcmcuCi0gKi8KLSNkZWZpbmUgRlRESV9BQ0dfSEZEVUFMX1BJRAkJMHhERDIwCS8qIEhGIER1YWwgSVNPIFJlYWRlciAoUkZJRCkgKi8KLQotLyoKLSAqIFlvc3QgRW5naW5lZXJpbmcsIEluYy4gcHJvZHVjdHMgKHd3dy55b3N0ZW5naW5lZXJpbmcuY29tKS4KLSAqIFBJRCAweEUwNTAgc3VibWl0dGVkIGJ5IEFhcm9uIFByb3NlLgotICovCi0jZGVmaW5lIEZURElfWUVJX1NFUlZPQ0VOVEVSMzFfUElECTB4RTA1MAkvKiBZRUkgU2Vydm9DZW50ZXIzLjEgVVNCICovCi0KLS8qCi0gKiBUaG9yTGFicyBVU0IgbW90b3IgZHJpdmVycwotICovCi0jZGVmaW5lIEZURElfVEhPUkxBQlNfUElECQkweGZhZjAgLyogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMgKi8KLQotLyoKLSAqIFRlc3RvIHByb2R1Y3RzIChodHRwOi8vd3d3LnRlc3RvLmNvbS8pCi0gKiBTdWJtaXR0ZWQgYnkgQ29saW4gTGVyb3kKLSAqLwotI2RlZmluZSBURVNUT19WSUQJCQkweDEyOEQKLSNkZWZpbmUgVEVTVE9fVVNCX0lOVEVSRkFDRV9QSUQJCTB4MDAwMQotCi0vKgotICogR2FtbWEgU2NvdXQgKGh0dHA6Ly9nYW1tYS1zY291dC5jb20vKS4gU3VibWl0dGVkIGJ5IHJzY0BydW50dXguY29tLgotICovCi0jZGVmaW5lIEZURElfR0FNTUFfU0NPVVRfUElECQkweEQ2NzgJLyogR2FtbWEgU2NvdXQgb25saW5lICovCi0KLS8qCi0gKiBUYWN0cml4IE9wZW5Qb3J0IChFQ1UpIGRldmljZXMuCi0gKiBPcGVuUG9ydCAxLjNNIHN1Ym1pdHRlZCBieSBEb25vdXIgU2l6ZW1vcmUuCi0gKiBPcGVuUG9ydCAxLjNTIGFuZCAxLjNVIHN1Ym1pdHRlZCBieSBJYW4gQWJib3R0LgotICovCi0jZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM01fUElECTB4Q0M0OAkvKiBPcGVuUG9ydCAxLjMgTWl0c3ViaXNoaSAqLwotI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNTX1BJRAkweENDNDkJLyogT3BlblBvcnQgMS4zIFN1YmFydSAqLwotI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNVX1BJRAkweENDNEEJLyogT3BlblBvcnQgMS4zIFVuaXZlcnNhbCAqLwotCi0vKgotICogVGVsbGR1cyBUZWNobm9sb2dpZXMKLSAqLwotI2RlZmluZSBURUxMRFVTX1ZJRAkJCTB4MTc4MQkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgVEVMTERVU19URUxMU1RJQ0tfUElECQkweDBDMzAJLyogUkYgY29udHJvbCBkb25nbGUgNDMzIE1IeiB1c2luZyBGVDIzMlJMICovCi0KLS8qCi0gKiBJQlMgZWxla3Ryb25payBwcm9kdWN0IGlkcwotICogU3VibWl0dGVkIGJ5IFRob21hcyBTY2hsZXVzZW5lcgotICovCi0jZGVmaW5lIEZURElfSUJTX1VTNDg1X1BJRAkweGZmMzggIC8qIElCUyBVUzQ4NSAoVVNCPC0tPlJTNDIyLzQ4NSBpbnRlcmZhY2UpICovCi0jZGVmaW5lIEZURElfSUJTX1BJQ1BST19QSUQJMHhmZjM5ICAvKiBJQlMgUElDLVByb2dyYW1tZXIgKi8KLSNkZWZpbmUgRlRESV9JQlNfUENNQ0lBX1BJRAkweGZmM2EgIC8qIElCUyBDYXJkIHJlYWRlciBmb3IgUENNQ0lBIFNSQU0tY2FyZHMgKi8KLSNkZWZpbmUgRlRESV9JQlNfUEsxX1BJRAkweGZmM2IgIC8qIElCUyBQSzEgLSBQYXJ0aWNlbCBjb3VudGVyICovCi0jZGVmaW5lIEZURElfSUJTX1JTMjMyTU9OX1BJRAkweGZmM2MgIC8qIElCUyBSUzIzMiAtIE1vbml0b3IgKi8KLSNkZWZpbmUgRlRESV9JQlNfQVBQNzBfUElECTB4ZmYzZCAgLyogQVBQIDcwIChkdXN0IG1vbml0b3Jpbmcgc3lzdGVtKSAqLwotI2RlZmluZSBGVERJX0lCU19QRURPX1BJRAkweGZmM2UgIC8qIElCUyBQRURPLU1vZGVtIChSRiBtb2RlbSA4NjguMzUgTUh6KSAqLwotI2RlZmluZSBGVERJX0lCU19QUk9EX1BJRAkweGZmM2YgIC8qIGZ1dHVyZSBkZXZpY2UgKi8KLQotLyoKLSAqICBNYXhTdHJlYW0gZGV2aWNlcwl3d3cubWF4c3RyZWFtLm5ldAotICovCi0jZGVmaW5lIEZURElfTUFYU1RSRUFNX1BJRAkweEVFMTgJLyogWGJlZSBQS0ctVSBNb2R1bGUgKi8KLQotLyogT2xpbWV4ICovCi0jZGVmaW5lIE9MSU1FWF9WSUQJCQkweDE1QkEKLSNkZWZpbmUgT0xJTUVYX0FSTV9VU0JfT0NEX1BJRAkJMHgwMDAzCi0KLS8qIEx1bWluYXJ5IE1pY3JvIFN0ZWxsYXJpcyBCb2FyZHMsIFZJRCA9IEZURElfVklEICovCi0vKiBGVERJIDIzMzJDIER1YWwgY2hhbm5lbCBkZXZpY2UsIHNpZGUgQT0yNDUgRklGTyAoSlRBRyksIFNpZGUgQj1SUzIzMiBVQVJUICovCi0jZGVmaW5lIExNSV9MTTNTX0RFVkVMX0JPQVJEX1BJRAkweGJjZDgKLSNkZWZpbmUgTE1JX0xNM1NfRVZBTF9CT0FSRF9QSUQJCTB4YmNkOQotCi0vKiB3d3cuZWxzdGVyZWxlY3RyaWNpdHkuY29tIEVsc3RlciBVbmljb20gSUlJIE9wdGljYWwgUHJvYmUgKi8KLSNkZWZpbmUgRlRESV9FTFNURVJfVU5JQ09NX1BJRAkJMHhFNzAwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFRoZSBNb2JpbGl0eSBMYWIgKFRNTCkKLSAqIFN1Ym1pdHRlZCBieSBQaWVycmUgQ2FzdGVsbGEKLSAqLwotI2RlZmluZSBUTUxfVklECQkJMHgxQjkxCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBUTUxfVVNCX1NFUklBTF9QSUQJMHgwMDY0CS8qIFVTQiAtIFNlcmlhbCBDb252ZXJ0ZXIgKi8KLQotLyogUHJvcG94IGRldmljZXMgKi8KLSNkZWZpbmUgRlRESV9QUk9QT1hfSlRBR0NBQkxFSUlfUElECTB4RDczOAotCi0vKiBSaWcgRXhwZXJ0IFVrcmFpbmUgZGV2aWNlcyAqLwotI2RlZmluZSBGVERJX1JFVV9USU5ZX1BJRAkJMHhFRDIyCS8qIFJpZ0V4cGVydCBUaW55ICovCi0KLS8qIERvbWludGVsbCBwcm9kdWN0cyAgaHR0cDovL3d3dy5kb21pbnRlbGwuY29tICovCi0jZGVmaW5lIEZURElfRE9NSU5URUxMX0RHUUdfUElECTB4RUY1MAkvKiBNYXN0ZXIgKi8KLSNkZWZpbmUgRlRESV9ET01JTlRFTExfRFVTQl9QSUQJMHhFRjUxCS8qIERVU0IwMSBtb2R1bGUgKi8KLQotLyogQWx0aS0yIHByb2R1Y3RzICBodHRwOi8vd3d3LmFsdGktMi5jb20gKi8KLSNkZWZpbmUgQUxUSTJfVklECTB4MUJDOQotI2RlZmluZSBBTFRJMl9OM19QSUQJMHg2MDAxCS8qIE5lcHR1bmUgMyAqLwotCiAvKiBDb21tYW5kcyAqLwogI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KICNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KQEAgLTkxMCw4NiArNDAsNiBAQAogI2RlZmluZSBJTlRFUkZBQ0VfQwkJMwogI2RlZmluZSBJTlRFUkZBQ0VfRAkJNAogCi0vKgotICogRklDIC8gT3Blbk1va28sIEluYy4gaHR0cDovL3dpa2kub3Blbm1va28ub3JnL3dpa2kvTmVvMTk3M19EZWJ1Z19Cb2FyZF92MwotICogU3VibWl0dGVkIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+Ci0gKi8KLSNkZWZpbmUJRklDX1ZJRAkJCTB4MTQ1NwotI2RlZmluZQlGSUNfTkVPMTk3M19ERUJVR19QSUQJMHg1MTE4Ci0KLS8qCi0gKiBSQVRPQyBSRVgtVVNCNjBGCi0gKi8KLSNkZWZpbmUgUkFUT0NfVkVORE9SX0lECQkweDA1ODQKLSNkZWZpbmUgUkFUT0NfUFJPRFVDVF9JRF9VU0I2MEYJMHhiMDIwCi0KLS8qCi0gKiBESUVCT0xEIEJDUyBTRTkyMwotICovCi0jZGVmaW5lIERJRUJPTERfQkNTX1NFOTIzX1BJRAkweGZiOTkKLQotLyoKLSAqIEF0bWVsIFNUSzU0MQotICovCi0jZGVmaW5lIEFUTUVMX1ZJRAkJMHgwM2ViIC8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBTVEs1NDFfUElECQkweDIxMDkgLyogWmlnYmVlIENvbnRyb2xsZXIgKi8KLQotLyoKLSAqIERyZXNkZW4gRWxla3Ryb25pYyBTZW5zb3IgVGVybWluYWwgQm9hcmQKLSAqLwotI2RlZmluZSBERV9WSUQJCQkweDFjZjEgLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFNUQl9QSUQJCQkweDAwMDEgLyogU2Vuc29yIFRlcm1pbmFsIEJvYXJkICovCi0jZGVmaW5lIFdIVF9QSUQJCQkweDAwMDQgLyogV2lyZWxlc3MgSGFuZGhlbGQgVGVybWluYWwgKi8KLQotLyoKLSAqIEJsYWNrZmluIGduSUNFIEpUQUcKLSAqIGh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWh3Omp0YWc6Z25pY2UKLSAqLwotI2RlZmluZSBBRElfVklEIAkJMHgwNDU2Ci0jZGVmaW5lIEFESV9HTklDRV9QSUQgCQkweEYwMDAKLSNkZWZpbmUgQURJX0dOSUNFUExVU19QSUQgCTB4RjAwMQotCi0vKgotICogSkVUSSBTUEVDVFJPTUVURVIgU1BFQ0JPUyAxMjAxCi0gKiBodHRwOi8vd3d3LmpldGkuY29tL3Byb2R1Y3RzL3N5cy9zY2Ivc2NiMTIwMS5waHAKLSAqLwotI2RlZmluZSBKRVRJX1ZJRAkJMHgwYzZjCi0jZGVmaW5lIEpFVElfU1BDMTIwMV9QSUQJMHgwNGIyCi0KLS8qCi0gKiBNYXJ2ZWxsIFNoZWV2YVBsdWcKLSAqLwotI2RlZmluZSBNQVJWRUxMX1ZJRAkJMHg5ZTg4Ci0jZGVmaW5lIE1BUlZFTExfU0hFRVZBUExVR19QSUQJMHg5ZThmCi0KLSNkZWZpbmUgRlRESV9UVVJURUxJWkVSX1BJRAkweEJEQzggLyogSlRBRy9SUy0yMzIgYWRhcHRlciBieSBlZ25pdGUgR21CSCAqLwotCi0vKgotICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKLSAqIFN1Ym1pdHRlZCBieSBWaWxsZSBTdW5kYmVyZy4KLSAqLwotI2RlZmluZSBHTl9PVE9NRVRSSUNTX1ZJRAkweDBjMzMJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIEFVUklDQUxfVVNCX1BJRAkJMHgwMDEwCS8qIEF1cmljYWwgVVNCIEF1ZGlvbWV0ZXIgKi8KLQotLyoKLSAqIEJheWVyIEFzY2Vuc2lhIENvbnRvdXIgYmxvb2QgZ2x1Y29zZSBtZXRlciBVU0ItY29udmVydGVyIGNhYmxlLgotICogaHR0cDovL3dpbmdsdWNvZmFjdHMuY29tL2NhYmxlcy8KLSAqLwotI2RlZmluZSBCQVlFUl9WSUQgICAgICAgICAgICAgICAgICAgICAgMHgxQTc5Ci0jZGVmaW5lIEJBWUVSX0NPTlRPVVJfQ0FCTEVfUElEICAgICAgICAweDYwMDEKLQotLyoKLSAqIE1hcnZlbGwgT3BlblJEIEJhc2UsIENsaWVudAotICogaHR0cDovL3d3dy5vcGVuLXJkLm9yZwotICogT3BlblJEIEJhc2UsIENsaWVudCB1c2UgVklEIDB4MDQwMwotICovCi0jZGVmaW5lIE1BUlZFTExfT1BFTlJEX1BJRAkweDllOTAKLQotLyoKLSAqIEhhbWVnIEhPODIwIGFuZCBITzg3MCBpbnRlcmZhY2UgKHVzaW5nIFZJRCAweDA0MDMpCi0gKi8KLSNkZWZpbmUgICAgICAgIEhBTUVHX0hPODIwX1BJRCAgICAgICAgIDB4ZWQ3NAotI2RlZmluZSAgICAgICAgSEFNRUdfSE84NzBfUElEICAgICAgICAgMHhlZDcxCiAKIC8qCiAgKiAgIEJtUmVxdWVzdFR5cGU6ICAxMTAwIDAwMDBiCkBAIC0xNTA0LDQgKzU1NCwzIEBACiAgKiBCMi4uNwlMZW5ndGggb2YgbWVzc2FnZSAtIChub3QgaW5jbHVkaW5nIEJ5dGUgMCkKICAqCiAgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTJiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTAsMCArMSw5ODYgQEAKKy8qCisgKiB2ZW5kb3IvcHJvZHVjdCBJRHMgKFZJRC9QSUQpIG9mIGRldmljZXMgdXNpbmcgRlRESSBVU0Igc2VyaWFsIGNvbnZlcnRlcnMuCisgKiBQbGVhc2Uga2VlcCBudW1lcmljYWxseSBzb3J0ZWQgd2l0aGluIGluZGl2aWR1YWwgYXJlYXMsIHRoYW5rcyEKKyAqCisgKiBQaGlsaXBwIEf8aHJpbmcgLSBwZ0BmdXR1cmV3YXJlLmF0IC0gYWRkZWQgdGhlIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcworICogZnJvbSBSdWRvbGYgR3VnbGVyCisgKgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogZGV2aWNlcyB1c2luZyBGVERJIFZJRCAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLworCisKKy8qKiogIm9yaWdpbmFsIiBGVERJIGRldmljZSBQSURzICoqKi8KKworI2RlZmluZSBGVERJXzhVMjMyQU1fUElEIDB4NjAwMSAvKiBTaW1pbGFyIGRldmljZSB0byBTSU8gYWJvdmUgKi8KKyNkZWZpbmUgRlRESV84VTIzMkFNX0FMVF9QSUQgMHg2MDA2IC8qIEZUREkncyBhbHRlcm5hdGUgUElEIGZvciBhYm92ZSAqLworI2RlZmluZSBGVERJXzhVMjIzMkNfUElEIDB4NjAxMCAvKiBEdWFsIGNoYW5uZWwgZGV2aWNlICovCisjZGVmaW5lIEZURElfNDIzMkhfUElEIDB4NjAxMSAvKiBRdWFkIGNoYW5uZWwgaGktc3BlZWQgZGV2aWNlICovCisjZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KKyNkZWZpbmUgRlRESV8yMzJSTF9QSUQgIDB4RkJGQSAgLyogUHJvZHVjdCBJRCBmb3IgRlQyMzJSTCAqLworCisKKy8qKiogdGhpcmQtcGFydHkgUElEcyAodXNpbmcgRlRESV9WSUQpICoqKi8KKworLyoKKyAqIE1hcnZlbGwgT3BlblJEIEJhc2UsIENsaWVudAorICogaHR0cDovL3d3dy5vcGVuLXJkLm9yZworICogT3BlblJEIEJhc2UsIENsaWVudCB1c2UgVklEIDB4MDQwMworICovCisjZGVmaW5lIE1BUlZFTExfT1BFTlJEX1BJRAkweDllOTAKKworLyogd3d3LmNhbmRhcHRlci5jb20gRXdlcnQgRW5lcmd5IFN5c3RlbXMgQ0FOZGFwdGVyIGRldmljZSAqLworI2RlZmluZSBGVERJX0NBTkRBUFRFUl9QSUQgMHg5RjgwIC8qIFByb2R1Y3QgSWQgKi8KKworLyogT09DRGxpbmsgYnkgSm9lcm4gS2FpcGYgPGpvZXJua0B3ZWIuZGU+CisgKiAoaHR0cDovL3d3dy5qb2Vybm9ubGluZS5kZS9kdy9kb2t1LnBocD9pZD1zdGFydCZpZHg9cHJvamVjdHM6b29jZGxpbmspICovCisjZGVmaW5lIEZURElfT09DRExJTktfUElECTB4YmFmOAkvKiBBbW9udGVjIEpUQUdrZXkgKi8KKworLyogTHVtaW5hcnkgTWljcm8gU3RlbGxhcmlzIEJvYXJkcywgVklEID0gRlRESV9WSUQgKi8KKy8qIEZUREkgMjMzMkMgRHVhbCBjaGFubmVsIGRldmljZSwgc2lkZSBBPTI0NSBGSUZPIChKVEFHKSwgU2lkZSBCPVJTMjMyIFVBUlQgKi8KKyNkZWZpbmUgTE1JX0xNM1NfREVWRUxfQk9BUkRfUElECTB4YmNkOAorI2RlZmluZSBMTUlfTE0zU19FVkFMX0JPQVJEX1BJRAkJMHhiY2Q5CisKKyNkZWZpbmUgRlRESV9UVVJURUxJWkVSX1BJRAkweEJEQzggLyogSlRBRy9SUy0yMzIgYWRhcHRlciBieSBlZ25pdGUgR21CSCAqLworCisvKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLworI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOAorI2RlZmluZSBGVERJX09QRU5EQ0NfU05JRkZFUl9QSUQJMHhCRkQ5CisjZGVmaW5lIEZURElfT1BFTkRDQ19USFJPVFRMRV9QSUQJMHhCRkRBCisjZGVmaW5lIEZURElfT1BFTkRDQ19HQVRFV0FZX1BJRAkweEJGREIKKworLyoKKyAqIFJSLUNpcktpdHMgTG9jb0J1ZmZlciBVU0IgKGh0dHA6Ly93d3cucnItY2lya2l0cy5jb20pCisgKi8KKyNkZWZpbmUgRlRESV9SUkNJUktJVFNfTE9DT0JVRkZFUl9QSUQJMHhjN2QwCS8qIExvY29CdWZmZXIgVVNCICovCisKKy8qIERNWDRBTEwgRE1YIEludGVyZmFjZXMgKi8KKyNkZWZpbmUgRlRESV9ETVg0QUxMIDB4Qzg1MAorCisvKgorICogQVNLLmZyIGRldmljZXMKKyAqLworI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KKworLyogd3d3LnN0YXJ0aW5nLXBvaW50LXN5c3RlbXMuY29tILVDaGFtZWxlb24gZGV2aWNlICovCisjZGVmaW5lIEZURElfTUlDUk9fQ0hBTUVMRU9OX1BJRAkweENBQTAJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogVGFjdHJpeCBPcGVuUG9ydCAoRUNVKSBkZXZpY2VzLgorICogT3BlblBvcnQgMS4zTSBzdWJtaXR0ZWQgYnkgRG9ub3VyIFNpemVtb3JlLgorICogT3BlblBvcnQgMS4zUyBhbmQgMS4zVSBzdWJtaXR0ZWQgYnkgSWFuIEFiYm90dC4KKyAqLworI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNNX1BJRAkweENDNDgJLyogT3BlblBvcnQgMS4zIE1pdHN1YmlzaGkgKi8KKyNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzU19QSUQJMHhDQzQ5CS8qIE9wZW5Qb3J0IDEuMyBTdWJhcnUgKi8KKyNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzVV9QSUQJMHhDQzRBCS8qIE9wZW5Qb3J0IDEuMyBVbml2ZXJzYWwgKi8KKworLyogU0NTIEhGIFJhZGlvIE1vZGVtcyBQSUQncyAoaHR0cDovL3d3dy5zY3MtcHRjLmNvbSkgKi8KKy8qIHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzBfUElEIDB4RDAxMCAgICAvKiBTQ1MgUFRDLUlJdXNiICovCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV8xX1BJRCAweEQwMTEgICAgLyogU0NTIFRyYWNrZXIgLyBEU1AgVE5DICovCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV8yX1BJRCAweEQwMTIKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzNfUElEIDB4RDAxMworI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNF9QSUQgMHhEMDE0CisjZGVmaW5lIEZURElfU0NTX0RFVklDRV81X1BJRCAweEQwMTUKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzZfUElEIDB4RDAxNgorI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfN19QSUQgMHhEMDE3CisKKy8qIGlQbHVzIGRldmljZSAqLworI2RlZmluZSBGVERJX0lQTFVTX1BJRCAweEQwNzAgLyogUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX0lQTFVTMl9QSUQgMHhEMDcxIC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEdhbW1hIFNjb3V0IChodHRwOi8vZ2FtbWEtc2NvdXQuY29tLykuIFN1Ym1pdHRlZCBieSByc2NAcnVudHV4LmNvbS4KKyAqLworI2RlZmluZSBGVERJX0dBTU1BX1NDT1VUX1BJRAkJMHhENjc4CS8qIEdhbW1hIFNjb3V0IG9ubGluZSAqLworCisvKiBQcm9wb3ggZGV2aWNlcyAqLworI2RlZmluZSBGVERJX1BST1BPWF9KVEFHQ0FCTEVJSV9QSUQJMHhENzM4CisKKy8qCisgKiBYc2VucyBUZWNobm9sb2dpZXMgQlYgcHJvZHVjdHMgKGh0dHA6Ly93d3cueHNlbnMuY29tKS4KKyAqLworI2RlZmluZSBYU0VOU19DT05WRVJURVJfMF9QSUQJMHhEMzg4CisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8xX1BJRAkweEQzODkKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzJfUElECTB4RDM4QQorI2RlZmluZSBYU0VOU19DT05WRVJURVJfM19QSUQJMHhEMzhCCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl80X1BJRAkweEQzOEMKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzVfUElECTB4RDM4RAorI2RlZmluZSBYU0VOU19DT05WRVJURVJfNl9QSUQJMHhEMzhFCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl83X1BJRAkweEQzOEYKKworLyoKKyAqIE5ESSAod3d3Lm5kaWdpdGFsLmNvbSkgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX05ESV9IVUNfUElECQkweERBNzAJLyogTkRJIEhvc3QgVVNCIENvbnZlcnRlciAqLworI2RlZmluZSBGVERJX05ESV9TUEVDVFJBX1NDVV9QSUQJMHhEQTcxCS8qIE5ESSBTcGVjdHJhIFNDVSAqLworI2RlZmluZSBGVERJX05ESV9GVVRVUkVfMl9QSUQJCTB4REE3MgkvKiBOREkgZnV0dXJlIGRldmljZSAjMiAqLworI2RlZmluZSBGVERJX05ESV9GVVRVUkVfM19QSUQJCTB4REE3MwkvKiBOREkgZnV0dXJlIGRldmljZSAjMyAqLworI2RlZmluZSBGVERJX05ESV9BVVJPUkFfU0NVX1BJRAkJMHhEQTc0CS8qIE5ESSBBdXJvcmEgU0NVICovCisKKy8qCisgKiBXZXN0cmV4IEludGVybmF0aW9uYWwgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ29yeSBMZWUKKyAqLworI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRAkweERDMDAJLyogTW9kZWwgNzc3ICovCisjZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQJMHhEQzAxCS8qIE1vZGVsIDg5MDBGICovCisKKy8qCisgKiBBQ0cgSWRlbnRpZmljYXRpb24gVGVjaG5vbG9naWVzIEdtYkggcHJvZHVjdHMgKGh0dHA6Ly93d3cuYWNnLmRlLykuCisgKiBTdWJtaXR0ZWQgYnkgYW50b24gLWF0LSBnb3RvMTAgLWRvdC0gb3JnLgorICovCisjZGVmaW5lIEZURElfQUNHX0hGRFVBTF9QSUQJCTB4REQyMAkvKiBIRiBEdWFsIElTTyBSZWFkZXIgKFJGSUQpICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQXJ0ZW1pcyBhc3Ryb25vbWljYWwgVVNCIGJhc2VkIGNhbWVyYXMKKyAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXJ0ZW1pc2NjZC5jby51ay8KKyAqLworI2RlZmluZSBGVERJX0FSVEVNSVNfUElECTB4REYyOAkvKiBBbGwgQXJ0ZW1pcyBDYW1lcmFzICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQVRJSyBJbnN0cnVtZW50cyBhc3Ryb25vbWljYWwgVVNCIGJhc2VkIGNhbWVyYXMKKyAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXRpay1pbnN0cnVtZW50cy5jb20vCisgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2X1BJRAkweERGMzAJLyogQVRJSyBBVEstMTYgR3JheXNjYWxlIENhbWVyYSAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZDX1BJRAkweERGMzIJLyogQVRJSyBBVEstMTZDIENvbG91ciBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJfUElECTB4REYzMQkvKiBBVElLIEFUSy0xNkhSIEdyYXlzY2FsZSBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJDX1BJRAkweERGMzMJLyogQVRJSyBBVEstMTZIUkMgQ29sb3VyIENhbWVyYSAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZJQ19QSUQgICAweERGMzUgIC8qIEFUSUsgQVRLLTE2SUMgR3JheXNjYWxlIENhbWVyYSAqLworCisvKgorICogWW9zdCBFbmdpbmVlcmluZywgSW5jLiBwcm9kdWN0cyAod3d3Lnlvc3RlbmdpbmVlcmluZy5jb20pLgorICogUElEIDB4RTA1MCBzdWJtaXR0ZWQgYnkgQWFyb24gUHJvc2UuCisgKi8KKyNkZWZpbmUgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQJMHhFMDUwCS8qIFlFSSBTZXJ2b0NlbnRlcjMuMSBVU0IgKi8KKworLyoKKyAqIEVMViBVU0IgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ2hyaXN0aWFuIEFidCBvZiBFTFYgKHd3dy5lbHYuZGUpLgorICogQWxsIG9mIHRoZXNlIGRldmljZXMgdXNlIEZUREkncyB2ZW5kb3IgSUQgKDB4MDQwMykuCisgKgorICogVGhlIHByZXZpb3VzbHkgaW5jbHVkZWQgUElEIGZvciB0aGUgVU8gMTAwIG1vZHVsZSB3YXMgaW5jb3JyZWN0LgorICogSW4gZmFjdCwgdGhhdCBQSUQgd2FzIGZvciBFTFYncyBVUiAxMDAgVVNCLVJTMjMyIGNvbnZlcnRlciAoMHhGQjU4KS4KKyAqCisgKiBBcm1pbiBMYWV1Z2VyIG9yaWdpbmFsbHkgc2VudCB0aGUgUElEIGZvciB0aGUgVU0gMTAwIG1vZHVsZS4KKyAqLworI2RlZmluZSBGVERJX0VMVl9GSFoxMzAwUENfUElECTB4RTBFOAkvKiBGSFogMTMwMCBQQyAqLworI2RlZmluZSBGVERJX0VMVl9XUzUwMF9QSUQJMHhFMEU5CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDUwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfSFM0ODVfUElECTB4RTBFQQkvKiBVU0IgdG8gUlMtNDg1IGFkYXB0ZXIgKi8KKyNkZWZpbmUgRlRESV9FTFZfRU0xMDEwUENfUElECTB4RTBFRgkvKiBFbmdlcnkgbW9uaXRvciBFTSAxMDEwIFBDICovCisjZGVmaW5lIEZURElfRUxWX0NTSThfUElECTB4RTBGMAkvKiBDb21wdXRlci1TY2hhbHQtSW50ZXJmYWNlIChDU0kgOCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfRU0xMDAwRExfUElECTB4RTBGMQkvKiBQQy1EYXRlbmxvZ2dlciBmdWVyIEVuZXJnaWVtb25pdG9yIChFTSAxMDAwIERMKSAqLworI2RlZmluZSBGVERJX0VMVl9QQ0sxMDBfUElECTB4RTBGMgkvKiBQQy1LYWJlbHRlc3RlciAoUENLIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfUkZQNTAwX1BJRAkweEUwRjMJLyogSEYtTGVpc3R1bmdzbWVzc2VyIChSRlAgNTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9GUzIwU0lHX1BJRAkweEUwRjQJLyogU2lnbmFsZ2ViZXIgKEZTIDIwIFNJRykgKi8KKyNkZWZpbmUgRlRESV9FTFZfV1MzMDBQQ19QSUQJMHhFMEY2CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDMwMCBQQykgKi8KKyNkZWZpbmUgRlRESV9QSElfRklTQ09fUElEICAgICAgMHhFNDBCICAvKiBQSEkgRmlzY28gVVNCIHRvIFNlcmlhbCBjYWJsZSAqLworI2RlZmluZSBGVERJX0VMVl9VQUQ4X1BJRAkweEYwNjgJLyogVVNCLUFELVdhbmRsZXIgKFVBRCA4KSAqLworI2RlZmluZSBGVERJX0VMVl9VREE3X1BJRAkweEYwNjkJLyogVVNCLURBLVdhbmRsZXIgKFVEQSA3KSAqLworI2RlZmluZSBGVERJX0VMVl9VU0kyX1BJRAkweEYwNkEJLyogVVNCLVNjaHJpdHRtb3RvcmVuLUludGVyZmFjZSAoVVNJIDIpICovCisjZGVmaW5lIEZURElfRUxWX1QxMTAwX1BJRAkweEYwNkIJLyogVGhlcm1vbWV0ZXIgKFQgMTEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfUENEMjAwX1BJRAkweEYwNkMJLyogUEMtRGF0ZW5sb2dnZXIgKFBDRCAyMDApICovCisjZGVmaW5lIEZURElfRUxWX1VMQTIwMF9QSUQJMHhGMDZECS8qIFVTQi1MQ0QtQW5zdGV1ZXJ1bmcgKFVMQSAyMDApICovCisjZGVmaW5lIEZURElfRUxWX0FMQzg1MDBfUElECTB4RjA2RQkvKiBBTEMgODUwMCBFeHBlcnQgKi8KKyNkZWZpbmUgRlRESV9FTFZfRkhaMTAwMFBDX1BJRAkweEYwNkYJLyogRkhaIDEwMDAgUEMgKi8KKyNkZWZpbmUgRlRESV9FTFZfVVIxMDBfUElECTB4RkI1OAkvKiBVU0ItUlMyMzItVW1zZXR6ZXIgKFVSIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVU0xMDBfUElECTB4RkI1QQkvKiBVU0ItTW9kdWwgVU0gMTAwICovCisjZGVmaW5lIEZURElfRUxWX1VPMTAwX1BJRAkweEZCNUIJLyogVVNCLU1vZHVsIFVPIDEwMCAqLworLyogQWRkaXRpb25hbCBFTFYgUElEcyB0aGF0IGRlZmF1bHQgdG8gdXNpbmcgdGhlIEZUREkgRDJYWCBkcml2ZXJzIG9uCisgKiBNUyBXaW5kb3dzLCByYXRoZXIgdGhhbiB0aGUgRlRESSBWaXJ0dWFsIENvbSBQb3J0IGRyaXZlcnMuCisgKiBNYXliZSB0aGVzZSB3aWxsIGJlIGVhc2llciB0byB1c2Ugd2l0aCB0aGUgbGliZnRkaS9saWJ1c2IgdXNlci1zcGFjZQorICogZHJpdmVycywgb3IgcG9zc2libHkgdGhlIENvbWVkaSBkcml2ZXJzIGluIHNvbWUgY2FzZXMuICovCisjZGVmaW5lIEZURElfRUxWX0NMSTcwMDBfUElECTB4RkI1OQkvKiBDb21wdXRlci1MaWdodC1JbnRlcmZhY2UgKENMSSA3MDAwKSAqLworI2RlZmluZSBGVERJX0VMVl9QUFM3MzMwX1BJRAkweEZCNUMJLyogUHJvY2Vzc29yLVBvd2VyLVN1cHBseSAoUFBTIDczMzApICovCisjZGVmaW5lIEZURElfRUxWX1RGTTEwMF9QSUQJMHhGQjVECS8qIFRlbXBlcmFydHVyLUZldWNodGUgTWVzc2dlcmFldCAoVEZNIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVURGNzdfUElECTB4RkI1RQkvKiBVU0IgRENGIEZ1bmt1cmggKFVERiA3NykgKi8KKyNkZWZpbmUgRlRESV9FTFZfVUlPODhfUElECTB4RkI1RgkvKiBVU0ItSS9PIEludGVyZmFjZSAoVUlPIDg4KSAqLworCisvKgorICogRVZFUiBFY28gUHJvIFVQUyAoaHR0cDovL3d3dy5ldmVyLmNvbS5wbC8pCisgKi8KKworI2RlZmluZQlFVkVSX0VDT19QUk9fQ0RTCTB4ZTUyMAkvKiBSUy0yMzIgY29udmVydGVyICovCisKKy8qCisgKiBBY3RpdmUgUm9ib3RzIHByb2R1Y3QgaWRzLgorICovCisjZGVmaW5lIEZURElfQUNUSVZFX1JPQk9UU19QSUQJMHhFNTQ4CS8qIFVTQiBjb21tcyBib2FyZCAqLworCisvKiBQeXJhbWlkIENvbXB1dGVyIEdtYkggKi8KKyNkZWZpbmUgRlRESV9QWVJBTUlEX1BJRAkweEU2QzgJLyogUHlyYW1pZCBBcHBsaWFuY2UgRGlzcGxheSAqLworCisvKiB3d3cuZWxzdGVyZWxlY3RyaWNpdHkuY29tIEVsc3RlciBVbmljb20gSUlJIE9wdGljYWwgUHJvYmUgKi8KKyNkZWZpbmUgRlRESV9FTFNURVJfVU5JQ09NX1BJRAkJMHhFNzAwIC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEd1ZGUgQW5hbG9nLSB1bmQgRGlnaXRhbHN5c3RlbWUgR21iSAorICovCisjZGVmaW5lIEZURElfR1VERUFEU19FODA4X1BJRCAgICAweEU4MDgKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MDlfUElEICAgIDB4RTgwOQorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQV9QSUQgICAgMHhFODBBCisjZGVmaW5lIEZURElfR1VERUFEU19FODBCX1BJRCAgICAweEU4MEIKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MENfUElEICAgIDB4RTgwQworI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRF9QSUQgICAgMHhFODBECisjZGVmaW5lIEZURElfR1VERUFEU19FODBFX1BJRCAgICAweEU4MEUKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEZfUElEICAgIDB4RTgwRgorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OF9QSUQgICAgMHhFODg4ICAvKiBFeHBlcnQgSVNETiBDb250cm9sIFVTQiAqLworI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OV9QSUQgICAgMHhFODg5ICAvKiBVU0IgUlMtMjMyIE9wdG9CcmlkZ2UgKi8KKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEFfUElEICAgIDB4RTg4QQorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Ql9QSUQgICAgMHhFODhCCisjZGVmaW5lIEZURElfR1VERUFEU19FODhDX1BJRCAgICAweEU4OEMKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OERfUElEICAgIDB4RTg4RAorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RV9QSUQgICAgMHhFODhFCisjZGVmaW5lIEZURElfR1VERUFEU19FODhGX1BJRCAgICAweEU4OEYKKworLyoKKyAqIEVjbG8gKGh0dHA6Ly93d3cuZWNsby5wdC8pIHByb2R1Y3QgSURzLgorICogUElEIDB4RUE5MCBzdWJtaXR0ZWQgYnkgTWFydGluIEdyaWxsLgorICovCisjZGVmaW5lIEZURElfRUNMT19DT01fMVdJUkVfUElECTB4RUE5MAkvKiBDT00gdG8gMS1XaXJlIFVTQiBhZGFwdG9yICovCisKKy8qIFROQy1YIFVTQi10by1wYWNrZXQtcmFkaW8gYWRhcHRlciwgdmVyc2lvbnMgcHJpb3IgdG8gMy4wIChETFAgbW9kdWxlKSAqLworI2RlZmluZSBGVERJX1ROQ19YX1BJRAkJMHhFQkUwCisKKy8qCisgKiBUZXJhdHJvbmlrIHByb2R1Y3QgaWRzLgorICogU3VibWl0dGVkIGJ5IE8uIFf2bGZlbHNjaG5laWRlci4KKyAqLworI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfVkNQX1BJRAkgMHhFQzg4CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIFZDUCBkcml2ZXIgb24gd2luZG93cykgKi8KKyNkZWZpbmUgRlRESV9URVJBVFJPTklLX0QyWFhfUElEIDB4RUM4OQkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBEMlhYIGRyaXZlciBvbiB3aW5kb3dzKSAqLworCisvKiBSaWcgRXhwZXJ0IFVrcmFpbmUgZGV2aWNlcyAqLworI2RlZmluZSBGVERJX1JFVV9USU5ZX1BJRAkJMHhFRDIyCS8qIFJpZ0V4cGVydCBUaW55ICovCisKKy8qCisgKiBIYW1lZyBITzgyMCBhbmQgSE84NzAgaW50ZXJmYWNlICh1c2luZyBWSUQgMHgwNDAzKQorICovCisjZGVmaW5lICAgICAgICBIQU1FR19ITzgyMF9QSUQgICAgICAgICAweGVkNzQKKyNkZWZpbmUgICAgICAgIEhBTUVHX0hPODcwX1BJRCAgICAgICAgIDB4ZWQ3MQorCisvKgorICogIE1heFN0cmVhbSBkZXZpY2VzCXd3dy5tYXhzdHJlYW0ubmV0CisgKi8KKyNkZWZpbmUgRlRESV9NQVhTVFJFQU1fUElECTB4RUUxOAkvKiBYYmVlIFBLRy1VIE1vZHVsZSAqLworCisvKgorICogbWljcm9IQU0gcHJvZHVjdCBJRHMgKGh0dHA6Ly93d3cubWljcm9oYW0uY29tKS4KKyAqIFN1Ym1pdHRlZCBieSBKdXN0aW4gQnVya2V0IChLTDFSTCkgPHpvcnRvbkBqdGFuLmNvbT4KKyAqIGFuZCBNaWtlIFN0dWRlciAoSzZFRVApIDxrNmVlcEBoYW1zb2Z0d2FyZS5vcmc+LgorICogSWFuIEFiYm90dCA8YWJib3R0aUBtZXYuY28udWs+IGFkZGVkIGEgZmV3IG1vcmUgZnJvbSB0aGUgZHJpdmVyIElORiBmaWxlLgorICovCisjZGVmaW5lIEZURElfTUhBTV9LV19QSUQgMHhFRUU4CQkvKiBVU0ItS1cgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZU19QSUQgMHhFRUU5CQkvKiBVU0ItWVMgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZNl9QSUQgMHhFRUVBCQkvKiBVU0ItWTYgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZOF9QSUQgMHhFRUVCCQkvKiBVU0ItWTggaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9JQ19QSUQgMHhFRUVDCQkvKiBVU0ItSUMgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9EQjlfUElEIDB4RUVFRAkvKiBVU0ItREI5IGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fUlMyMzJfUElEIDB4RUVFRQkvKiBVU0ItUlMyMzIgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZOV9QSUQgMHhFRUVGCQkvKiBVU0ItWTkgaW50ZXJmYWNlICovCisKKy8qIERvbWludGVsbCBwcm9kdWN0cyAgaHR0cDovL3d3dy5kb21pbnRlbGwuY29tICovCisjZGVmaW5lIEZURElfRE9NSU5URUxMX0RHUUdfUElECTB4RUY1MAkvKiBNYXN0ZXIgKi8KKyNkZWZpbmUgRlRESV9ET01JTlRFTExfRFVTQl9QSUQJMHhFRjUxCS8qIERVU0IwMSBtb2R1bGUgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBQZXJsZSBTeXN0ZW1zCisgKiBVbHRyYVBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzCisgKi8KKyNkZWZpbmUgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElEIDB4RjBDMAkvKiBQZXJsZSBVbHRyYVBvcnQgUHJvZHVjdCBJZCAqLworCisvKiBTcHJvZyBJSSAoQW5kcmV3IENyb3NsYW5kJ3MgU3Byb2dJSSBEQ0MgaW50ZXJmYWNlKSAqLworI2RlZmluZSBGVERJX1NQUk9HX0lJCQkweEYwQzgKKworLyogYW4gaW5mcmFyZWQgcmVjZWl2ZXIgZm9yIHVzZXIgYWNjZXNzIGNvbnRyb2wgd2l0aCBJUiB0YWdzICovCisjZGVmaW5lIEZURElfUElFR1JPVVBfUElECTB4RjIwOAkvKiBQcm9kdWN0IElkICovCisKKy8qIEFDVCBTb2x1dGlvbnMgSG9tZVBybyBaV2F2ZSBpbnRlcmZhY2UKKyAgIChodHRwOi8vd3d3LmFjdC1zb2x1dGlvbnMuY29tL0hvbWVQcm8uaHRtKSAqLworI2RlZmluZSBGVERJX0FDVFpXQVZFX1BJRAkweEYyRDAKKworLyoKKyAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAorICogVVNCLVRUWSBhY3RpdiwgVVNCLVRUWSBwYXNzaXYuICBTb21lIFBJRHMgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZXZpY2VzCisgKiBhbmQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoaWNoIGFyZSB1c2VkIGJ5IHdoaWNoLgorICovCisjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAorI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKKworLyoKKyAqIExpbnggVGVjaG5vbG9naWVzIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgTElOWF9TRE1VU0JRU1NfUElECTB4RjQ0OAkvKiBMaW54IFNETS1VU0ItUVMtUyAqLworI2RlZmluZSBMSU5YX01BU1RFUkRFVkVMMl9QSUQgICAweEY0NDkgICAvKiBMaW54IE1hc3RlciBEZXZlbG9wbWVudCAyLjAgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMF9QSUQgICAweEY0NEEgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMV9QSUQgICAweEY0NEIgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMl9QSUQgICAweEY0NEMgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKworLyoKKyAqIE9jZWFuaWMgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX09DRUFOSUNfUElECTB4RjQ2MCAgLyogT2NlYW5pYyBkaXZlIGluc3RydW1lbnQgKi8KKworLyoKKyAqIFNVVU5UTyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLworCisvKiBVU0ItVUlSVCAtIEFuIGluZnJhcmVkIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciB1c2luZyB0aGUgOFUyMzJBTSBjaGlwICovCisvKiBodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0gKi8KKyNkZWZpbmUgRlRESV9VU0JfVUlSVF9QSUQJMHhGODUwCS8qIFByb2R1Y3QgSWQgKi8KKworLyogQ0NTIEluYy4gSUNEVS9JQ0RVNDAgcHJvZHVjdCBJRCAtCisgKiB0aGUgRlQyMzJCTSBpcyB1c2VkIGluIGFuIGluLWNpcmN1aXQtZGVidWdnZXIgdW5pdCBmb3IgUElDMTYncy9QSUMxOCdzICovCisjZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMAorI2RlZmluZSBGVERJX0NDU0lDRFU0MF8xX1BJRCAgICAweEY5RDEKKyNkZWZpbmUgRlRESV9DQ1NNQUNIWF8yX1BJRCAgICAgMHhGOUQyCisjZGVmaW5lIEZURElfQ0NTTE9BRF9OX0dPXzNfUElEIDB4RjlEMworI2RlZmluZSBGVERJX0NDU0lDRFU2NF80X1BJRCAgICAweEY5RDQKKyNkZWZpbmUgRlRESV9DQ1NQUklNRThfNV9QSUQgICAgMHhGOUQ1CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAorICogd2hpY2ggYXJlIHRoZSBGVDIzMkJNICggc2ltaWxhciB0byB0aGUgOFUyMzJBTSApCisgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMV9QSUQgICAgICAweEZBMDEgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMl9QSUQgICAgICAweEZBMDIgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNF9QSUQgICAgICAweEZBMDQgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNV9QSUQgICAgICAweEZBMDUgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEhvbWUgRWxlY3Ryb25pY3MgKHd3dy5ob21lLWVsZWN0cm8uY29tKSBVU0IgZ2FkZ2V0cworICovCisjZGVmaW5lIEZURElfSEVfVElSQTFfUElECTB4RkE3OAkvKiBUaXJhLTEgSVIgdHJhbnNjZWl2ZXIgKi8KKworLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KKyNkZWZpbmUgSU5TSURFX0FDQ0VTU08JCTB4RkFEMAorCisvKgorICogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMKKyAqLworI2RlZmluZSBGVERJX1RIT1JMQUJTX1BJRAkJMHhmYWYwIC8qIFRob3JMYWJzIFVTQiBtb3RvciBkcml2ZXJzICovCisKKy8qCisgKiBQcm90ZWdvIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzEJMHhGQzcwCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKyNkZWZpbmUgUFJPVEVHT19SMlgwCQkweEZDNzEJLyogUjIwMC1VU0IgVFJORyB1bml0IChSMjEwLCBSMjIwLCBhbmQgUjIzMCkgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzMJMHhGQzcyCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzQJMHhGQzczCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKworLyoKKyAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAorICovCisjZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MgorCisvKiB3d3cuaXJ0cmFucy5kZSBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9JUlRSQU5TX1BJRCAweEZDNjAgLyogUHJvZHVjdCBJZCAqLworCisvKgorICogUk0gTWljaGFlbGlkZXMgQ0FOdmlldyBVU0IgKGh0dHA6Ly93d3cucm1jYW4uY29tKSAoRlRESV9WSUQpCisgKiBDQU4gZmllbGRidXMgaW50ZXJmYWNlIGFkYXB0ZXIsIGFkZGVkIGJ5IHBvcnQgR21iSCB3d3cucG9ydC5kZSkKKyAqIElhbiBBYmJvdHQgY2hhbmdlZCB0aGUgbWFjcm8gbmFtZXMgZm9yIGNvbnNpc3RlbmN5LgorICovCisjZGVmaW5lIEZURElfUk1fQ0FOVklFV19QSUQJMHhmZDYwCS8qIFByb2R1Y3QgSWQgKi8KKy8qIHd3dy50aG91Z2h0dGVjaG5vbG9neS5jb20vIFRULVVTQiBwcm92aWRlIHdpdGggcHJvY29tcCB1c2UgZnRkaV9zaW8gKi8KKyNkZWZpbmUgRlRESV9UVFVTQl9QSUQgMHhGRjIwIC8qIFByb2R1Y3QgSWQgKi8KKworI2RlZmluZSBGVERJX1VTQlhfNzA3X1BJRCAweEY4NTcJLyogQURTVGVjaCBJUiBCbGFzdGVyIFVTQlgtNzA3IChGVERJX1ZJRCkgKi8KKworI2RlZmluZSBGVERJX1JFTEFJU19QSUQJMHhGQTEwICAvKiBSZWxhaXMgZGV2aWNlIGZyb20gUnVkb2xmIEd1Z2xlciAqLworCisvKgorICogUENESiB1c2UgZnRkaSBiYXNlZCBkai1jb250cm9sbGVycy4gVGhlIGZvbGxvd2luZyBQSUQgaXMKKyAqIGZvciB0aGVpciBEQUMtMiBkZXZpY2UgaHR0cDovL3d3dy5wY2RqaGFyZHdhcmUuY29tL0RBQzIuYXNwCisgKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSwgUElEIHNlbnQgYnkgV291dGVyIFBhZXNlbikKKyAqLworI2RlZmluZSBGVERJX1BDREpfREFDMl9QSUQgMHhGQTg4CisKKyNkZWZpbmUgRlRESV9SMjAwMEtVX1RSVUVfUk5HCTB4RkI4MCAgLyogUjIwMDBLVSBUUlVFIFJORyAoRlRESV9WSUQpICovCisKKy8qCisgKiBESUVCT0xEIEJDUyBTRTkyMyAoRlRESV9WSUQpCisgKi8KKyNkZWZpbmUgRElFQk9MRF9CQ1NfU0U5MjNfUElECTB4ZmI5OQorCisvKiB3d3cuY3J5c3RhbGZvbnR6LmNvbSBkZXZpY2VzCisgKiAtIHRoYW54IGZvciBwcm92aWRpbmcgZnJlZSBkZXZpY2VzIGZvciBldmFsdWF0aW9uICEKKyAqIHRoZXkgdXNlIHRoZSBmdGRpIGNoaXBzZXQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlCisgKiBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZQorICovCisjZGVmaW5lIEZURElfWEZfNjMyX1BJRCAweEZDMDgJLyogNjMyOiAxNngyIENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjM0X1BJRCAweEZDMDkJLyogNjM0OiAyMHg0IENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNTQ3X1BJRCAweEZDMEEJLyogNTQ3OiBUd28gbGluZSBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjMzX1BJRCAweEZDMEIJLyogNjMzOiAxNngyIENoYXJhY3RlciBEaXNwbGF5IHdpdGggS2V5cyAqLworI2RlZmluZSBGVERJX1hGXzYzMV9QSUQgMHhGQzBDCS8qIDYzMTogMjB4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzYzNV9QSUQgMHhGQzBECS8qIDYzNTogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzY0MF9QSUQgMHhGQzBFCS8qIDY0MDogVHdvIGxpbmUgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzY0Ml9QSUQgMHhGQzBGCS8qIDY0MjogVHdvIGxpbmUgRGlzcGxheSAqLworCisvKgorICogVmlkZW8gTmV0d29ya3MgTGltaXRlZCAvIEhvbWVjaG9pY2UgaW4gdGhlIFVLIHVzZSBhbiBmdGRpLWJhc2VkIGRldmljZQorICogZm9yIHRoZWlyIDFNYiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZAorICogYnkgdGhlIHVzYiBkZXZpY2Ugc3VwcGxpZWQgKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkKKyAqLworI2RlZmluZSBGVERJX1ZOSENQQ1VTQl9EX1BJRCAweGZlMzggLyogUHJvZHVjdCBJZCAqLworCisvKiBBbHBoYU1pY3JvIENvbXBvbmVudHMgQU1DLTIzMlVTQjAxIGRldmljZSAoRlRESV9WSUQpICovCisjZGVmaW5lIEZURElfQU1DMjMyX1BJRCAweEZGMDAgLyogUHJvZHVjdCBJZCAqLworCisvKgorICogSUJTIGVsZWt0cm9uaWsgcHJvZHVjdCBpZHMgKEZURElfVklEKQorICogU3VibWl0dGVkIGJ5IFRob21hcyBTY2hsZXVzZW5lcgorICovCisjZGVmaW5lIEZURElfSUJTX1VTNDg1X1BJRAkweGZmMzggIC8qIElCUyBVUzQ4NSAoVVNCPC0tPlJTNDIyLzQ4NSBpbnRlcmZhY2UpICovCisjZGVmaW5lIEZURElfSUJTX1BJQ1BST19QSUQJMHhmZjM5ICAvKiBJQlMgUElDLVByb2dyYW1tZXIgKi8KKyNkZWZpbmUgRlRESV9JQlNfUENNQ0lBX1BJRAkweGZmM2EgIC8qIElCUyBDYXJkIHJlYWRlciBmb3IgUENNQ0lBIFNSQU0tY2FyZHMgKi8KKyNkZWZpbmUgRlRESV9JQlNfUEsxX1BJRAkweGZmM2IgIC8qIElCUyBQSzEgLSBQYXJ0aWNlbCBjb3VudGVyICovCisjZGVmaW5lIEZURElfSUJTX1JTMjMyTU9OX1BJRAkweGZmM2MgIC8qIElCUyBSUzIzMiAtIE1vbml0b3IgKi8KKyNkZWZpbmUgRlRESV9JQlNfQVBQNzBfUElECTB4ZmYzZCAgLyogQVBQIDcwIChkdXN0IG1vbml0b3Jpbmcgc3lzdGVtKSAqLworI2RlZmluZSBGVERJX0lCU19QRURPX1BJRAkweGZmM2UgIC8qIElCUyBQRURPLU1vZGVtIChSRiBtb2RlbSA4NjguMzUgTUh6KSAqLworI2RlZmluZSBGVERJX0lCU19QUk9EX1BJRAkweGZmM2YgIC8qIGZ1dHVyZSBkZXZpY2UgKi8KKy8qIHd3dy5jYW51c2IuY29tIExhd2ljZWwgQ0FOVVNCIGRldmljZSAoRlRESV9WSUQpICovCisjZGVmaW5lIEZURElfQ0FOVVNCX1BJRCAweEZGQTggLyogUHJvZHVjdCBJZCAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIHRoaXJkLXBhcnR5IFZJRC9QSUQgY29tYm9zICoqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworLyoKKyAqIEF0bWVsIFNUSzU0MQorICovCisjZGVmaW5lIEFUTUVMX1ZJRAkJMHgwM2ViIC8qIFZlbmRvciBJRCAqLworI2RlZmluZSBTVEs1NDFfUElECQkweDIxMDkgLyogWmlnYmVlIENvbnRyb2xsZXIgKi8KKworLyoKKyAqIEJsYWNrZmluIGduSUNFIEpUQUcKKyAqIGh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWh3Omp0YWc6Z25pY2UKKyAqLworI2RlZmluZSBBRElfVklEIAkJMHgwNDU2CisjZGVmaW5lIEFESV9HTklDRV9QSUQgCQkweEYwMDAKKyNkZWZpbmUgQURJX0dOSUNFUExVU19QSUQgCTB4RjAwMQorCisvKgorICogUkFUT0MgUkVYLVVTQjYwRgorICovCisjZGVmaW5lIFJBVE9DX1ZFTkRPUl9JRAkJMHgwNTg0CisjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIEImQiBFbGVjdHJvbmljcyBwcm9kdWN0cy4KKyAqLworI2RlZmluZSBCQU5EQl9WSUQJCTB4MDg1NgkvKiBCJkIgRWxlY3Ryb25pY3MgVmVuZG9yIElEICovCisjZGVmaW5lIEJBTkRCX1VTT1RMNF9QSUQJMHhBQzAxCS8qIFVTT1RMNCBJc29sYXRlZCBSUy00ODUgQ29udmVydGVyICovCisjZGVmaW5lIEJBTkRCX1VTVEw0X1BJRAkJMHhBQzAyCS8qIFVTVEw0IFJTLTQ4NSBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQkFOREJfVVNPOU1MMl9QSUQJMHhBQzAzCS8qIFVTTzlNTDIgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU09QVEw0X1BJRAkweEFDMTEKKyNkZWZpbmUgQkFOREJfVVNQVEw0X1BJRAkweEFDMTIKKyNkZWZpbmUgQkFOREJfVVNPOU1MMkRSXzJfUElECTB4QUMxNgorI2RlZmluZSBCQU5EQl9VU085TUwyRFJfUElECTB4QUMxNworI2RlZmluZSBCQU5EQl9VU09QVEw0RFIyX1BJRAkweEFDMTgJLyogVVNPUFRMNFItMiAyLXBvcnQgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU09QVEw0RFJfUElECTB4QUMxOQorI2RlZmluZSBCQU5EQl80ODVVU0I5Rl8yV19QSUQJMHhBQzI1CisjZGVmaW5lIEJBTkRCXzQ4NVVTQjlGXzRXX1BJRAkweEFDMjYKKyNkZWZpbmUgQkFOREJfMjMyVVNCOU1fUElECTB4QUMyNworI2RlZmluZSBCQU5EQl80ODVVU0JUQl8yV19QSUQJMHhBQzMzCisjZGVmaW5lIEJBTkRCXzQ4NVVTQlRCXzRXX1BJRAkweEFDMzQKKyNkZWZpbmUgQkFOREJfVFRMNVVTQjlNX1BJRAkweEFDNDkKKyNkZWZpbmUgQkFOREJfVFRMM1VTQjlNX1BJRAkweEFDNTAKKyNkZWZpbmUgQkFOREJfWlpfUFJPRzFfVVNCX1BJRAkweEJBMDIKKworLyoKKyAqIEludHJlcGlkIENvbnRyb2wgU3lzdGVtcyAoaHR0cDovL3d3dy5pbnRyZXBpZGNzLmNvbS8pIFZhbHVlQ0FOIGFuZCBOZW9WSQorICovCisjZGVmaW5lIElOVFJFUElEX1ZJRAkJMHgwOTNDCisjZGVmaW5lIElOVFJFUElEX1ZBTFVFQ0FOX1BJRAkweDA2MDEKKyNkZWZpbmUgSU5UUkVQSURfTkVPVklfUElECTB4MDcwMQorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcworICovCisjZGVmaW5lIElEVEVDSF9WSUQJCTB4MEFDRAkvKiBJRCBURUNIIFZlbmRvciBJRCAqLworI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKKyAqLworI2RlZmluZSBPQ1RfVklECQkJMHgwQjM5CS8qIE9DVCB2ZW5kb3IgSUQgKi8KKy8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KKy8qIEFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoQXVzKSBYSDY0NTEgKi8KKy8qIEFsc28gcmViYWRnZWQgYXMgU0lJRyBJbmMuIG1vZGVsIFVTMjMwOCBoYXJkd2FyZSB2ZXJzaW9uIDEgKi8KKyNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCisKKy8qCisgKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgorICovCisKKyNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2CisjZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAorCisvKgorICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKKyAqIFN1Ym1pdHRlZCBieSBWaWxsZSBTdW5kYmVyZy4KKyAqLworI2RlZmluZSBHTl9PVE9NRVRSSUNTX1ZJRAkweDBjMzMJLyogVmVuZG9yIElEICovCisjZGVmaW5lIEFVUklDQUxfVVNCX1BJRAkJMHgwMDEwCS8qIEF1cmljYWwgVVNCIEF1ZGlvbWV0ZXIgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBTZWFsZXZlbCBTZWFMSU5LKyBhZGFwdGVycy4KKyAqIChPcmlnaW5hbCBsaXN0IHNlbnQgYnkgVHVhbiBIb2FuZy4gIElhbiBBYmJvdHQgcmVuYW1lZCB0aGUgbWFjcm9zIGFuZAorICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCisgKi8KKyNkZWZpbmUgU0VBTEVWRUxfVklECQkweDBjNTIJLyogU2VhbGV2ZWwgVmVuZG9yIElEICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTAyX1BJRAkweDIxMDIJLyogU2VhTElOSys0ODUgKDIxMDIpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDNfUElECTB4MjEwMwkvKiBTZWFMSU5LKzIzMkkgKDIxMDMpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDZfUElECTB4OTAyMAkvKiBTZWFMSU5LKzQyMiAoMjEwNikgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDFfMl9QSUQJMHgyMjIxCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAyXzFfUElECTB4MjIxMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDNfMV9QSUQJMHgyMjEzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDNfMl9QSUQJMHgyMjIzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzJfUElECTB4MjQyMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV8zX1BJRAkweDI0MzEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzFfUElECTB4MjQxMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl8yX1BJRAkweDI0MjIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzRfUElECTB4MjQ0MgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18xX1BJRAkweDI0MTMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18zX1BJRAkweDI0MzMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM180X1BJRAkweDI0NDMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfMl9QSUQJMFgyODIxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzNfUElECTBYMjgzMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfNV9QSUQJMFgyODUxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzZfUElECTBYMjg2MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfOF9QSUQJMFgyODgxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgOCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzFfUElECTBYMjgxMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfM19QSUQJMFgyODMyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzRfUElECTBYMjg0MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfNl9QSUQJMFgyODYyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzdfUElECTBYMjg3MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDcgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfMV9QSUQJMFgyODEzCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfMl9QSUQJMFgyODIzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM180X1BJRAkwWDI4NDMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfNV9QSUQJMFgyODUzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM183X1BJRAkwWDI4NzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfOF9QSUQJMFgyODgzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgOCAqLworCisvKgorICogSkVUSSBTUEVDVFJPTUVURVIgU1BFQ0JPUyAxMjAxCisgKiBodHRwOi8vd3d3LmpldGkuY29tL3Byb2R1Y3RzL3N5cy9zY2Ivc2NiMTIwMS5waHAKKyAqLworI2RlZmluZSBKRVRJX1ZJRAkJMHgwYzZjCisjZGVmaW5lIEpFVElfU1BDMTIwMV9QSUQJMHgwNGIyCisKKy8qCisgKiBGVERJIFVTQiBVQVJUIGNoaXBzIHVzZWQgaW4gY29uc3RydWN0aW9uIHByb2plY3RzIGZyb20gdGhlCisgKiBFbGVrdG9yIEVsZWN0cm9uaWNzIG1hZ2F6aW5lIChodHRwOi8vZWxla3Rvci1lbGVjdHJvbmljcy5jby51aykKKyAqLworI2RlZmluZSBFTEVLVE9SX1ZJRAkJMHgwQzdECisjZGVmaW5lIEVMRUtUT1JfRlQzMjNSX1BJRAkweDAwMDUJLyogUkZJRC1SZWFkZXIsIGlzc3VlIDA5LTIwMDYgKi8KKworLyoKKyAqIFBvc2lmbGV4IGluYyByZXRhaWwgZXF1aXBtZW50IChodHRwOi8vd3d3LnBvc2lmbGV4LmNvbS50dykKKyAqLworI2RlZmluZSBQT1NJRkxFWF9WSUQJCTB4MGQzYSAgLyogVmVuZG9yIElEICovCisjZGVmaW5lIFBPU0lGTEVYX1BQNzAwMF9QSUQJMHgwMzAwICAvKiBQUC03MDAwSUkgdGhlcm1hbCBwcmludGVyICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0d28gS09CSUwgY2hpcGNhcmQgdGVybWluYWxzLgorICovCisjZGVmaW5lIEtPQklMX1ZJRAkJMHgwZDQ2CS8qIEtPQklMIFZlbmRvciBJRCAqLworI2RlZmluZSBLT0JJTF9DT05WX0IxX1BJRAkweDIwMjAJLyogS09CSUwgS29udmVydGVyIGZvciBCMSAqLworI2RlZmluZSBLT0JJTF9DT05WX0tBQU5fUElECTB4MjAyMQkvKiBLT0JJTF9Lb252ZXJ0ZXIgZm9yIEtBQU4gKi8KKworI2RlZmluZSBGVERJX05GX1JJQ19WSUQJMHgwRENECS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEZhbGNvbSBXaXJlbGVzcyBDb21tdW5pY2F0aW9ucyBHbWJICisgKi8KKyNkZWZpbmUgRkFMQ09NX1ZJRAkJMHgwRjk0CS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGQUxDT01fVFdJU1RfUElECTB4MDAwMQkvKiBGYWxjb20gVHdpc3QgVVNCIEdQUlMgbW9kZW0gKi8KKyNkZWZpbmUgRkFMQ09NX1NBTUJBX1BJRAkweDAwMDUJLyogRmFsY29tIFNhbWJhIFVTQiBHUFJTIG1vZGVtICovCisKKy8qIExhcnNlbiBhbmQgQnJ1c2dhYXJkIEFsdGlUcmFjay9VU0J0cmFjayAgKi8KKyNkZWZpbmUgTEFSU0VOQlJVU0dBQVJEX1ZJRAkJMHgwRkQ4CisjZGVmaW5lIExCX0FMVElUUkFDS19QSUQJCTB4MDAwMQorCisvKgorICogVFRpIChUaHVybGJ5IFRoYW5kYXIgSW5zdHJ1bWVudHMpCisgKi8KKyNkZWZpbmUgVFRJX1ZJRAkJCTB4MTAzRQkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgVFRJX1FMMzU1UF9QSUQJCTB4MDNFOAkvKiBUVGkgUUwzNTVQIHBvd2VyIHN1cHBseSAqLworCisvKiBJbnRlcmJpb21ldHJpY3MgVVNCIEkvTyBCb2FyZCAqLworLyogRGV2ZWxvcGVkIGZvciBJbnRlcmJpb21ldHJpY3MgYnkgUnVkb2xmIEd1Z2xlciAqLworI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfVklEICAgICAgICAgICAgICAweDEyMDkKKyNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEICAgICAgMHgxMDAyCisjZGVmaW5lIElOVEVSQklPTUVUUklDU19NSU5JX0lPQk9BUkRfUElEIDB4MTAwNgorCisvKgorICogVGVzdG8gcHJvZHVjdHMgKGh0dHA6Ly93d3cudGVzdG8uY29tLykKKyAqIFN1Ym1pdHRlZCBieSBDb2xpbiBMZXJveQorICovCisjZGVmaW5lIFRFU1RPX1ZJRAkJCTB4MTI4RAorI2RlZmluZSBURVNUT19VU0JfSU5URVJGQUNFX1BJRAkJMHgwMDAxCisKKy8qCisgKiBNb2JpbGl0eSBFbGVjdHJvbmljcyBwcm9kdWN0cy4KKyAqLworI2RlZmluZSBNT0JJTElUWV9WSUQJCQkweDEzNDIKKyNkZWZpbmUgTU9CSUxJVFlfVVNCX1NFUklBTF9QSUQJCTB4MDIwMgkvKiBFYXNpRG9jayBVU0IgMjAwIHNlcmlhbCAqLworCisvKgorICogRklDIC8gT3Blbk1va28sIEluYy4gaHR0cDovL3dpa2kub3Blbm1va28ub3JnL3dpa2kvTmVvMTk3M19EZWJ1Z19Cb2FyZF92MworICogU3VibWl0dGVkIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+CisgKi8KKyNkZWZpbmUJRklDX1ZJRAkJCTB4MTQ1NworI2RlZmluZQlGSUNfTkVPMTk3M19ERUJVR19QSUQJMHg1MTE4CisKKy8qIE9saW1leCAqLworI2RlZmluZSBPTElNRVhfVklECQkJMHgxNUJBCisjZGVmaW5lIE9MSU1FWF9BUk1fVVNCX09DRF9QSUQJCTB4MDAwMworCisvKgorICogVGVsbGR1cyBUZWNobm9sb2dpZXMKKyAqLworI2RlZmluZSBURUxMRFVTX1ZJRAkJCTB4MTc4MQkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgVEVMTERVU19URUxMU1RJQ0tfUElECQkweDBDMzAJLyogUkYgY29udHJvbCBkb25nbGUgNDMzIE1IeiB1c2luZyBGVDIzMlJMICovCisKKy8qCisgKiBCYXllciBBc2NlbnNpYSBDb250b3VyIGJsb29kIGdsdWNvc2UgbWV0ZXIgVVNCLWNvbnZlcnRlciBjYWJsZS4KKyAqIGh0dHA6Ly93aW5nbHVjb2ZhY3RzLmNvbS9jYWJsZXMvCisgKi8KKyNkZWZpbmUgQkFZRVJfVklEICAgICAgICAgICAgICAgICAgICAgIDB4MUE3OQorI2RlZmluZSBCQVlFUl9DT05UT1VSX0NBQkxFX1BJRCAgICAgICAgMHg2MDAxCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgRlRESSBSYW5nZQorICogQW55dGhpbmcgaW4gdGhpcyByYW5nZSB3aWxsIHVzZSBhbiBGVDIzMlJMLgorICovCisjZGVmaW5lIE1UWE9SQl9WSUQJCQkweDFCM0QKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMF9QSUQJMHgwMTAwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDFfUElECTB4MDEwMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAyX1BJRAkweDAxMDIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwM19QSUQJMHgwMTAzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDRfUElECTB4MDEwNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA1X1BJRAkweDAxMDUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNl9QSUQJMHgwMTA2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDdfUElECTB4MDEwNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA4X1BJRAkweDAxMDgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwOV9QSUQJMHgwMTA5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEFfUElECTB4MDEwQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBCX1BJRAkweDAxMEIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQ19QSUQJMHgwMTBDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMERfUElECTB4MDEwRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBFX1BJRAkweDAxMEUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRl9QSUQJMHgwMTBGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTBfUElECTB4MDExMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTExX1BJRAkweDAxMTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMl9QSUQJMHgwMTEyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTNfUElECTB4MDExMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE0X1BJRAkweDAxMTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNV9QSUQJMHgwMTE1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTZfUElECTB4MDExNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE3X1BJRAkweDAxMTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExOF9QSUQJMHgwMTE4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTlfUElECTB4MDExOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFBX1BJRAkweDAxMUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQl9QSUQJMHgwMTFCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUNfUElECTB4MDExQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFEX1BJRAkweDAxMUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRV9QSUQJMHgwMTFFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUZfUElECTB4MDExRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIwX1BJRAkweDAxMjAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMV9QSUQJMHgwMTIxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjJfUElECTB4MDEyMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIzX1BJRAkweDAxMjMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNF9QSUQJMHgwMTI0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjVfUElECTB4MDEyNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI2X1BJRAkweDAxMjYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyN19QSUQJMHgwMTI3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjhfUElECTB4MDEyOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI5X1BJRAkweDAxMjkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQV9QSUQJMHgwMTJBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkJfUElECTB4MDEyQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJDX1BJRAkweDAxMkMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRF9QSUQJMHgwMTJECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkVfUElECTB4MDEyRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJGX1BJRAkweDAxMkYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMF9QSUQJMHgwMTMwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzFfUElECTB4MDEzMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMyX1BJRAkweDAxMzIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzM19QSUQJMHgwMTMzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzRfUElECTB4MDEzNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM1X1BJRAkweDAxMzUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNl9QSUQJMHgwMTM2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzdfUElECTB4MDEzNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM4X1BJRAkweDAxMzgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzOV9QSUQJMHgwMTM5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0FfUElECTB4MDEzQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNCX1BJRAkweDAxM0IKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQ19QSUQJMHgwMTNDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0RfUElECTB4MDEzRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNFX1BJRAkweDAxM0UKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRl9QSUQJMHgwMTNGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDBfUElECTB4MDE0MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQxX1BJRAkweDAxNDEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Ml9QSUQJMHgwMTQyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDNfUElECTB4MDE0MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ0X1BJRAkweDAxNDQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0NV9QSUQJMHgwMTQ1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDZfUElECTB4MDE0NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ3X1BJRAkweDAxNDcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0OF9QSUQJMHgwMTQ4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDlfUElECTB4MDE0OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRBX1BJRAkweDAxNEEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Ql9QSUQJMHgwMTRCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNENfUElECTB4MDE0QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTREX1BJRAkweDAxNEQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0RV9QSUQJMHgwMTRFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEZfUElECTB4MDE0RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUwX1BJRAkweDAxNTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1MV9QSUQJMHgwMTUxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTJfUElECTB4MDE1MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUzX1BJRAkweDAxNTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1NF9QSUQJMHgwMTU0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTVfUElECTB4MDE1NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU2X1BJRAkweDAxNTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1N19QSUQJMHgwMTU3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNThfUElECTB4MDE1OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU5X1BJRAkweDAxNTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1QV9QSUQJMHgwMTVBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUJfUElECTB4MDE1QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVDX1BJRAkweDAxNUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1RF9QSUQJMHgwMTVECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUVfUElECTB4MDE1RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVGX1BJRAkweDAxNUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2MF9QSUQJMHgwMTYwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjFfUElECTB4MDE2MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYyX1BJRAkweDAxNjIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2M19QSUQJMHgwMTYzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjRfUElECTB4MDE2NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY1X1BJRAkweDAxNjUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Nl9QSUQJMHgwMTY2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjdfUElECTB4MDE2NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY4X1BJRAkweDAxNjgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2OV9QSUQJMHgwMTY5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkFfUElECTB4MDE2QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZCX1BJRAkweDAxNkIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Q19QSUQJMHgwMTZDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkRfUElECTB4MDE2RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZFX1BJRAkweDAxNkUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Rl9QSUQJMHgwMTZGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzBfUElECTB4MDE3MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcxX1BJRAkweDAxNzEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Ml9QSUQJMHgwMTcyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzNfUElECTB4MDE3MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc0X1BJRAkweDAxNzQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3NV9QSUQJMHgwMTc1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzZfUElECTB4MDE3NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc3X1BJRAkweDAxNzcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3OF9QSUQJMHgwMTc4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzlfUElECTB4MDE3OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdBX1BJRAkweDAxN0EKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Ql9QSUQJMHgwMTdCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0NfUElECTB4MDE3QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdEX1BJRAkweDAxN0QKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3RV9QSUQJMHgwMTdFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0ZfUElECTB4MDE3RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgwX1BJRAkweDAxODAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4MV9QSUQJMHgwMTgxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODJfUElECTB4MDE4MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgzX1BJRAkweDAxODMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4NF9QSUQJMHgwMTg0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODVfUElECTB4MDE4NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg2X1BJRAkweDAxODYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4N19QSUQJMHgwMTg3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODhfUElECTB4MDE4OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg5X1BJRAkweDAxODkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4QV9QSUQJMHgwMThBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEJfUElECTB4MDE4QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThDX1BJRAkweDAxOEMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4RF9QSUQJMHgwMThECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEVfUElECTB4MDE4RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThGX1BJRAkweDAxOEYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5MF9QSUQJMHgwMTkwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTFfUElECTB4MDE5MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkyX1BJRAkweDAxOTIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5M19QSUQJMHgwMTkzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTRfUElECTB4MDE5NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk1X1BJRAkweDAxOTUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Nl9QSUQJMHgwMTk2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTdfUElECTB4MDE5NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk4X1BJRAkweDAxOTgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5OV9QSUQJMHgwMTk5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUFfUElECTB4MDE5QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlCX1BJRAkweDAxOUIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Q19QSUQJMHgwMTlDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOURfUElECTB4MDE5RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlFX1BJRAkweDAxOUUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Rl9QSUQJMHgwMTlGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTBfUElECTB4MDFBMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUExX1BJRAkweDAxQTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMl9QSUQJMHgwMUEyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTNfUElECTB4MDFBMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE0X1BJRAkweDAxQTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNV9QSUQJMHgwMUE1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTZfUElECTB4MDFBNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE3X1BJRAkweDAxQTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBOF9QSUQJMHgwMUE4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTlfUElECTB4MDFBOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFBX1BJRAkweDAxQUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQl9QSUQJMHgwMUFCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUNfUElECTB4MDFBQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFEX1BJRAkweDAxQUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRV9QSUQJMHgwMUFFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUZfUElECTB4MDFBRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIwX1BJRAkweDAxQjAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMV9QSUQJMHgwMUIxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjJfUElECTB4MDFCMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIzX1BJRAkweDAxQjMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNF9QSUQJMHgwMUI0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjVfUElECTB4MDFCNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI2X1BJRAkweDAxQjYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCN19QSUQJMHgwMUI3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjhfUElECTB4MDFCOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI5X1BJRAkweDAxQjkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQV9QSUQJMHgwMUJBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkJfUElECTB4MDFCQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJDX1BJRAkweDAxQkMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRF9QSUQJMHgwMUJECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkVfUElECTB4MDFCRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJGX1BJRAkweDAxQkYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMF9QSUQJMHgwMUMwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzFfUElECTB4MDFDMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMyX1BJRAkweDAxQzIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDM19QSUQJMHgwMUMzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzRfUElECTB4MDFDNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM1X1BJRAkweDAxQzUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNl9QSUQJMHgwMUM2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzdfUElECTB4MDFDNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM4X1BJRAkweDAxQzgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDOV9QSUQJMHgwMUM5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0FfUElECTB4MDFDQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNCX1BJRAkweDAxQ0IKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQ19QSUQJMHgwMUNDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0RfUElECTB4MDFDRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNFX1BJRAkweDAxQ0UKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRl9QSUQJMHgwMUNGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDBfUElECTB4MDFEMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQxX1BJRAkweDAxRDEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMl9QSUQJMHgwMUQyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDNfUElECTB4MDFEMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ0X1BJRAkweDAxRDQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENV9QSUQJMHgwMUQ1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDZfUElECTB4MDFENgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ3X1BJRAkweDAxRDcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEOF9QSUQJMHgwMUQ4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDlfUElECTB4MDFEOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURBX1BJRAkweDAxREEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQl9QSUQJMHgwMURCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRENfUElECTB4MDFEQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUREX1BJRAkweDAxREQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERV9QSUQJMHgwMURFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREZfUElECTB4MDFERgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUwX1BJRAkweDAxRTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMV9QSUQJMHgwMUUxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTJfUElECTB4MDFFMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUzX1BJRAkweDAxRTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNF9QSUQJMHgwMUU0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTVfUElECTB4MDFFNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU2X1BJRAkweDAxRTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFN19QSUQJMHgwMUU3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRThfUElECTB4MDFFOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU5X1BJRAkweDAxRTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQV9QSUQJMHgwMUVBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUJfUElECTB4MDFFQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVDX1BJRAkweDAxRUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRF9QSUQJMHgwMUVECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUVfUElECTB4MDFFRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVGX1BJRAkweDAxRUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMF9QSUQJMHgwMUYwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjFfUElECTB4MDFGMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYyX1BJRAkweDAxRjIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGM19QSUQJMHgwMUYzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjRfUElECTB4MDFGNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY1X1BJRAkweDAxRjUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNl9QSUQJMHgwMUY2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjdfUElECTB4MDFGNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY4X1BJRAkweDAxRjgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGOV9QSUQJMHgwMUY5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkFfUElECTB4MDFGQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZCX1BJRAkweDAxRkIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQ19QSUQJMHgwMUZDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkRfUElECTB4MDFGRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZFX1BJRAkweDAxRkUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRl9QSUQJMHgwMUZGCisKKworCisvKgorICogVGhlIE1vYmlsaXR5IExhYiAoVE1MKQorICogU3VibWl0dGVkIGJ5IFBpZXJyZSBDYXN0ZWxsYQorICovCisjZGVmaW5lIFRNTF9WSUQJCQkweDFCOTEJLyogVmVuZG9yIElEICovCisjZGVmaW5lIFRNTF9VU0JfU0VSSUFMX1BJRAkweDAwNjQJLyogVVNCIC0gU2VyaWFsIENvbnZlcnRlciAqLworCisvKiBBbHRpLTIgcHJvZHVjdHMgIGh0dHA6Ly93d3cuYWx0aS0yLmNvbSAqLworI2RlZmluZSBBTFRJMl9WSUQJMHgxQkM5CisjZGVmaW5lIEFMVEkyX04zX1BJRAkweDYwMDEJLyogTmVwdHVuZSAzICovCisKKy8qCisgKiBEcmVzZGVuIEVsZWt0cm9uaWMgU2Vuc29yIFRlcm1pbmFsIEJvYXJkCisgKi8KKyNkZWZpbmUgREVfVklECQkJMHgxY2YxIC8qIFZlbmRvciBJRCAqLworI2RlZmluZSBTVEJfUElECQkJMHgwMDAxIC8qIFNlbnNvciBUZXJtaW5hbCBCb2FyZCAqLworI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCisKKy8qCisgKiBQYXBvdWNoIHByb2R1Y3RzIChodHRwOi8vd3d3LnBhcG91Y2guY29tLykKKyAqIFN1Ym1pdHRlZCBieSBGb2xrZXJ0IHZhbiBIZXVzZGVuCisgKi8KKworI2RlZmluZSBQQVBPVUNIX1ZJRAkJCTB4NTA1MAkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgUEFQT1VDSF9UTVVfUElECQkJMHgwNDAwCS8qIFRNVSBVU0IgVGhlcm1vbWV0ZXIgKi8KKyNkZWZpbmUgUEFQT1VDSF9RVUlETzR4NF9QSUQJCTB4MDkwMAkvKiBRdWlkbyA0LzQgTW9kdWxlICovCisKKy8qCisgKiBNYXJ2ZWxsIFNoZWV2YVBsdWcKKyAqLworI2RlZmluZSBNQVJWRUxMX1ZJRAkJMHg5ZTg4CisjZGVmaW5lIE1BUlZFTExfU0hFRVZBUExVR19QSUQJMHg5ZThmCisKKy8qCisgKiBFdm9sdXRpb24gUm9ib3RpY3MgcHJvZHVjdHMgKGh0dHA6Ly93d3cuZXZvbHV0aW9uLmNvbS8pLgorICogU3VibWl0dGVkIGJ5IFNoYXduIE0uIExhdmVsbGUuCisgKi8KKyNkZWZpbmUgRVZPTFVUSU9OX1ZJRAkJMHhERUVFCS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBFVk9MVVRJT05fRVIxX1BJRAkweDAzMDAJLyogRVIxIENvbnRyb2wgTW9kdWxlICovCisjZGVmaW5lIEVWT184VTIzMkFNX1BJRAkweDAyRkYJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTIgKEZUMjMyQU0pKi8KKyNkZWZpbmUgRVZPX0hZQlJJRF9QSUQJCTB4MDMwMgkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNNCBQSUQgKEZUMjMyQk0pKi8KKyNkZWZpbmUgRVZPX1JDTTRfUElECQkweDAzMDMJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCBiYmUwMDVjLi5mMWVhM2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCWlmIChwb3J0LT53cml0ZV91cmJfYnVzeSkKIAkJc3RhcnRfaW8gPSBmYWxzZTsKIAllbHNlIHsKLQkJc3RhcnRfaW8gPSAoX19rZmlmb19sZW4ocG9ydC0+d3JpdGVfZmlmbykgIT0gMCk7CisJCXN0YXJ0X2lvID0gKGtmaWZvX2xlbigmcG9ydC0+d3JpdGVfZmlmbykgIT0gMCk7CiAJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gc3RhcnRfaW87CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTI4NSw3ICsyODUsNyBAQAogCQlyZXR1cm4gMDsKIAogCWRhdGEgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQljb3VudCA9IGtmaWZvX2dldChwb3J0LT53cml0ZV9maWZvLCBkYXRhLCBwb3J0LT5idWxrX291dF9zaXplKTsKKwljb3VudCA9IGtmaWZvX291dF9sb2NrZWQoJnBvcnQtPndyaXRlX2ZpZm8sIGRhdGEsIHBvcnQtPmJ1bGtfb3V0X3NpemUsICZwb3J0LT5sb2NrKTsKIAl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwgZGF0YSk7CiAKIAkvKiBzZXQgdXAgb3VyIHVyYiAqLwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJCXJldHVybiB1c2Jfc2VyaWFsX211bHRpX3VyYl93cml0ZSh0dHksIHBvcnQsCiAJCQkJCQkgIGJ1ZiwgY291bnQpOwogCi0JY291bnQgPSBrZmlmb19wdXQocG9ydC0+d3JpdGVfZmlmbywgYnVmLCBjb3VudCk7CisJY291bnQgPSBrZmlmb19pbl9sb2NrZWQoJnBvcnQtPndyaXRlX2ZpZm8sIGJ1ZiwgY291bnQsICZwb3J0LT5sb2NrKTsKIAlyZXN1bHQgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfc3RhcnQocG9ydCk7CiAKIAlpZiAocmVzdWx0ID49IDApCkBAIC0zNzAsNyArMzcwLDcgQEAKIAkJCQkoc2VyaWFsLT50eXBlLT5tYXhfaW5fZmxpZ2h0X3VyYnMgLQogCQkJCSBwb3J0LT51cmJzX2luX2ZsaWdodCk7CiAJfSBlbHNlIGlmIChzZXJpYWwtPm51bV9idWxrX291dCkKLQkJcm9vbSA9IHBvcnQtPndyaXRlX2ZpZm8tPnNpemUgLSBfX2tmaWZvX2xlbihwb3J0LT53cml0ZV9maWZvKTsKKwkJcm9vbSA9IGtmaWZvX2F2YWlsKCZwb3J0LT53cml0ZV9maWZvKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKIAlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCByb29tKTsKQEAgLTM5MSw3ICszOTEsNyBAQAogCQljaGFycyA9IHBvcnQtPnR4X2J5dGVzX2ZsaWdodDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCi0JCWNoYXJzID0ga2ZpZm9fbGVuKHBvcnQtPndyaXRlX2ZpZm8pOworCQljaGFycyA9IGtmaWZvX2xlbigmcG9ydC0+d3JpdGVfZmlmbyk7CiAKIAlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCBjaGFycyk7CiAJcmV0dXJuIGNoYXJzOwpAQCAtNTA3LDcgKzUwNyw3IEBACiAJCWlmIChzdGF0dXMpIHsKIAkJCWRiZygiJXMgLSBub256ZXJvIG11bHRpLXVyYiB3cml0ZSBidWxrIHN0YXR1cyAiCiAJCQkJInJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwotCQkJa2ZpZm9fcmVzZXQocG9ydC0+d3JpdGVfZmlmbyk7CisJCQlrZmlmb19yZXNldF9vdXQoJnBvcnQtPndyaXRlX2ZpZm8pOwogCQl9IGVsc2UKIAkJCXVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9zdGFydChwb3J0KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwppbmRleCA0ODVmYTljLi4yY2ZlMjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKQEAgLTEyNyw4ICsxMjcsOSBAQAogI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVM5TUwyXzQJMHhBQzMwCiAjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU1BUTDRfMgkweEFDMzEKICNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTUFRMNF80CTB4QUMzMgotI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yICAgICAgIDB4QUM0MgotI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80ICAgICAgIDB4QUM0NAorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yCTB4QUM0MgorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80CTB4QUM0NAorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMMl80CTB4QUMyNAogCiAvKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzCiAgKiBBVEVOIFVDMjMyNCBkZXZpY2UgdXNpbmcgTW9zY2hpcCBNQ1M3ODQwCkBAIC0xOTEsNiArMTkyLDcgQEAKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNQVEw0XzQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfNCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEwyXzQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfVUMyMzI0KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEX1VDMjMyMil9LAogCXt9CQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTIwNyw2ICsyMDksNyBAQAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU1BUTDRfNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzIpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80KX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDJfNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVRFTklOVEwsIEFURU5JTlRMX0RFVklDRV9JRF9VQzIzMjQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfVUMyMzIyKX0sCiAJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDlhMmI5MDMuLjZlOTRhNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTM0MCw2ICszNDAsMTAgQEAKICNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfVkVORE9SX0lECQkweDFjOWUKICNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQJCTB4OTYwMwogCisvKiBIYWllciBwcm9kdWN0cyAqLworI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCisjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKKwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfUklDT0xBKSB9LApAQCAtNjQxLDYgKzY0NSw3IEBACiAJeyBVU0JfREVWSUNFKEFJUlBMVVNfVkVORE9SX0lELCBBSVJQTFVTX1BST0RVQ1RfTUNENjUwKSB9LAogCXsgVVNCX0RFVklDRShUTEFZVEVDSF9WRU5ET1JfSUQsIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwKSB9LAogCXsgVVNCX0RFVklDRShGT1VSX0dfU1lTVEVNU19WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSB9LAorCXsgVVNCX0RFVklDRShIQUlFUl9WRU5ET1JfSUQsIEhBSUVSX1BST0RVQ1RfQ0UxMDApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNDU0M2YzNS4uMzNjODVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC01OTUsOCArNTk1LDcgQEAKIAl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKIAl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CiAJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKLQlpZiAoIUlTX0VSUihwb3J0LT53cml0ZV9maWZvKSAmJiBwb3J0LT53cml0ZV9maWZvKQotCQlrZmlmb19mcmVlKHBvcnQtPndyaXRlX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnBvcnQtPndyaXRlX2ZpZm8pOwogCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKIAlrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOwogCWtmcmVlKHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpOwpAQCAtOTM5LDkgKzkzOCw3IEBACiAJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQkJZ290byBwcm9iZV9lcnJvcjsKIAkJfQotCQlwb3J0LT53cml0ZV9maWZvID0ga2ZpZm9fYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMLAotCQkJJnBvcnQtPmxvY2spOwotCQlpZiAoSVNfRVJSKHBvcnQtPndyaXRlX2ZpZm8pKQorCQlpZiAoa2ZpZm9fYWxsb2MoJnBvcnQtPndyaXRlX2ZpZm8sIFBBR0VfU0laRSwgR0ZQX0tFUk5FTCkpCiAJCQlnb3RvIHByb2JlX2Vycm9yOwogCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CiAJCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBidWZmZXJfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwppbmRleCBkYTdjMDFiLi4zYTU2MWRmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwpAQCAtMTU3MywxNSArMTU3MywxNSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgbmFtZSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQogCWVyciA9IC1FTk9NRU07CiAJY2ZiID0gY3liZXJwcm9fYWxsb2NfZmJfaW5mbyhpZC0+ZHJpdmVyX2RhdGEsIG5hbWUpOwogCWlmICghY2ZiKQogCQlnb3RvIGZhaWxlZF9yZWxlYXNlOwogCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsIGNmYi0+ZmIuZml4LmlkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxlZF9yZWdpb25zOworCiAJY2ZiLT5kZXYgPSBkZXY7CiAJY2ZiLT5yZWdpb24gPSBwY2lfaW9yZW1hcF9iYXIoZGV2LCAwKTsKIAlpZiAoIWNmYi0+cmVnaW9uKQpAQCAtMTYzMywxMCArMTYzMywxMCBAQAogZmFpbGVkOgogCWlvdW5tYXAoY2ZiLT5yZWdpb24pOwogZmFpbGVkX2lvcmVtYXA6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworZmFpbGVkX3JlZ2lvbnM6CiAJY3liZXJwcm9fZnJlZV9mYl9pbmZvKGNmYik7CiBmYWlsZWRfcmVsZWFzZToKLQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7Ci0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKaW5kZXggNDE1ODU4Yi4uODI1YjY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwpAQCAtMTIyMSw5ICsxMjIxLDkgQEAKIHN0YXRpYyBpbnQgcHhhZmJfc21hcnRfdGhyZWFkKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gYXJnOwotCXN0cnVjdCBweGFmYl9tYWNoX2luZm8gKmluZjsKKwlzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvICppbmYgPSBmYmktPmRldi0+cGxhdGZvcm1fZGF0YTsKIAotCWlmICghZmJpIHx8ICFmYmktPmRldi0+cGxhdGZvcm1fZGF0YS0+c21hcnRfdXBkYXRlKSB7CisJaWYgKCFpbmYtPnNtYXJ0X3VwZGF0ZSkgewogCQlwcl9lcnIoIiVzOiBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIHRocmVhZCB0ZXJtaW5hdGVkXG4iLAogCQkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKaW5kZXggZGE4NGZkMC4uMDg4ZjMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwpAQCAtMzY4LDcgKzM2OCw3IEBACiAKIGNvbmZpZyBHRU9ERV9XRFQKIAl0cmlzdGF0ZSAiQU1EIEdlb2RlIENTNTUzNS9DUzU1MzYgV2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBNR0VPREVfTFgKKwlkZXBlbmRzIG9uIENTNTUzNV9NRkdQVAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgYSB3YXRjaGRvZyBjYXBhYmlsaXR5IGJ1aWx0IGludG8gdGhlCiAJICBDUzU1MzUvQ1M1NTM2IGNvbXBhbmlvbiBjaGlwcyBmb3IgdGhlIEFNRCBHZW9kZSBHWCBhbmQgTFgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKaW5kZXggOWM2NTk0NC4uOWQ3ZDE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKQEAgLTI0MiwxNCArMjQyLDE0IEBACiAJfQogCiAJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKLQkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsIHJlcy0+bmFtZSk7CisJCQlyZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CiAJaWYgKCFyZXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSByZWdpb25cbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAogCXdkdC0+YmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCi0JCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwkJCXJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF3ZHQtPmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIEkvTyBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYwppbmRleCBlOGFlNjM4Li4wMzc4NDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hdDMyYXA3MDB4X3dkdC5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jd2R0LT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKKwl3ZHQtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlZ3MpKTsKIAlpZiAoIXdkdC0+cmVncykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgbWFwIEkvTyBtZW1vcnlcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCmluZGV4IDlkNzUyMGYuLjg4NzEzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCXdkdF9tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAKIAlpZiAod2R0X21lbSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKaW5kZXggOWFjZjAwMS4uMzgyNTJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYwpAQCAtMSw2ICsxLDcgQEAKLS8qIFdhdGNoZG9nIHRpbWVyIGZvciB0aGUgR2VvZGUgR1gvTFggd2l0aCB0aGUgQ1M1NTM1L0NTNTUzNiBjb21wYW5pb24gY2hpcAorLyogV2F0Y2hkb2cgdGltZXIgZm9yIG1hY2hpbmVzIHdpdGggdGhlIENTNTUzNS9DUzU1MzYgY29tcGFuaW9uIGNoaXAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNywgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBBbmRyZXMgU2Fsb21vbiA8ZGlsaW5nZXJAY29sbGFib3JhLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xOSw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8YXNtL2dlb2RlLmg+CisjaW5jbHVkZSA8bGludXgvY3M1NTM1Lmg+CiAKICNkZWZpbmUgR0VPREVXRFRfSFogNTAwCiAjZGVmaW5lIEdFT0RFV0RUX1NDQUxFIDYKQEAgLTQ2LDI1ICs0NywyNSBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X2ZsYWdzOwotc3RhdGljIGludCB3ZHRfdGltZXI7CitzdGF0aWMgc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lciAqd2R0X3RpbWVyOwogc3RhdGljIGludCBzYWZlX2Nsb3NlOwogCiBzdGF0aWMgdm9pZCBnZW9kZXdkdF9waW5nKHZvaWQpCiB7CiAJLyogU3RvcCB0aGUgY291bnRlciAqLwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCAwKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIDApOwogCiAJLyogUmVzZXQgdGhlIGNvdW50ZXIgKi8KLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CiAKIAkvKiBFbmFibGUgdGhlIGNvdW50ZXIgKi8KLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgTUZHUFRfU0VUVVBfQ05URU4pOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgTUZHUFRfU0VUVVBfQ05URU4pOwogfQogCiBzdGF0aWMgdm9pZCBnZW9kZXdkdF9kaXNhYmxlKHZvaWQpCiB7Ci0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIDApOwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NPVU5URVIsIDApOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NPVU5URVIsIDApOwogfQogCiBzdGF0aWMgaW50IGdlb2Rld2R0X3NldF9oZWFydGJlYXQoaW50IHZhbCkKQEAgLTcyLDEwICs3MywxMCBAQAogCWlmICh2YWwgPCAxIHx8IHZhbCA+IEdFT0RFV0RUX01BWF9TRUNPTkRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCAwKTsKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DTVAyLCB2YWwgKiBHRU9ERVdEVF9IWik7Ci0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7Ci0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIE1GR1BUX1NFVFVQX0NOVEVOKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIDApOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DTVAyLCB2YWwgKiBHRU9ERVdEVF9IWik7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NPVU5URVIsIDApOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgTUZHUFRfU0VUVVBfQ05URU4pOwogCiAJdGltZW91dCA9IHZhbDsKIAlyZXR1cm4gMDsKQEAgLTIxNSwyOCArMjE2LDI1IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdlb2Rld2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0LCB0aW1lcjsKKwlpbnQgcmV0OwogCi0JdGltZXIgPSBnZW9kZV9tZmdwdF9hbGxvY190aW1lcihNRkdQVF9USU1FUl9BTlksIE1GR1BUX0RPTUFJTl9XT1JLSU5HKTsKLQotCWlmICh0aW1lciA9PSAtMSkgeworCXdkdF90aW1lciA9IGNzNTUzNV9tZmdwdF9hbGxvY190aW1lcihNRkdQVF9USU1FUl9BTlksIE1GR1BUX0RPTUFJTl9XT1JLSU5HKTsKKwlpZiAoIXdkdF90aW1lcikgewogCQlwcmludGsoS0VSTl9FUlIgImdlb2Rld2R0OiAgTm8gdGltZXJzIHdlcmUgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0Jd2R0X3RpbWVyID0gdGltZXI7Ci0KIAkvKiBTZXQgdXAgdGhlIHRpbWVyICovCiAKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsCiAJCQkgIEdFT0RFV0RUX1NDQUxFIHwgKDMgPDwgOCkpOwogCiAJLyogU2V0IHVwIGNvbXBhcmF0b3IgMiB0byByZXNldCB3aGVuIHRoZSBldmVudCBmaXJlcyAqLwotCWdlb2RlX21mZ3B0X3RvZ2dsZV9ldmVudCh3ZHRfdGltZXIsIE1GR1BUX0NNUDIsIE1GR1BUX0VWRU5UX1JFU0VULCAxKTsKKwljczU1MzVfbWZncHRfdG9nZ2xlX2V2ZW50KHdkdF90aW1lciwgTUZHUFRfQ01QMiwgTUZHUFRfRVZFTlRfUkVTRVQsIDEpOwogCiAJLyogU2V0IHVwIHRoZSBpbml0aWFsIHRpbWVvdXQgKi8KIAotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NNUDIsCisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NNUDIsCiAJCXRpbWVvdXQgKiBHRU9ERVdEVF9IWik7CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZnZW9kZXdkdF9taXNjZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwppbmRleCBlNDRmYmIzLi5jOGEzYmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKglkb2N1bWVudCBudW1iZXIgMzE2OTcyLTAwNCwgMzE2OTczLTAxMjogODI4MDFJIChJQ0g5KQogICoJZG9jdW1lbnQgbnVtYmVyIDMxOTk3My0wMDIsIDMxOTk3NC0wMDI6IDgyODAxSiAoSUNIMTApCiAgKglkb2N1bWVudCBudW1iZXIgMzIyMTY5LTAwMSwgMzIyMTcwLTAwMTogNSBTZXJpZXMsIDM0MDAgU2VyaWVzIChQQ0gpCisgKglkb2N1bWVudCBudW1iZXIgMzIwMDY2LTAwMywgMzIwMjU3LTAwODogRVA4MDU5NyAoSUlDSCkKICAqLwogCiAvKgpAQCAtMTAwLDYgKzEwMSw3IEBACiAJVENPX1BDSCwJLyogUENIIERlc2t0b3AgRnVsbCBGZWF0dXJlZCAqLwogCVRDT19QQ0hNLAkvKiBQQ0ggTW9iaWxlIEZ1bGwgRmVhdHVyZWQgKi8KIAlUQ09fUENITVNGRiwJLyogUENIIE1vYmlsZSBTRkYgRnVsbCBGZWF0dXJlZCAqLworCVRDT19FUDgwNTc5LAkvKiBFUDgwNTc5ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTE0Myw2ICsxNDUsNyBAQAogCXsiUENIIERlc2t0b3AgRnVsbCBGZWF0dXJlZCIsIDJ9LAogCXsiUENIIE1vYmlsZSBGdWxsIEZlYXR1cmVkIiwgMn0sCiAJeyJQQ0ggTW9iaWxlIFNGRiBGdWxsIEZlYXR1cmVkIiwgMn0sCisJeyJFUDgwNTc5IiwgMn0sCiAJe05VTEwsIDB9CiB9OwogCkBAIC0yMTQsNiArMjE3LDcgQEAKIAl7IElUQ09fUENJX0RFVklDRSgweDNiMDAsCQkJCVRDT19QQ0gpfSwKIAl7IElUQ09fUENJX0RFVklDRSgweDNiMDEsCQkJCVRDT19QQ0hNKX0sCiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgzYjBkLAkJCQlUQ09fUENITVNGRil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4NTAzMSwJCQkJVENPX0VQODA1NzkpfSwKIAl7IDAsIH0sCQkJLyogRW5kIG9mIGxpc3QgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaVRDT193ZHRfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCmluZGV4IDgzZmEzNGIuLmEyZGMwN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCkBAIC0zNTAsNyArMzUwLDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlOwogCX0KLQl3ZHQtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXdkdC0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXdkdC0+YmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCmluZGV4IGFjZjU4OWQuLmE1MWRiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCWlmICghcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltdjY0eDYwX3dkdF9yZWdzID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwltdjY0eDYwX3dkdF9yZWdzID0gaW9yZW1hcChyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CiAJaWYgKG12NjR4NjBfd2R0X3JlZ3MgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYwppbmRleCA0MjllYTk5Li5jNmFhZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCkBAIC0yNzcsOCArMjc3LDcgQEAKIAkJZ290byBlcnJfYnVzeTsKIAl9CiAKLQltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKLQkJCQkgcGRldi0+bmFtZSk7CisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7CiAJaWYgKCFtZW0pIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGVycl9idXN5OwpAQCAtMzA2LDcgKzMwNSw3IEBACiAJCWdvdG8gZXJyX2NsazsKIAl9CiAKLQl3ZGV2LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwl3ZGV2LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghd2Rldi0+YmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9pb3JlbWFwOwpAQCAtMzU4LDcgKzM1Nyw3IEBACiAJa2ZyZWUod2Rldik7CiAKIGVycl9remFsbG9jOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAogZXJyX2J1c3k6CiBlcnJfZ2V0X3Jlc291cmNlOgpAQCAtMzgzLDcgKzM4Miw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCiAJbWlzY19kZXJlZ2lzdGVyKCYod2Rldi0+b21hcF93ZHRfbWlzY2RldikpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWNsa19wdXQod2Rldi0+aWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwppbmRleCA0ZDIyN2IxNS4uNDMwYTU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJd2R0X21lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5uYW1lKTsKIAogCWlmICh3ZHRfbWVtID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwppbmRleCA4NWI5M2UxLi44NzYwYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCkBAIC00MjEsNyArNDIxLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0Jc2l6ZSA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpICsgMTsKKwlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCXdkdF9tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAJaWYgKHdkdF9tZW0gPT0gTlVMTCkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvblxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCmluZGV4IDZhZGFiNzcuLmQ2MzU1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCkBAIC0yMTQsMTIgKzIxNCwxMCBAQAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykKIAkJZ290byBleGl0X2J1c3k7Ci0JaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmZGV2LT5kZXYsCi0JCQkJICAgICByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAorCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJmRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCiAJCQkJICAgICAidHh4OXdkdCIpKQogCQlnb3RvIGV4aXRfYnVzeTsKLQl0eHg5d2R0X3JlZyA9IGRldm1faW9yZW1hcCgmZGV2LT5kZXYsCi0JCQkJICAgcmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJdHh4OXdkdF9yZWcgPSBkZXZtX2lvcmVtYXAoJmRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghdHh4OXdkdF9yZWcpCiAJCWdvdG8gZXhpdF9idXN5OwogCmRpZmYgLS1naXQgYS9mcy9hbm9uX2lub2Rlcy5jIGIvZnMvYW5vbl9pbm9kZXMuYwppbmRleCAyYzk5NDU5Li45ZjBiZjEzIDEwMDY0NAotLS0gYS9mcy9hbm9uX2lub2Rlcy5jCisrKyBiL2ZzL2Fub25faW5vZGVzLmMKQEAgLTEyMSwxMyArMTIxLDEzIEBACiAJZF9pbnN0YW50aWF0ZShwYXRoLmRlbnRyeSwgYW5vbl9pbm9kZV9pbm9kZSk7CiAKIAllcnJvciA9IC1FTkZJTEU7Ci0JZmlsZSA9IGFsbG9jX2ZpbGUoJnBhdGgsIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgZm9wcyk7CisJZmlsZSA9IGFsbG9jX2ZpbGUoJnBhdGgsIE9QRU5fRk1PREUoZmxhZ3MpLCBmb3BzKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gZXJyX2RwdXQ7CiAJZmlsZS0+Zl9tYXBwaW5nID0gYW5vbl9pbm9kZV9pbm9kZS0+aV9tYXBwaW5nOwogCiAJZmlsZS0+Zl9wb3MgPSAwOwotCWZpbGUtPmZfZmxhZ3MgPSBPX1JEV1IgfCAoZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlmaWxlLT5mX2ZsYWdzID0gZmxhZ3MgJiAoT19BQ0NNT0RFIHwgT19OT05CTE9DSyk7CiAJZmlsZS0+Zl92ZXJzaW9uID0gMDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwcml2OwogCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKaW5kZXggYzI1MjU2YS4uYzU3ZDljZSAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZl9mZHBpYy5jCisrKyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwpAQCAtMTcxLDYgKzE3MSw5IEBACiAjaWZkZWYgRUxGX0ZEUElDX1BMQVRfSU5JVAogCXVuc2lnbmVkIGxvbmcgZHluYWRkcjsKICNlbmRpZgorI2lmbmRlZiBDT05GSUdfTU1VCisJdW5zaWduZWQgbG9uZyBzdGFja19wcm90OworI2VuZGlmCiAJc3RydWN0IGZpbGUgKmludGVycHJldGVyID0gTlVMTDsgLyogdG8gc2h1dCBnY2MgdXAgKi8KIAljaGFyICppbnRlcnByZXRlcl9uYW1lID0gTlVMTDsKIAlpbnQgZXhlY3V0YWJsZV9zdGFjazsKQEAgLTMxNiw2ICszMTksOCBAQAogCSAqIGRlZnVuY3QsIGRlY2Vhc2VkLCBldGMuIGFmdGVyIHRoaXMgcG9pbnQgd2UgaGF2ZSB0byBleGl0IHZpYQogCSAqIGVycm9yX2tpbGwgKi8KIAlzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYX0ZEUElDKTsKKwlpZiAoZWxmX3JlYWRfaW1wbGllc19leGVjKCZleGVjX3BhcmFtcy5oZHIsIGV4ZWN1dGFibGVfc3RhY2spKQorCQljdXJyZW50LT5wZXJzb25hbGl0eSB8PSBSRUFEX0lNUExJRVNfRVhFQzsKIAlzZXRfYmluZm10KCZlbGZfZmRwaWNfZm9ybWF0KTsKIAogCWN1cnJlbnQtPm1tLT5zdGFydF9jb2RlID0gMDsKQEAgLTM3Nyw5ICszODIsMTMgQEAKIAlpZiAoc3RhY2tfc2l6ZSA8IFBBR0VfU0laRSAqIDIpCiAJCXN0YWNrX3NpemUgPSBQQUdFX1NJWkUgKiAyOwogCisJc3RhY2tfcHJvdCA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CisJaWYgKGV4ZWN1dGFibGVfc3RhY2sgPT0gRVhTVEFDS19FTkFCTEVfWCB8fAorCSAgICAoZXhlY3V0YWJsZV9zdGFjayA9PSBFWFNUQUNLX0RFRkFVTFQgJiYgVk1fU1RBQ0tfRkxBR1MgJiBWTV9FWEVDKSkKKwkJc3RhY2tfcHJvdCB8PSBQUk9UX0VYRUM7CisKIAlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWN1cnJlbnQtPm1tLT5zdGFydF9icmsgPSBkb19tbWFwKE5VTEwsIDAsIHN0YWNrX3NpemUsCi0JCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAorCWN1cnJlbnQtPm1tLT5zdGFydF9icmsgPSBkb19tbWFwKE5VTEwsIDAsIHN0YWNrX3NpemUsIHN0YWNrX3Byb3QsCiAJCQkJCSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfAogCQkJCQkgTUFQX1VOSU5JVElBTElaRUQgfCBNQVBfR1JPV1NET1dOLAogCQkJCQkgMCk7CkBAIC0xNzk4LDExICsxODA3LDExIEBACiAJRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQTsKICNlbmRpZgogCi0JaWYgKGZpbGUtPmZfcG9zICE9IG9mZnNldCkgeworCWlmIChjcHJtLT5maWxlLT5mX3BvcyAhPSBvZmZzZXQpIHsKIAkJLyogU2FuaXR5IGNoZWNrICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJlbGZfY29yZV9kdW1wOiBmaWxlLT5mX3BvcyAoJWxsZCkgIT0gb2Zmc2V0ICglbGxkKVxuIiwKLQkJICAgICAgIGZpbGUtPmZfcG9zLCBvZmZzZXQpOworCQkgICAgICAgY3BybS0+ZmlsZS0+Zl9wb3MsIG9mZnNldCk7CiAJfQogCiBlbmRfY29yZWR1bXA6CmRpZmYgLS1naXQgYS9mcy9jaWZzL0NIQU5HRVMgYi9mcy9jaWZzL0NIQU5HRVMKaW5kZXggMDk0ZWE2NS4uN2IyNjAwYiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9DSEFOR0VTCisrKyBiL2ZzL2NpZnMvQ0hBTkdFUwpAQCAtNSw3ICs1LDkgQEAKIG1vdW50aW5nIHRvIE9TLzQwMCBOZXRzZXJ2ZS4gRml4IG9vcHMgaW4gY2lmc19nZXRfdGNwX3Nlc3Npb24uCiBEaXNhYmxlIHVzZSBvZiBzZXJ2ZXIgaW5vZGUgbnVtYmVycyB3aGVuIHNlcnZlciBvbmx5CiBwYXJ0aWFsbHkgc3VwcG9ydHMgdGhlbSAoZS5nLiBmb3Igb25lIHNlcnZlciBxdWVyeWluZyBpbm9kZSBudW1iZXJzIG9uCi1GaW5kRmlyc3QgZmFpbHMgYnV0IFFQYXRoSW5mbyBxdWVyaWVzIHdvcmtzKS4KK0ZpbmRGaXJzdCBmYWlscyBidXQgUVBhdGhJbmZvIHF1ZXJpZXMgd29ya3MpLiBGaXggb29wcyB3aXRoIGRmcyBpbiAKK2NpZnNfcHV0X3NtYl9zZXMuIEZpeCBtbWFwIHRvIHdvcmsgb24gZGlyZWN0aW8gbW91bnRzIChuZWVkZWQKK2ZvciBPcGVuT2ZmaWNlIHdoZW4gb24gZm9yY2VkaXJlY3RpbyBtb3VudCBlLmcuKQogCiBWZXJzaW9uIDEuNjAKIC0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDI5ZjFkYTcuLjhjNmEwMzYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNzU4LDcgKzc1OCw3IEBACiB9OwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9kaXJlY3Rfb3BzID0gewotCS8qIG5vIG1tYXAsIG5vIGFpbywgbm8gcmVhZHYgLQorCS8qIG5vIGFpbywgbm8gcmVhZHYgLQogCSAgIEJCIHJlZXZhbHVhdGUgd2hldGhlciB0aGV5IGNhbiBiZSBkb25lIHdpdGggZGlyZWN0aW8sIG5vIGNhY2hlICovCiAJLnJlYWQgPSBjaWZzX3VzZXJfcmVhZCwKIAkud3JpdGUgPSBjaWZzX3VzZXJfd3JpdGUsCkBAIC03NjcsNiArNzY3LDcgQEAKIAkubG9jayA9IGNpZnNfbG9jaywKIAkuZnN5bmMgPSBjaWZzX2ZzeW5jLAogCS5mbHVzaCA9IGNpZnNfZmx1c2gsCisJLm1tYXAgPSBjaWZzX2ZpbGVfbW1hcCwKIAkuc3BsaWNlX3JlYWQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiAjaWZkZWYgQ09ORklHX0NJRlNfUE9TSVgKIAkudW5sb2NrZWRfaW9jdGwgID0gY2lmc19pb2N0bCwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNjNlYTgzZi4uM2JiY2FhNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTIyODcsMTIgKzIyODcsMTIgQEAKIGNpZnNfbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwKIAkJY2hhciAqbW91bnRfZGF0YV9nbG9iYWwsIGNvbnN0IGNoYXIgKmRldm5hbWUpCiB7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmM7CiAJaW50IHhpZDsKIAlzdHJ1Y3Qgc21iX3ZvbCAqdm9sdW1lX2luZm87Ci0Jc3RydWN0IGNpZnNTZXNJbmZvICpwU2VzSW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiA9IE5VTEw7Ci0Jc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc3J2VGNwID0gTlVMTDsKKwlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnBTZXNJbmZvOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CisJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc3J2VGNwOwogCWNoYXIgICAqZnVsbF9wYXRoOwogCWNoYXIgKm1vdW50X2RhdGEgPSBtb3VudF9kYXRhX2dsb2JhbDsKICNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCkBAIC0yMzAxLDYgKzIzMDEsMTAgQEAKIAlpbnQgcmVmZXJyYWxfd2Fsa3NfY291bnQgPSAwOwogdHJ5X21vdW50X2FnYWluOgogI2VuZGlmCisJcmMgPSAwOworCXRjb24gPSBOVUxMOworCXBTZXNJbmZvID0gTlVMTDsKKwlzcnZUY3AgPSBOVUxMOwogCWZ1bGxfcGF0aCA9IE5VTEw7CiAKIAl4aWQgPSBHZXRYaWQoKTsKQEAgLTI1OTcsNiArMjYwMSw3IEBACiAKIAkJCWNsZWFudXBfdm9sdW1lX2luZm8oJnZvbHVtZV9pbmZvKTsKIAkJCXJlZmVycmFsX3dhbGtzX2NvdW50Kys7CisJCQlGcmVlWGlkKHhpZCk7CiAJCQlnb3RvIHRyeV9tb3VudF9hZ2FpbjsKIAkJfQogI2Vsc2UgLyogTm8gREZTIHN1cHBvcnQsIHJldHVybiBlcnJvciBvbiBtb3VudCAqLwpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCAxNGNiYzgzLi4zMzJkZDAwIDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtMTYwMCw4ICsxNjAwLDYgQEAKIAljYXNlIEtEU0tCTUVUQToKIAljYXNlIEtEU0tCTEVEOgogCWNhc2UgS0RTRVRMRUQ6Ci0JLyogU0cgc3R1ZmYgKi8KLQljYXNlIFNHX1NFVF9UUkFOU0ZPUk06CiAJLyogQVVUT0ZTICovCiAJY2FzZSBBVVRPRlNfSU9DX1JFQURZOgogCWNhc2UgQVVUT0ZTX0lPQ19GQUlMOgpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRmZC5jIGIvZnMvZXZlbnRmZC5jCmluZGV4IDhiNDdlNDIuLmQyNjQwMmYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50ZmQuYworKysgYi9mcy9ldmVudGZkLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCWN0eC0+ZmxhZ3MgPSBmbGFnczsKIAogCWZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUoIltldmVudGZkXSIsICZldmVudGZkX2ZvcHMsIGN0eCwKLQkJCQkgIGZsYWdzICYgRUZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CisJCQkJICBPX1JEV1IgfCAoZmxhZ3MgJiBFRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKSk7CiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZXZlbnRmZF9mcmVlX2N0eChjdHgpOwogCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IDM2NmM1MDMuLmJkMDU2YTUgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCisrKyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogCSAqIGEgZmlsZSBzdHJ1Y3R1cmUgYW5kIGEgZnJlZSBmaWxlIGRlc2NyaXB0b3IuCiAJICovCiAJZXJyb3IgPSBhbm9uX2lub2RlX2dldGZkKCJbZXZlbnRwb2xsXSIsICZldmVudHBvbGxfZm9wcywgZXAsCi0JCQkJIGZsYWdzICYgT19DTE9FWEVDKTsKKwkJCQkgT19SRFdSIHwgKGZsYWdzICYgT19DTE9FWEVDKSk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZXBfZnJlZShlcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lub2RlLmMgYi9mcy9leG9mcy9pbm9kZS5jCmluZGV4IDY5OGE4NjMuLjJhZmJjZWIgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2lub2RlLmMKKysrIGIvZnMvZXhvZnMvaW5vZGUuYwpAQCAtNzM4LDEzICs3MzgsMjggQEAKIAkJCQkJZnNkYXRhKTsKIH0KIAorc3RhdGljIGludCBleG9mc193cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCS8qIEFjY29yZGluZyB0byBjb21tZW50IGluIHNpbXBsZV93cml0ZV9lbmQgaV9tdXRleCBpcyBoZWxkICovCisJbG9mZl90IGlfc2l6ZSA9IGlub2RlLT5pX3NpemU7CisJaW50IHJldDsKKworCXJldCA9IHNpbXBsZV93cml0ZV9lbmQoZmlsZSwgbWFwcGluZyxwb3MsIGxlbiwgY29waWVkLCBwYWdlLCBmc2RhdGEpOworCWlmIChpX3NpemUgIT0gaW5vZGUtPmlfc2l6ZSkKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuIHJldDsKK30KKwogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleG9mc19hb3BzID0gewogCS5yZWFkcGFnZQk9IGV4b2ZzX3JlYWRwYWdlLAogCS5yZWFkcGFnZXMJPSBleG9mc19yZWFkcGFnZXMsCiAJLndyaXRlcGFnZQk9IGV4b2ZzX3dyaXRlcGFnZSwKIAkud3JpdGVwYWdlcwk9IGV4b2ZzX3dyaXRlcGFnZXMsCiAJLndyaXRlX2JlZ2luCT0gZXhvZnNfd3JpdGVfYmVnaW5fZXhwb3J0LAotCS53cml0ZV9lbmQJPSBzaW1wbGVfd3JpdGVfZW5kLAorCS53cml0ZV9lbmQJPSBleG9mc193cml0ZV9lbmQsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9mcy9leG9mcy9wbmZzLmggYi9mcy9leG9mcy9wbmZzLmgKaW5kZXggNDIzMDMzYS4uYzUyZTk4OCAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvcG5mcy5oCisrKyBiL2ZzL2V4b2ZzL3BuZnMuaApAQCAtMTUsMTMgKzE1LDcgQEAKICNpZm5kZWYgX19FWE9GU19QTkZTX0hfXwogI2RlZmluZSBfX0VYT0ZTX1BORlNfSF9fCiAKLSNpZiBkZWZpbmVkKENPTkZJR19QTkZTKQotCi0KLS8qIEZJWE1FOiBtb3ZlIHRoaXMgZmlsZSB0bzogbGludXgvZXhwb3J0ZnMvcG5mc19vc2RfeGRyLmggKi8KLSNpbmNsdWRlICIuLi9uZnMvb2JqbGF5b3V0L3BuZnNfb3NkX3hkci5oIgotCi0jZWxzZSAvKiBkZWZpbmVkKENPTkZJR19QTkZTKSAqLworI2lmICEgZGVmaW5lZChfX1BORlNfT1NEX1hEUl9IX18pCiAKIGVudW0gcG5mc19pb21vZGUgewogCUlPTU9ERV9SRUFEID0gMSwKQEAgLTQ2LDYgKzQwLDYgQEAKIAl1MzIJb2RtX3JhaWRfYWxnb3JpdGhtOwogfTsKIAotI2VuZGlmIC8qIGVsc2UgZGVmaW5lZChDT05GSUdfUE5GUykgKi8KKyNlbmRpZiAvKiAhIGRlZmluZWQoX19QTkZTX09TRF9YRFJfSF9fKSAqLwogCiAjZW5kaWYgLyogX19FWE9GU19QTkZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IGFkMTQyMjcuLjQ1NWU2ZTYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTk3MCw3ICs5NzAsNyBAQAogCQlpZiAobWF4X2Jsb2NrcyA+IERJT19NQVhfQkxPQ0tTKQogCQkJbWF4X2Jsb2NrcyA9IERJT19NQVhfQkxPQ0tTOwogCQloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIERJT19DUkVESVRTICsKLQkJCQkyICogRVhUM19RVU9UQV9UUkFOU19CTE9DS1MoaW5vZGUtPmlfc2IpKTsKKwkJCQlFWFQzX01BWFFVT1RBU19UUkFOU19CTE9DS1MoaW5vZGUtPmlfc2IpKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCQlnb3RvIG91dDsKQEAgLTMxNDYsOCArMzE0Niw4IEBACiAKIAkJLyogKHVzZXIrZ3JvdXApKihvbGQrbmV3KSBzdHJ1Y3R1cmUsIGlub2RlIHdyaXRlIChzYiwKIAkJICogaW5vZGUgYmxvY2ssID8gLSBidXQgdHJ1bmNhdGUgaW5vZGUgdXBkYXRlIGhhcyBpdCkgKi8KLQkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAyKihFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKGlub2RlLT5pX3NiKSsKLQkJCQkJRVhUM19RVU9UQV9ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSkrMyk7CisJCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgRVhUM19NQVhRVU9UQVNfSU5JVF9CTE9DS1MoaW5vZGUtPmlfc2IpKworCQkJCQlFWFQzX01BWFFVT1RBU19ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSszKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQllcnJvciA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJCWdvdG8gZXJyX291dDsKQEAgLTMyMzksNyArMzIzOSw3IEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJLyogV2Uga25vdyB0aGF0IHN0cnVjdHVyZSB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgZHVyaW5nIHZmc19kcV9pbml0IHNvCiAJICogd2Ugd2lsbCBiZSB1cGRhdGluZyBvbmx5IHRoZSBkYXRhIGJsb2NrcyArIGlub2RlcyAqLwotCXJldCArPSAyKkVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKTsKKwlyZXQgKz0gRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKTsKICNlbmRpZgogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvbmFtZWkuYyBiL2ZzL2V4dDMvbmFtZWkuYwppbmRleCBhYWQ2NDAwLi43YjBlNDRmNyAxMDA2NDQKLS0tIGEvZnMvZXh0My9uYW1laS5jCisrKyBiL2ZzL2V4dDMvbmFtZWkuYwpAQCAtMTY5OSw3ICsxNjk5LDcgQEAKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMyArCi0JCQkJCTIqRVhUM19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKKwkJCQkJRVhUM19NQVhRVU9UQVNfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwogCkBAIC0xNzMzLDcgKzE3MzMsNyBAQAogcmV0cnk6CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJCQkJRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyAzICsKLQkJCQkJMipFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOworCQkJCQlFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKQEAgLTE3NjksNyArMTc2OSw3IEBACiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDMgKwotCQkJCQkyKkVYVDNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CisJCQkJCUVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKIApAQCAtMTkyMCw3ICsxOTIwLDcgQEAKIAlzdHJ1Y3QgZXh0M19pbG9jIGlsb2M7CiAJaW50IGVyciA9IDAsIHJjOwogCi0JbG9ja19zdXBlcihzYik7CisJbXV0ZXhfbG9jaygmRVhUM19TQihzYiktPnNfb3JwaGFuX2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmRVhUM19JKGlub2RlKS0+aV9vcnBoYW4pKQogCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTE5MjksOSArMTkyOSwxMyBAQAogCiAJLyogQEBAIEZJWE1FOiBPYnNlcnZhdGlvbiBmcm9tIGF2aXJvOgogCSAqIEkgdGhpbmsgSSBjYW4gdHJpZ2dlciBKX0FTU0VSVCBpbiBleHQzX29ycGhhbl9hZGQoKS4gIFdlIGJsb2NrCi0JICogaGVyZSAob24gbG9ja19zdXBlcigpKSwgc28gcmFjZSB3aXRoIGV4dDNfbGluaygpIHdoaWNoIG1pZ2h0IGJ1bXAKKwkgKiBoZXJlIChvbiBzX29ycGhhbl9sb2NrKSwgc28gcmFjZSB3aXRoIGV4dDNfbGluaygpIHdoaWNoIG1pZ2h0IGJ1bXAKIAkgKiAtPmlfbmxpbmsuIEZvciwgc2F5IGl0LCBjaGFyYWN0ZXIgZGV2aWNlLiBOb3QgYSByZWd1bGFyIGZpbGUsCiAJICogbm90IGEgZGlyZWN0b3J5LCBub3QgYSBzeW1saW5rIGFuZCAtPmlfbmxpbmsgPiAwLgorCSAqCisJICogdHl0c28sIDQvMjUvMjAwOTogSSdtIG5vdCBzdXJlIGhvdyB0aGF0IGNvdWxkIGhhcHBlbjsKKwkgKiBzaG91bGRuJ3QgdGhlIGZzIGNvcmUgcHJvdGVjdCB1cyBmcm9tIHRoZXNlIHNvcnQgb2YKKwkgKiB1bmxpbmsoKS9saW5rKCkgcmFjZXM/CiAJICovCiAJSl9BU1NFUlQgKChTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwKIAkJU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgfHwgaW5vZGUtPmlfbmxpbmsgPT0gMCk7CkBAIC0xOTY4LDcgKzE5NzIsNyBAQAogCWpiZF9kZWJ1Zyg0LCAib3JwaGFuIGlub2RlICVsdSB3aWxsIHBvaW50IHRvICVkXG4iLAogCQkJaW5vZGUtPmlfaW5vLCBORVhUX09SUEhBTihpbm9kZSkpOwogb3V0X3VubG9jazoKLQl1bmxvY2tfc3VwZXIoc2IpOworCW11dGV4X3VubG9jaygmRVhUM19TQihzYiktPnNfb3JwaGFuX2xvY2spOwogCWV4dDNfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBlcnIpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xOTg2LDExICsxOTkwLDkgQEAKIAlzdHJ1Y3QgZXh0M19pbG9jIGlsb2M7CiAJaW50IGVyciA9IDA7CiAKLQlsb2NrX3N1cGVyKGlub2RlLT5pX3NiKTsKLQlpZiAobGlzdF9lbXB0eSgmZWktPmlfb3JwaGFuKSkgewotCQl1bmxvY2tfc3VwZXIoaW5vZGUtPmlfc2IpOwotCQlyZXR1cm4gMDsKLQl9CisJbXV0ZXhfbG9jaygmRVhUM19TQihpbm9kZS0+aV9zYiktPnNfb3JwaGFuX2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZlaS0+aV9vcnBoYW4pKQorCQlnb3RvIG91dDsKIAogCWlub19uZXh0ID0gTkVYVF9PUlBIQU4oaW5vZGUpOwogCXByZXYgPSBlaS0+aV9vcnBoYW4ucHJldjsKQEAgLTIwNDAsNyArMjA0Miw3IEBACiBvdXRfZXJyOgogCWV4dDNfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBlcnIpOwogb3V0OgotCXVubG9ja19zdXBlcihpbm9kZS0+aV9zYik7CisJbXV0ZXhfdW5sb2NrKCZFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19vcnBoYW5fbG9jayk7CiAJcmV0dXJuIGVycjsKIAogb3V0X2JyZWxzZToKQEAgLTIxNzUsNyArMjE3Nyw3IEBACiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDUgKwotCQkJCQkyKkVYVDNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CisJCQkJCUVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9yZXNpemUuYyBiL2ZzL2V4dDMvcmVzaXplLmMKaW5kZXggNWY4M2I2MS4uNTQzNTFhYyAxMDA2NDQKLS0tIGEvZnMvZXh0My9yZXNpemUuYworKysgYi9mcy9leHQzL3Jlc2l6ZS5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKLQlsb2NrX3N1cGVyKHNiKTsKKwltdXRleF9sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwogCWlmIChpbnB1dC0+Z3JvdXAgIT0gc2JpLT5zX2dyb3Vwc19jb3VudCkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXhpdF9qb3VybmFsOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJYnJlbHNlKGJoKTsKIAogZXhpdF9qb3VybmFsOgotCXVubG9ja19zdXBlcihzYik7CisJbXV0ZXhfdW5sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwogCWlmICgoZXJyMiA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSkpICYmICFlcnIpCiAJCWVyciA9IGVycjI7CiAKQEAgLTY2MiwxMSArNjYyLDEyIEBACiAgKiBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IHRoZSBuZXcgYmxvY2sgYW5kIGlub2RlIGNvdW50cyBhcmUgaW4gdGhlIGJhY2t1cAogICogc3VwZXJibG9ja3MsIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIG5ldyBncm91cCBtZXRhZGF0YSBpbiB0aGUgR0RUIGJhY2t1cHMuCiAgKgotICogV2UgZG8gbm90IG5lZWQgbG9ja19zdXBlcigpIGZvciB0aGlzLCBiZWNhdXNlIHRoZXNlIGJsb2NrcyBhcmUgbm90Ci0gKiBvdGhlcndpc2UgdG91Y2hlZCBieSB0aGUgZmlsZXN5c3RlbSBjb2RlIHdoZW4gaXQgaXMgbW91bnRlZC4gIFdlIGRvbid0Ci0gKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGxhc3QgY2hhbmdpbmcgZnJvbSBzYmktPnNfZ3JvdXBzX2NvdW50LCBiZWNhdXNlIHRoZQotICogd29yc3QgdGhhdCBjYW4gaGFwcGVuIGlzIHRoYXQgd2UgZG8gbm90IGNvcHkgdGhlIGZ1bGwgbnVtYmVyIG9mIGJhY2t1cHMKLSAqIGF0IHRoaXMgdGltZS4gIFRoZSByZXNpemUgd2hpY2ggY2hhbmdlZCBzX2dyb3Vwc19jb3VudCB3aWxsIGJhY2t1cCBhZ2Fpbi4KKyAqIFdlIGRvIG5vdCBuZWVkIHRha2UgdGhlIHNfcmVzaXplX2xvY2sgZm9yIHRoaXMsIGJlY2F1c2UgdGhlc2UKKyAqIGJsb2NrcyBhcmUgbm90IG90aGVyd2lzZSB0b3VjaGVkIGJ5IHRoZSBmaWxlc3lzdGVtIGNvZGUgd2hlbiBpdCBpcworICogbW91bnRlZC4gIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbGFzdCBjaGFuZ2luZyBmcm9tCisgKiBzYmktPnNfZ3JvdXBzX2NvdW50LCBiZWNhdXNlIHRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB3ZQorICogZG8gbm90IGNvcHkgdGhlIGZ1bGwgbnVtYmVyIG9mIGJhY2t1cHMgYXQgdGhpcyB0aW1lLiAgVGhlIHJlc2l6ZQorICogd2hpY2ggY2hhbmdlZCBzX2dyb3Vwc19jb3VudCB3aWxsIGJhY2t1cCBhZ2Fpbi4KICAqLwogc3RhdGljIHZvaWQgdXBkYXRlX2JhY2t1cHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgIGludCBibGtfb2ZmLCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKQEAgLTgyNSw3ICs4MjYsNyBAQAogCQlnb3RvIGV4aXRfcHV0OwogCX0KIAotCWxvY2tfc3VwZXIoc2IpOworCW11dGV4X2xvY2soJnNiaS0+c19yZXNpemVfbG9jayk7CiAJaWYgKGlucHV0LT5ncm91cCAhPSBzYmktPnNfZ3JvdXBzX2NvdW50KSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19mdW5jX18sCiAJCQkgICAgICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKQEAgLTg1Niw3ICs4NTcsNyBAQAogCS8qCiAJICogT0ssIG5vdyB3ZSd2ZSBzZXQgdXAgdGhlIG5ldyBncm91cC4gIFRpbWUgdG8gbWFrZSBpdCBhY3RpdmUuCiAJICoKLQkgKiBDdXJyZW50IGtlcm5lbHMgZG9uJ3QgbG9jayBhbGwgYWxsb2NhdGlvbnMgdmlhIGxvY2tfc3VwZXIoKSwKKwkgKiBXZSBkbyBub3QgbG9jayBhbGwgYWxsb2NhdGlvbnMgdmlhIHNfcmVzaXplX2xvY2sKIAkgKiBzbyB3ZSBoYXZlIHRvIGJlIHNhZmUgd3J0LiBjb25jdXJyZW50IGFjY2Vzc2VzIHRoZSBncm91cAogCSAqIGRhdGEuICBTbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gc2V0IGFsbCBvZiB0aGUgcmVsZXZhbnQKIAkgKiBncm91cCBkZXNjcmlwdG9yIGRhdGEgZXRjLiAqYmVmb3JlKiB3ZSBlbmFibGUgdGhlIGdyb3VwLgpAQCAtOTAwLDEyICs5MDEsMTIgQEAKIAkgKgogCSAqIFRoZSBwcmVjaXNlIHJ1bGVzIHdlIHVzZSBhcmU6CiAJICoKLQkgKiAqIFdyaXRlcnMgb2Ygc19ncm91cHNfY291bnQgKm11c3QqIGhvbGQgbG9ja19zdXBlcgorCSAqICogV3JpdGVycyBvZiBzX2dyb3Vwc19jb3VudCAqbXVzdCogaG9sZCBzX3Jlc2l6ZV9sb2NrCiAJICogQU5ECiAJICogKiBXcml0ZXJzIG11c3QgcGVyZm9ybSBhIHNtcF93bWIoKSBhZnRlciB1cGRhdGluZyBhbGwgZGVwZW5kZW50CiAJICogICBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnQKIAkgKgotCSAqICogUmVhZGVycyBtdXN0IGhvbGQgbG9ja19zdXBlcigpIG92ZXIgdGhlIGFjY2VzcworCSAqICogUmVhZGVycyBtdXN0IGhvbGQgc19yZXNpemVfbG9jayBvdmVyIHRoZSBhY2Nlc3MKIAkgKiBPUgogCSAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3VwcyBjb3VudAogCSAqICAgYW5kIGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KQEAgLTkzNiw3ICs5MzcsNyBAQAogCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIHNiaS0+c19zYmgpOwogCiBleGl0X2pvdXJuYWw6Ci0JdW5sb2NrX3N1cGVyKHNiKTsKKwltdXRleF91bmxvY2soJnNiaS0+c19yZXNpemVfbG9jayk7CiAJaWYgKChlcnIyID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKSkgJiYgIWVycikKIAkJZXJyID0gZXJyMjsKIAlpZiAoIWVycikgewpAQCAtOTczLDcgKzk3NCw3IEBACiAKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgd3J0IG90aGVyIHJlc2l6ZXJzIGp1c3QKIAkgKiB5ZXQ6IHdlJ3JlIGdvaW5nIHRvIHJldmFsaWRhdGUgZXMtPnNfYmxvY2tzX2NvdW50IGFmdGVyCi0JICogdGFraW5nIGxvY2tfc3VwZXIoKSBiZWxvdy4gKi8KKwkgKiB0YWtpbmcgdGhlIHNfcmVzaXplX2xvY2sgYmVsb3cuICovCiAJb19ibG9ja3NfY291bnQgPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpOwogCW9fZ3JvdXBzX2NvdW50ID0gRVhUM19TQihzYiktPnNfZ3JvdXBzX2NvdW50OwogCkBAIC0xMDQ1LDExICsxMDQ2LDExIEBACiAJCWdvdG8gZXhpdF9wdXQ7CiAJfQogCi0JbG9ja19zdXBlcihzYik7CisJbXV0ZXhfbG9jaygmRVhUM19TQihzYiktPnNfcmVzaXplX2xvY2spOwogCWlmIChvX2Jsb2Nrc19jb3VudCAhPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpKSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19mdW5jX18sCiAJCQkgICAgICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKLQkJdW5sb2NrX3N1cGVyKHNiKTsKKwkJbXV0ZXhfdW5sb2NrKCZFWFQzX1NCKHNiKS0+c19yZXNpemVfbG9jayk7CiAJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0X3B1dDsKQEAgLTEwNTksMTMgKzEwNjAsMTMgQEAKIAkJCQkJCSBFWFQzX1NCKHNiKS0+c19zYmgpKSkgewogCQlleHQzX3dhcm5pbmcoc2IsIF9fZnVuY19fLAogCQkJICAgICAiZXJyb3IgJWQgb24gam91cm5hbCB3cml0ZSBhY2Nlc3MiLCBlcnIpOwotCQl1bmxvY2tfc3VwZXIoc2IpOworCQltdXRleF91bmxvY2soJkVYVDNfU0Ioc2IpLT5zX3Jlc2l6ZV9sb2NrKTsKIAkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJZ290byBleGl0X3B1dDsKIAl9CiAJZXMtPnNfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlMzIob19ibG9ja3NfY291bnQgKyBhZGQpOwogCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIEVYVDNfU0Ioc2IpLT5zX3NiaCk7Ci0JdW5sb2NrX3N1cGVyKHNiKTsKKwltdXRleF91bmxvY2soJkVYVDNfU0Ioc2IpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlleHQzX2RlYnVnKCJmcmVlaW5nIGJsb2NrcyAlbHUgdGhyb3VnaCAiRTNGU0JMSyJcbiIsIG9fYmxvY2tzX2NvdW50LAogCQkgICBvX2Jsb2Nrc19jb3VudCArIGFkZCk7CiAJZXh0M19mcmVlX2Jsb2Nrc19zYihoYW5kbGUsIHNiLCBvX2Jsb2Nrc19jb3VudCwgYWRkLCAmZnJlZWRfYmxvY2tzKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA3YWQxZThjLi5hZmEyYjU2IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC0xOTI4LDYgKzE5MjgsOCBAQAogCXNiLT5kcV9vcCA9ICZleHQzX3F1b3RhX29wZXJhdGlvbnM7CiAjZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmc2JpLT5zX29ycGhhbik7IC8qIHVubGlua2VkIGJ1dCBvcGVuIGZpbGVzICovCisJbXV0ZXhfaW5pdCgmc2JpLT5zX29ycGhhbl9sb2NrKTsKKwltdXRleF9pbml0KCZzYmktPnNfcmVzaXplX2xvY2spOwogCiAJc2ItPnNfcm9vdCA9IE5VTEw7CiAKQEAgLTIwMTQsMTQgKzIwMTYsNyBAQAogCX0KIAogCWV4dDNfc2V0dXBfc3VwZXIgKHNiLCBlcywgc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpOwotCS8qCi0JICogYWtwbTogY29yZSByZWFkX3N1cGVyKCkgY2FsbHMgaW4gaGVyZSB3aXRoIHRoZSBzdXBlcmJsb2NrIGxvY2tlZC4KLQkgKiBUaGF0IGRlYWRsb2NrcywgYmVjYXVzZSBvcnBoYW4gY2xlYW51cCBuZWVkcyB0byBsb2NrIHRoZSBzdXBlcmJsb2NrCi0JICogaW4gbnVtZXJvdXMgcGxhY2VzLiAgSGVyZSB3ZSBqdXN0IHBvcCB0aGUgbG9jayAtIGl0J3MgcmVsYXRpdmVseQotCSAqIGhhcm1sZXNzLCBiZWNhdXNlIHdlIGFyZSBub3cgcmVhZHkgdG8gYWNjZXB0IHdyaXRlX3N1cGVyKCkgcmVxdWVzdHMsCi0JICogYW5kIGF2aXJvIHNheXMgdGhhdCdzIHRoZSBvbmx5IHJlYXNvbiBmb3IgaGFuZ2luZyBvbnRvIHRoZQotCSAqIHN1cGVyYmxvY2sgbG9jay4KLQkgKi8KKwogCUVYVDNfU0Ioc2IpLT5zX21vdW50X3N0YXRlIHw9IEVYVDNfT1JQSEFOX0ZTOwogCWV4dDNfb3JwaGFuX2NsZWFudXAoc2IsIGVzKTsKIAlFWFQzX1NCKHNiKS0+c19tb3VudF9zdGF0ZSAmPSB+RVhUM19PUlBIQU5fRlM7CkBAIC0yNDAzLDEzICsyMzk4LDExIEBACiAJaWYgKGpvdXJuYWxfZmx1c2goam91cm5hbCkgPCAwKQogCQlnb3RvIG91dDsKIAotCWxvY2tfc3VwZXIoc2IpOwogCWlmIChFWFQzX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUikgJiYKIAkgICAgc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHsKIAkJRVhUM19DTEVBUl9JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUik7CiAJCWV4dDNfY29tbWl0X3N1cGVyKHNiLCBlcywgMSk7CiAJfQotCXVubG9ja19zdXBlcihzYik7CiAKIG91dDoKIAlqb3VybmFsX3VubG9ja191cGRhdGVzKGpvdXJuYWwpOwpAQCAtMjYwMSwxMyArMjU5NCw3IEBACiAJCQkgICAgKHNiaS0+c19tb3VudF9zdGF0ZSAmIEVYVDNfVkFMSURfRlMpKQogCQkJCWVzLT5zX3N0YXRlID0gY3B1X3RvX2xlMTYoc2JpLT5zX21vdW50X3N0YXRlKTsKIAotCQkJLyoKLQkJCSAqIFdlIGhhdmUgdG8gdW5sb2NrIHN1cGVyIHNvIHRoYXQgd2UgY2FuIHdhaXQgZm9yCi0JCQkgKiB0cmFuc2FjdGlvbnMuCi0JCQkgKi8KLQkJCXVubG9ja19zdXBlcihzYik7CiAJCQlleHQzX21hcmtfcmVjb3ZlcnlfY29tcGxldGUoc2IsIGVzKTsKLQkJCWxvY2tfc3VwZXIoc2IpOwogCQl9IGVsc2UgewogCQkJX19sZTMyIHJldDsKIAkJCWlmICgocmV0ID0gRVhUM19IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCmRpZmYgLS1naXQgYS9mcy9leHQ0L0tjb25maWcgYi9mcy9leHQ0L0tjb25maWcKaW5kZXggOWFjZjdlOC4uOWVkMWJiMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9LY29uZmlnCisrKyBiL2ZzL2V4dDQvS2NvbmZpZwpAQCAtMjgsNiArMjgsNyBAQAogCiBjb25maWcgRVhUNF9VU0VfRk9SX0VYVDIzCiAJYm9vbCAiVXNlIGV4dDQgZm9yIGV4dDIvZXh0MyBmaWxlIHN5c3RlbXMiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTCiAJZGVwZW5kcyBvbiBFWFQzX0ZTPW4gfHwgRVhUMl9GUz1uCiAJZGVmYXVsdCB5CiAJaGVscApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9ibG9ja192YWxpZGl0eS5jIGIvZnMvZXh0NC9ibG9ja192YWxpZGl0eS5jCmluZGV4IDRkZjg2MjEuLmE2MGFiOWEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmxvY2tfdmFsaWRpdHkuYworKysgYi9mcy9leHQ0L2Jsb2NrX3ZhbGlkaXR5LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgImV4dDQuaCIKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYWIzMWU2NS4uYWY3YjYyNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTY5OSwxMSArNjk5LDE3IEBACiAJdW5zaWduZWQgaW50IGlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7CiAJdW5zaWduZWQgaW50IGlfYWxsb2NhdGVkX21ldGFfYmxvY2tzOwogCXVuc2lnbmVkIHNob3J0IGlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZzsKKwlzZWN0b3JfdCBpX2RhX21ldGFkYXRhX2NhbGNfbGFzdF9sYmxvY2s7CisJaW50IGlfZGFfbWV0YWRhdGFfY2FsY19sZW47CiAKIAkvKiBvbi1kaXNrIGFkZGl0aW9uYWwgbGVuZ3RoICovCiAJX191MTYgaV9leHRyYV9pc2l6ZTsKIAogCXNwaW5sb2NrX3QgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrOworI2lmZGVmIENPTkZJR19RVU9UQQorCS8qIHF1b3RhIHNwYWNlIHJlc2VydmF0aW9uLCBtYW5hZ2VkIGludGVybmFsbHkgYnkgcXVvdGEgY29kZSAqLworCXFzaXplX3QgaV9yZXNlcnZlZF9xdW90YTsKKyNlbmRpZgogCiAJLyogY29tcGxldGVkIGFzeW5jIERJT3MgdGhhdCBtaWdodCBuZWVkIHVud3JpdHRlbiBleHRlbnRzIGhhbmRsaW5nICovCiAJc3RydWN0IGxpc3RfaGVhZCBpX2Fpb19kaW9fY29tcGxldGVfbGlzdDsKQEAgLTE0MzUsNyArMTQ0MSw3IEBACiBleHRlcm4gaW50IGV4dDRfYmxvY2tfdHJ1bmNhdGVfcGFnZShoYW5kbGVfdCAqaGFuZGxlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGZyb20pOwogZXh0ZXJuIGludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwotZXh0ZXJuIHFzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gcXNpemVfdCAqZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IGZsdXNoX2Fpb19kaW9fY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogLyogaW9jdGwuYyAqLwogZXh0ZXJuIGxvbmcgZXh0NF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2V4dGVudHMuaCBiL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKaW5kZXggMmNhNjg2NC4uYmRiNmNlNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0X2V4dGVudHMuaAorKysgYi9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCkBAIC0yMjUsNyArMjI1LDggQEAKIAlleHQtPmVlX2xlbiA9IGNwdV90b19sZTE2KGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4dCkpOwogfQogCi1leHRlcm4gaW50IGV4dDRfZXh0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9ja3MpOworZXh0ZXJuIGludCBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc2VjdG9yX3QgbGJsb2Nrcyk7CiBleHRlcm4gZXh0NF9mc2Jsa190IGV4dF9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCk7CiBleHRlcm4gZXh0NF9mc2Jsa190IGlkeF9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqKTsKIGV4dGVybiB2b2lkIGV4dDRfZXh0X3N0b3JlX3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnQgKiwgZXh0NF9mc2Jsa190KTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggM2E3OTI4Zi4uN2Q3Yjc0ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTI5NiwyOSArMjk2LDQ0IEBACiAgKiB0byBhbGxvY2F0ZSBAYmxvY2tzCiAgKiBXb3JzZSBjYXNlIGlzIG9uZSBibG9jayBwZXIgZXh0ZW50CiAgKi8KLWludCBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2tzKQoraW50IGV4dDRfZXh0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGxibG9jaykKIHsKLQlpbnQgbGNhcCwgaWNhcCwgcmNhcCwgbGVhZnMsIGlkeHMsIG51bTsKLQlpbnQgbmV3ZXh0ZW50cyA9IGJsb2NrczsKKwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CisJaW50IGlkeHMsIG51bSA9IDA7CiAKLQlyY2FwID0gZXh0NF9leHRfc3BhY2Vfcm9vdF9pZHgoaW5vZGUsIDApOwotCWxjYXAgPSBleHQ0X2V4dF9zcGFjZV9ibG9jayhpbm9kZSwgMCk7Ci0JaWNhcCA9IGV4dDRfZXh0X3NwYWNlX2Jsb2NrX2lkeChpbm9kZSwgMCk7Ci0KLQkvKiBudW1iZXIgb2YgbmV3IGxlYWYgYmxvY2tzIG5lZWRlZCAqLwotCW51bSA9IGxlYWZzID0gKG5ld2V4dGVudHMgKyBsY2FwIC0gMSkgLyBsY2FwOworCWlkeHMgPSAoKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIHNpemVvZihzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyKSkKKwkJLyBzaXplb2Yoc3RydWN0IGV4dDRfZXh0ZW50X2lkeCkpOwogCiAJLyoKLQkgKiBXb3JzZSBjYXNlLCB3ZSBuZWVkIHNlcGFyYXRlIGluZGV4IGJsb2NrKHMpCi0JICogdG8gbGluayBhbGwgbmV3IGxlYWYgYmxvY2tzCisJICogSWYgdGhlIG5ldyBkZWxheWVkIGFsbG9jYXRpb24gYmxvY2sgaXMgY29udGlndW91cyB3aXRoIHRoZQorCSAqIHByZXZpb3VzIGRhIGJsb2NrLCBpdCBjYW4gc2hhcmUgaW5kZXggYmxvY2tzIHdpdGggdGhlCisJICogcHJldmlvdXMgYmxvY2ssIHNvIHdlIG9ubHkgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBpbmRleAorCSAqIGJsb2NrIGV2ZXJ5IGlkeHMgbGVhZiBibG9ja3MuICBBdCBsZHhzKioyIGJsb2Nrcywgd2UgbmVlZAorCSAqIGFuIGFkZGl0aW9uYWwgaW5kZXggYmxvY2ssIGFuZCBhdCBsZHhzKiozIGJsb2NrcywgeWV0CisJICogYW5vdGhlciBpbmRleCBibG9ja3MuCiAJICovCi0JaWR4cyA9IChsZWFmcyArIGljYXAgLSAxKSAvIGljYXA7Ci0JZG8gewotCQludW0gKz0gaWR4czsKLQkJaWR4cyA9IChpZHhzICsgaWNhcCAtIDEpIC8gaWNhcDsKLQl9IHdoaWxlIChpZHhzID4gcmNhcCk7CisJaWYgKGVpLT5pX2RhX21ldGFkYXRhX2NhbGNfbGVuICYmCisJICAgIGVpLT5pX2RhX21ldGFkYXRhX2NhbGNfbGFzdF9sYmxvY2srMSA9PSBsYmxvY2spIHsKKwkJaWYgKChlaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiAlIGlkeHMpID09IDApCisJCQludW0rKzsKKwkJaWYgKChlaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiAlIChpZHhzKmlkeHMpKSA9PSAwKQorCQkJbnVtKys7CisJCWlmICgoZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4gJSAoaWR4cyppZHhzKmlkeHMpKSA9PSAwKSB7CisJCQludW0rKzsKKwkJCWVpLT5pX2RhX21ldGFkYXRhX2NhbGNfbGVuID0gMDsKKwkJfSBlbHNlCisJCQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbisrOworCQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xhc3RfbGJsb2NrKys7CisJCXJldHVybiBudW07CisJfQogCi0JcmV0dXJuIG51bTsKKwkvKgorCSAqIEluIHRoZSB3b3JzdCBjYXNlIHdlIG5lZWQgYSBuZXcgc2V0IG9mIGluZGV4IGJsb2NrcyBhdAorCSAqIGV2ZXJ5IGxldmVsIG9mIHRoZSBpbm9kZSdzIGV4dGVudCB0cmVlLgorCSAqLworCWVpLT5pX2RhX21ldGFkYXRhX2NhbGNfbGVuID0gMTsKKwllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xhc3RfbGJsb2NrID0gbGJsb2NrOworCXJldHVybiBleHRfZGVwdGgoaW5vZGUpICsgMTsKIH0KIAogc3RhdGljIGludApAQCAtMzAyMyw2ICszMDM4LDE0IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YV9ibG9ja3Moc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCXNlY3Rvcl90IGJsb2NrLCBpbnQgY291bnQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YShiZGV2LCBibG9jayArIGkpOworfQorCiBzdGF0aWMgaW50CiBleHQ0X2V4dF9oYW5kbGVfdW5pbml0aWFsaXplZF9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X2xibGtfdCBpYmxvY2ssIHVuc2lnbmVkIGludCBtYXhfYmxvY2tzLApAQCAtMzA5OCw2ICszMTIxLDE4IEBACiAJfSBlbHNlCiAJCWFsbG9jYXRlZCA9IHJldDsKIAlzZXRfYnVmZmVyX25ldyhiaF9yZXN1bHQpOworCS8qCisJICogaWYgd2UgYWxsb2NhdGVkIG1vcmUgYmxvY2tzIHRoYW4gcmVxdWVzdGVkCisJICogd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgdW5tYXAgdGhlIGV4dHJhIGJsb2NrCisJICogYWxsb2NhdGVkLiBUaGUgYWN0dWFsIG5lZWRlZCBibG9jayB3aWxsIGdldAorCSAqIHVubWFwcGVkIGxhdGVyIHdoZW4gd2UgZmluZCB0aGUgYnVmZmVyX2hlYWQgbWFya2VkCisJICogbmV3LgorCSAqLworCWlmIChhbGxvY2F0ZWQgPiBtYXhfYmxvY2tzKSB7CisJCXVubWFwX3VuZGVybHlpbmdfbWV0YWRhdGFfYmxvY2tzKGlub2RlLT5pX3NiLT5zX2JkZXYsCisJCQkJCW5ld2Jsb2NrICsgbWF4X2Jsb2NrcywKKwkJCQkJYWxsb2NhdGVkIC0gbWF4X2Jsb2Nrcyk7CisJfQogbWFwX291dDoKIAlzZXRfYnVmZmVyX21hcHBlZChiaF9yZXN1bHQpOwogb3V0MToKQEAgLTMxOTAsNyArMzIyNSwxMyBAQAogCSAqIHRoaXMgc2l0dWF0aW9uIGlzIHBvc3NpYmxlLCB0aG91Z2gsIF9kdXJpbmdfIHRyZWUgbW9kaWZpY2F0aW9uOwogCSAqIHRoaXMgaXMgd2h5IGFzc2VydCBjYW4ndCBiZSBwdXQgaW4gZXh0NF9leHRfZmluZF9leHRlbnQoKQogCSAqLwotCUJVR19PTihwYXRoW2RlcHRoXS5wX2V4dCA9PSBOVUxMICYmIGRlcHRoICE9IDApOworCWlmIChwYXRoW2RlcHRoXS5wX2V4dCA9PSBOVUxMICYmIGRlcHRoICE9IDApIHsKKwkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgX19mdW5jX18sICJiYWQgZXh0ZW50IGFkZHJlc3MgIgorCQkJICAgImlub2RlOiAlbHUsIGlibG9jazogJWQsIGRlcHRoOiAlZCIsCisJCQkgICBpbm9kZS0+aV9pbm8sIGlibG9jaywgZGVwdGgpOworCQllcnIgPSAtRUlPOworCQlnb3RvIG91dDI7CisJfQogCWVoID0gcGF0aFtkZXB0aF0ucF9oZHI7CiAKIAlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mc3luYy5jIGIvZnMvZXh0NC9mc3luYy5jCmluZGV4IDBiMjI0OTcuLjk4YmQxNDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZnN5bmMuYworKysgYi9mcy9leHQ0L2ZzeW5jLmMKQEAgLTg4LDkgKzg4LDIxIEBACiAJCXJldHVybiBleHQ0X2ZvcmNlX2NvbW1pdChpbm9kZS0+aV9zYik7CiAKIAljb21taXRfdGlkID0gZGF0YXN5bmMgPyBlaS0+aV9kYXRhc3luY190aWQgOiBlaS0+aV9zeW5jX3RpZDsKLQlpZiAoamJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpKQorCWlmIChqYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCkpIHsKKwkJLyoKKwkJICogV2hlbiB0aGUgam91cm5hbCBpcyBvbiBhIGRpZmZlcmVudCBkZXZpY2UgdGhhbiB0aGUKKwkJICogZnMgZGF0YSBkaXNrLCB3ZSBuZWVkIHRvIGlzc3VlIHRoZSBiYXJyaWVyIGluCisJCSAqIHdyaXRlYmFjayBtb2RlLiAgKEluIG9yZGVyZWQgbW9kZSwgdGhlIGpiZDIgbGF5ZXIKKwkJICogd2lsbCB0YWtlIGNhcmUgb2YgaXNzdWluZyB0aGUgYmFycmllci4gIEluCisJCSAqIGRhdGE9am91cm5hbCwgYWxsIG9mIHRoZSBkYXRhIGJsb2NrcyBhcmUgd3JpdHRlbiB0bworCQkgKiB0aGUgam91cm5hbCBkZXZpY2UuKQorCQkgKi8KKwkJaWYgKGV4dDRfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSAmJgorCQkgICAgKGpvdXJuYWwtPmpfZnNfZGV2ICE9IGpvdXJuYWwtPmpfZGV2KSAmJgorCQkgICAgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0JBUlJJRVIpKQorCQkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLT5pX3NiLT5zX2JkZXYsIE5VTEwpOwogCQlqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTsKLQllbHNlIGlmIChqb3VybmFsLT5qX2ZsYWdzICYgSkJEMl9CQVJSSUVSKQorCX0gZWxzZSBpZiAoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQkFSUklFUikKIAkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLT5pX3NiLT5zX2JkZXYsIE5VTEwpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggNTM1MmRiMS4uYzgxODk3MiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTAwMyw4MyArMTAwMyw5NCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXFzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSkKKyNpZmRlZiBDT05GSUdfUVVPVEEKK3FzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsOwotCi0Jc3Bpbl9sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwotCXRvdGFsID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyArCi0JCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7Ci0Jc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7Ci0KLQlyZXR1cm4gKHRvdGFsIDw8IGlub2RlLT5pX2Jsa2JpdHMpOworCXJldHVybiAmRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9xdW90YTsKIH0KLS8qCi0gKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBtZXRhZGF0YSBibG9ja3MgbmVlZCB0byByZXNlcnZlCi0gKiB0byBhbGxvY2F0ZSBAYmxvY2tzIGZvciBub24gZXh0ZW50IGZpbGUgYmFzZWQgZmlsZQotICovCi1zdGF0aWMgaW50IGV4dDRfaW5kaXJlY3RfY2FsY19tZXRhZGF0YV9hbW91bnQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJsb2NrcykKLXsKLQlpbnQgaWNhcCA9IEVYVDRfQUREUl9QRVJfQkxPQ0soaW5vZGUtPmlfc2IpOwotCWludCBpbmRfYmxrcywgZGluZF9ibGtzLCB0aW5kX2Jsa3M7Ci0KLQkvKiBudW1iZXIgb2YgbmV3IGluZGlyZWN0IGJsb2NrcyBuZWVkZWQgKi8KLQlpbmRfYmxrcyA9IChibG9ja3MgKyBpY2FwIC0gMSkgLyBpY2FwOwotCi0JZGluZF9ibGtzID0gKGluZF9ibGtzICsgaWNhcCAtIDEpIC8gaWNhcDsKLQotCXRpbmRfYmxrcyA9IDE7Ci0KLQlyZXR1cm4gaW5kX2Jsa3MgKyBkaW5kX2Jsa3MgKyB0aW5kX2Jsa3M7Ci19CisjZW5kaWYKIAogLyoKICAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG1ldGFkYXRhIGJsb2NrcyBuZWVkIHRvIHJlc2VydmUKLSAqIHRvIGFsbG9jYXRlIGdpdmVuIG51bWJlciBvZiBibG9ja3MKKyAqIHRvIGFsbG9jYXRlIGEgbmV3IGJsb2NrIGF0IEBsYmxvY2tzIGZvciBub24gZXh0ZW50IGZpbGUgYmFzZWQgZmlsZQogICovCi1zdGF0aWMgaW50IGV4dDRfY2FsY19tZXRhZGF0YV9hbW91bnQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJsb2NrcykKK3N0YXRpYyBpbnQgZXh0NF9pbmRpcmVjdF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgICBzZWN0b3JfdCBsYmxvY2spCiB7Ci0JaWYgKCFibG9ja3MpCisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOworCWludCBkaW5kX21hc2sgPSBFWFQ0X0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3NiKSAtIDE7CisJaW50IGJsa19iaXRzOworCisJaWYgKGxibG9jayA8IEVYVDRfTkRJUl9CTE9DS1MpCiAJCXJldHVybiAwOwogCi0JaWYgKEVYVDRfSShpbm9kZSktPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpCi0JCXJldHVybiBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChpbm9kZSwgYmxvY2tzKTsKKwlsYmxvY2sgLT0gRVhUNF9ORElSX0JMT0NLUzsKIAotCXJldHVybiBleHQ0X2luZGlyZWN0X2NhbGNfbWV0YWRhdGFfYW1vdW50KGlub2RlLCBibG9ja3MpOworCWlmIChlaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiAmJgorCSAgICAobGJsb2NrICYgZGluZF9tYXNrKSA9PSBlaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xhc3RfbGJsb2NrKSB7CisJCWVpLT5pX2RhX21ldGFkYXRhX2NhbGNfbGVuKys7CisJCXJldHVybiAwOworCX0KKwllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xhc3RfbGJsb2NrID0gbGJsb2NrICYgZGluZF9tYXNrOworCWVpLT5pX2RhX21ldGFkYXRhX2NhbGNfbGVuID0gMTsKKwlibGtfYml0cyA9IHJvdW5kdXBfcG93X29mX3R3byhsYmxvY2sgKyAxKTsKKwlyZXR1cm4gKGJsa19iaXRzIC8gRVhUNF9BRERSX1BFUl9CTE9DS19CSVRTKGlub2RlLT5pX3NiKSkgKyAxOwogfQogCisvKgorICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIG5lZWQgdG8gcmVzZXJ2ZQorICogdG8gYWxsb2NhdGUgYSBibG9jayBsb2NhdGVkIGF0IEBsYmxvY2sKKyAqLworc3RhdGljIGludCBleHQ0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGxibG9jaykKK3sKKwlpZiAoRVhUNF9JKGlub2RlKS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkKKwkJcmV0dXJuIGV4dDRfZXh0X2NhbGNfbWV0YWRhdGFfYW1vdW50KGlub2RlLCBsYmxvY2spOworCisJcmV0dXJuIGV4dDRfaW5kaXJlY3RfY2FsY19tZXRhZGF0YV9hbW91bnQoaW5vZGUsIGxibG9jayk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBpX2RhdGFfc2VtIGRvd24sIHdoaWNoIGlzIGltcG9ydGFudCBzaW5jZSB3ZSBjYW4gY2FsbAorICogZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKCkgZnJvbSBoZXJlLgorICovCiBzdGF0aWMgdm9pZCBleHQ0X2RhX3VwZGF0ZV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB1c2VkKQogewogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpOwotCWludCB0b3RhbCwgbWRiLCBtZGJfZnJlZTsKKwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CisJaW50IG1kYl9mcmVlID0gMDsKIAotCXNwaW5fbG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKLQkvKiByZWNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG1ldGFibG9ja3Mgc3RpbGwgbmVlZCB0byBiZSByZXNlcnZlZCAqLwotCXRvdGFsID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyAtIHVzZWQ7Ci0JbWRiID0gZXh0NF9jYWxjX21ldGFkYXRhX2Ftb3VudChpbm9kZSwgdG90YWwpOwotCi0JLyogZmlndXJlIG91dCBob3cgbWFueSBtZXRhYmxvY2tzIHRvIHJlbGVhc2UgKi8KLQlCVUdfT04obWRiID4gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcyk7Ci0JbWRiX2ZyZWUgPSBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzIC0gbWRiOwotCi0JaWYgKG1kYl9mcmVlKSB7Ci0JCS8qIEFjY291bnQgZm9yIGFsbG9jYXRlZCBtZXRhX2Jsb2NrcyAqLwotCQltZGJfZnJlZSAtPSBFWFQ0X0koaW5vZGUpLT5pX2FsbG9jYXRlZF9tZXRhX2Jsb2NrczsKLQotCQkvKiB1cGRhdGUgZnMgZGlydHkgYmxvY2tzIGNvdW50ZXIgKi8KLQkJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgbWRiX2ZyZWUpOwotCQlFWFQ0X0koaW5vZGUpLT5pX2FsbG9jYXRlZF9tZXRhX2Jsb2NrcyA9IDA7Ci0JCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgPSBtZGI7CisJc3Bpbl9sb2NrKCZlaS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKwlpZiAodW5saWtlbHkodXNlZCA+IGVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKSkgeworCQlleHQ0X21zZyhpbm9kZS0+aV9zYiwgS0VSTl9OT1RJQ0UsICIlczogaW5vICVsdSwgdXNlZCAlZCAiCisJCQkgIndpdGggb25seSAlZCByZXNlcnZlZCBkYXRhIGJsb2Nrc1xuIiwKKwkJCSBfX2Z1bmNfXywgaW5vZGUtPmlfaW5vLCB1c2VkLAorCQkJIGVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKTsKKwkJV0FSTl9PTigxKTsKKwkJdXNlZCA9IGVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzOwogCX0KIAotCS8qIHVwZGF0ZSBwZXItaW5vZGUgcmVzZXJ2YXRpb25zICovCi0JQlVHX09OKHVzZWQgID4gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcyk7Ci0JRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyAtPSB1c2VkOworCS8qIFVwZGF0ZSBwZXItaW5vZGUgcmVzZXJ2YXRpb25zICovCisJZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgLT0gdXNlZDsKKwl1c2VkICs9IGVpLT5pX2FsbG9jYXRlZF9tZXRhX2Jsb2NrczsKKwllaS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyAtPSBlaS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3M7CisJZWktPmlfYWxsb2NhdGVkX21ldGFfYmxvY2tzID0gMDsKKwlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCB1c2VkKTsKKworCWlmIChlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyA9PSAwKSB7CisJCS8qCisJCSAqIFdlIGNhbiByZWxlYXNlIGFsbCBvZiB0aGUgcmVzZXJ2ZWQgbWV0YWRhdGEgYmxvY2tzCisJCSAqIG9ubHkgd2hlbiB3ZSBoYXZlIHdyaXR0ZW4gYWxsIG9mIHRoZSBkZWxheWVkCisJCSAqIGFsbG9jYXRpb24gYmxvY2tzLgorCQkgKi8KKwkJbWRiX2ZyZWUgPSBlaS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKKwkJZWktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgPSAwOworCQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDA7CisJCXBlcmNwdV9jb3VudGVyX3N1Yigmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIsIG1kYl9mcmVlKTsKKwl9CiAJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAKLQkvKgotCSAqIGZyZWUgdGhvc2Ugb3Zlci1ib29raW5nIHF1b3RhIGZvciBtZXRhZGF0YSBibG9ja3MKLQkgKi8KKwkvKiBVcGRhdGUgcXVvdGEgc3Vic3lzdGVtICovCisJdmZzX2RxX2NsYWltX2Jsb2NrKGlub2RlLCB1c2VkKTsKIAlpZiAobWRiX2ZyZWUpCiAJCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCBtZGJfZnJlZSk7CiAKQEAgLTEwODgsNyArMTA5OSw4IEBACiAJICogdGhlcmUgYXJlbid0IGFueSB3cml0ZXJzIG9uIHRoZSBpbm9kZSwgd2UgY2FuIGRpc2NhcmQgdGhlCiAJICogaW5vZGUncyBwcmVhbGxvY2F0aW9ucy4KIAkgKi8KLQlpZiAoIXRvdGFsICYmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPT0gMCkpCisJaWYgKChlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyA9PSAwKSAmJgorCSAgICAoYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID09IDApKQogCQlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwogfQogCkBAIC0xNzk3LDExICsxODA5LDE1IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IGNvcGllZDsKIH0KIAotc3RhdGljIGludCBleHQ0X2RhX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5yYmxvY2tzKQorLyoKKyAqIFJlc2VydmUgYSBzaW5nbGUgYmxvY2sgbG9jYXRlZCBhdCBsYmxvY2sKKyAqLworc3RhdGljIGludCBleHQ0X2RhX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgbGJsb2NrKQogewogCWludCByZXRyaWVzID0gMDsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKTsKLQl1bnNpZ25lZCBsb25nIG1kX25lZWRlZCwgbWRibG9ja3MsIHRvdGFsID0gMDsKKwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CisJdW5zaWduZWQgbG9uZyBtZF9uZWVkZWQsIG1kX3Jlc2VydmVkOwogCiAJLyoKIAkgKiByZWNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIG1ldGFkYXRhIGJsb2NrcyB0byByZXNlcnZlCkBAIC0xODA5LDg2ICsxODI1LDkwIEBACiAJICogd29yc2UgY2FzZSBpcyBvbmUgZXh0ZW50IHBlciBibG9jawogCSAqLwogcmVwZWF0OgotCXNwaW5fbG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKLQl0b3RhbCA9IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKyBucmJsb2NrczsKLQltZGJsb2NrcyA9IGV4dDRfY2FsY19tZXRhZGF0YV9hbW91bnQoaW5vZGUsIHRvdGFsKTsKLQlCVUdfT04obWRibG9ja3MgPCBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzKTsKLQotCW1kX25lZWRlZCA9IG1kYmxvY2tzIC0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKLQl0b3RhbCA9IG1kX25lZWRlZCArIG5yYmxvY2tzOworCXNwaW5fbG9jaygmZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJbWRfcmVzZXJ2ZWQgPSBlaS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKKwltZF9uZWVkZWQgPSBleHQ0X2NhbGNfbWV0YWRhdGFfYW1vdW50KGlub2RlLCBsYmxvY2spOworCXNwaW5fdW5sb2NrKCZlaS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAogCS8qCiAJICogTWFrZSBxdW90YSByZXNlcnZhdGlvbiBoZXJlIHRvIHByZXZlbnQgcXVvdGEgb3ZlcmZsb3cKIAkgKiBsYXRlci4gUmVhbCBxdW90YSBhY2NvdW50aW5nIGlzIGRvbmUgYXQgcGFnZXMgd3JpdGVvdXQKIAkgKiB0aW1lLgogCSAqLwotCWlmICh2ZnNfZHFfcmVzZXJ2ZV9ibG9jayhpbm9kZSwgdG90YWwpKSB7Ci0JCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCWlmICh2ZnNfZHFfcmVzZXJ2ZV9ibG9jayhpbm9kZSwgbWRfbmVlZGVkICsgMSkpIHsKKwkJLyogCisJCSAqIFdlIHRlbmQgdG8gYmFkbHkgb3Zlci1lc3RpbWF0ZSB0aGUgYW1vdW50IG9mCisJCSAqIG1ldGFkYXRhIGJsb2NrcyB3aGljaCBhcmUgbmVlZGVkLCBzbyBpZiB3ZSBoYXZlCisJCSAqIHJlc2VydmVkIGFueSBtZXRhZGF0YSBibG9ja3MsIHRyeSB0byBmb3JjZSBvdXQgdGhlCisJCSAqIGlub2RlIGFuZCBzZWUgaWYgd2UgaGF2ZSBhbnkgYmV0dGVyIGx1Y2suCisJCSAqLworCQlpZiAobWRfcmVzZXJ2ZWQgJiYgcmV0cmllcysrIDw9IDMpCisJCQlnb3RvIHJldHJ5OwogCQlyZXR1cm4gLUVEUVVPVDsKIAl9CiAKLQlpZiAoZXh0NF9jbGFpbV9mcmVlX2Jsb2NrcyhzYmksIHRvdGFsKSkgewotCQlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKLQkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHRvdGFsKTsKKwlpZiAoZXh0NF9jbGFpbV9mcmVlX2Jsb2NrcyhzYmksIG1kX25lZWRlZCArIDEpKSB7CisJCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCBtZF9uZWVkZWQgKyAxKTsKIAkJaWYgKGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpIHsKKwkJcmV0cnk6CisJCQlpZiAobWRfcmVzZXJ2ZWQpCisJCQkJd3JpdGVfaW5vZGVfbm93KGlub2RlLCAocmV0cmllcyA9PSAzKSk7CiAJCQl5aWVsZCgpOwogCQkJZ290byByZXBlYXQ7CiAJCX0KIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQotCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKz0gbnJibG9ja3M7Ci0JRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyA9IG1kYmxvY2tzOworCXNwaW5fbG9jaygmZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MrKzsKKwllaS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyArPSBtZF9uZWVkZWQ7CisJc3Bpbl91bmxvY2soJmVpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCi0Jc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAJcmV0dXJuIDA7ICAgICAgIC8qIHN1Y2Nlc3MgKi8KIH0KIAogc3RhdGljIHZvaWQgZXh0NF9kYV9yZWxlYXNlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0b19mcmVlKQogewogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpOwotCWludCB0b3RhbCwgbWRiLCBtZGJfZnJlZSwgcmVsZWFzZTsKKwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAKIAlpZiAoIXRvX2ZyZWUpCiAJCXJldHVybjsJCS8qIE5vdGhpbmcgdG8gcmVsZWFzZSwgZXhpdCAqLwogCiAJc3Bpbl9sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCi0JaWYgKCFFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKSB7CisJaWYgKHVubGlrZWx5KHRvX2ZyZWUgPiBlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcykpIHsKIAkJLyoKLQkJICogaWYgdGhlcmUgaXMgbm8gcmVzZXJ2ZWQgYmxvY2tzLCBidXQgd2UgdHJ5IHRvIGZyZWUgc29tZQotCQkgKiB0aGVuIHRoZSBjb3VudGVyIGlzIG1lc3NlZCB1cCBzb21ld2hlcmUuCi0JCSAqIGJ1dCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGludmFsaWRhdGUKLQkJICogcGFnZSwgaXQncyBoYXJtbGVzcyB0byByZXR1cm4gd2l0aG91dCBhbnkgYWN0aW9uCisJCSAqIGlmIHRoZXJlIGFyZW4ndCBlbm91Z2ggcmVzZXJ2ZWQgYmxvY2tzLCB0aGVuIHRoZQorCQkgKiBjb3VudGVyIGlzIG1lc3NlZCB1cCBzb21ld2hlcmUuICBTaW5jZSB0aGlzCisJCSAqIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGludmFsaWRhdGUgcGFnZSwgaXQncworCQkgKiBoYXJtbGVzcyB0byByZXR1cm4gd2l0aG91dCBhbnkgYWN0aW9uLgogCQkgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiZXh0NCBkZWxhbGxvYyB0cnkgdG8gcmVsZWFzZSAlZCByZXNlcnZlZCAiCi0JCQkgICAgImJsb2NrcyBmb3IgaW5vZGUgJWx1LCBidXQgdGhlcmUgaXMgbm8gcmVzZXJ2ZWQgIgotCQkJICAgICJkYXRhIGJsb2Nrc1xuIiwgdG9fZnJlZSwgaW5vZGUtPmlfaW5vKTsKLQkJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7Ci0JCXJldHVybjsKKwkJZXh0NF9tc2coaW5vZGUtPmlfc2IsIEtFUk5fTk9USUNFLCAiZXh0NF9kYV9yZWxlYXNlX3NwYWNlOiAiCisJCQkgImlubyAlbHUsIHRvX2ZyZWUgJWQgd2l0aCBvbmx5ICVkIHJlc2VydmVkICIKKwkJCSAiZGF0YSBibG9ja3NcbiIsIGlub2RlLT5pX2lubywgdG9fZnJlZSwKKwkJCSBlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcyk7CisJCVdBUk5fT04oMSk7CisJCXRvX2ZyZWUgPSBlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrczsKKwl9CisJZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgLT0gdG9fZnJlZTsKKworCWlmIChlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyA9PSAwKSB7CisJCS8qCisJCSAqIFdlIGNhbiByZWxlYXNlIGFsbCBvZiB0aGUgcmVzZXJ2ZWQgbWV0YWRhdGEgYmxvY2tzCisJCSAqIG9ubHkgd2hlbiB3ZSBoYXZlIHdyaXR0ZW4gYWxsIG9mIHRoZSBkZWxheWVkCisJCSAqIGFsbG9jYXRpb24gYmxvY2tzLgorCQkgKi8KKwkJdG9fZnJlZSArPSBlaS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKKwkJZWktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgPSAwOworCQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDA7CiAJfQogCi0JLyogcmVjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBtZXRhYmxvY2tzIHN0aWxsIG5lZWQgdG8gYmUgcmVzZXJ2ZWQgKi8KLQl0b3RhbCA9IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgLSB0b19mcmVlOwotCW1kYiA9IGV4dDRfY2FsY19tZXRhZGF0YV9hbW91bnQoaW5vZGUsIHRvdGFsKTsKKwkvKiB1cGRhdGUgZnMgZGlydHkgYmxvY2tzIGNvdW50ZXIgKi8KKwlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCB0b19mcmVlKTsKIAotCS8qIGZpZ3VyZSBvdXQgaG93IG1hbnkgbWV0YWJsb2NrcyB0byByZWxlYXNlICovCi0JQlVHX09OKG1kYiA+IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MpOwotCW1kYl9mcmVlID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyAtIG1kYjsKLQotCXJlbGVhc2UgPSB0b19mcmVlICsgbWRiX2ZyZWU7Ci0KLQkvKiB1cGRhdGUgZnMgZGlydHkgYmxvY2tzIGNvdW50ZXIgZm9yIHRydW5jYXRlIGNhc2UgKi8KLQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCByZWxlYXNlKTsKLQotCS8qIHVwZGF0ZSBwZXItaW5vZGUgcmVzZXJ2YXRpb25zICovCi0JQlVHX09OKHRvX2ZyZWUgPiBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKTsKLQlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzIC09IHRvX2ZyZWU7Ci0KLQlCVUdfT04obWRiID4gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcyk7Ci0JRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyA9IG1kYjsKIAlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAotCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCByZWxlYXNlKTsKKwl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgdG9fZnJlZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGV4dDRfZGFfcGFnZV9yZWxlYXNlX3Jlc2VydmF0aW9uKHN0cnVjdCBwYWdlICpwYWdlLApAQCAtMjQ5NCw3ICsyNTE0LDcgQEAKIAkJICogWFhYOiBfX2Jsb2NrX3ByZXBhcmVfd3JpdGUoKSB1bm1hcHMgcGFzc2VkIGJsb2NrLAogCQkgKiBpcyBpdCBPSz8KIAkJICovCi0JCXJldCA9IGV4dDRfZGFfcmVzZXJ2ZV9zcGFjZShpbm9kZSwgMSk7CisJCXJldCA9IGV4dDRfZGFfcmVzZXJ2ZV9zcGFjZShpbm9kZSwgaWJsb2NrKTsKIAkJaWYgKHJldCkKIAkJCS8qIG5vdCBlbm91Z2ggc3BhY2UgdG8gcmVzZXJ2ZSAqLwogCQkJcmV0dXJuIHJldDsKQEAgLTI5NjgsOCArMjk4OCw3IEBACiBvdXRfd3JpdGVwYWdlczoKIAlpZiAoIW5vX25yd3JpdGVfaW5kZXhfdXBkYXRlKQogCQl3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gMDsKLQlpZiAod2JjLT5ucl90b193cml0ZSA+IG5yX3RvX3dyaXRlYnVtcCkKLQkJd2JjLT5ucl90b193cml0ZSAtPSBucl90b193cml0ZWJ1bXA7CisJd2JjLT5ucl90b193cml0ZSAtPSBucl90b193cml0ZWJ1bXA7CiAJd2JjLT5yYW5nZV9zdGFydCA9IHJhbmdlX3N0YXJ0OwogCXRyYWNlX2V4dDRfZGFfd3JpdGVwYWdlc19yZXN1bHQoaW5vZGUsIHdiYywgcmV0LCBwYWdlc193cml0dGVuKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjk5NCwxMSArMzAxMywxOCBAQAogCWlmICgyICogZnJlZV9ibG9ja3MgPCAzICogZGlydHlfYmxvY2tzIHx8CiAJCWZyZWVfYmxvY2tzIDwgKGRpcnR5X2Jsb2NrcyArIEVYVDRfRlJFRUJMT0NLU19XQVRFUk1BUkspKSB7CiAJCS8qCi0JCSAqIGZyZWUgYmxvY2sgY291bnQgaXMgbGVzcyB0aGF0IDE1MCUgb2YgZGlydHkgYmxvY2tzCi0JCSAqIG9yIGZyZWUgYmxvY2tzIGlzIGxlc3MgdGhhdCB3YXRlcm1hcmsKKwkJICogZnJlZSBibG9jayBjb3VudCBpcyBsZXNzIHRoYW4gMTUwJSBvZiBkaXJ0eSBibG9ja3MKKwkJICogb3IgZnJlZSBibG9ja3MgaXMgbGVzcyB0aGFuIHdhdGVybWFyawogCQkgKi8KIAkJcmV0dXJuIDE7CiAJfQorCS8qCisJICogRXZlbiBpZiB3ZSBkb24ndCBzd2l0Y2ggYnV0IGFyZSBuZWFyaW5nIGNhcGFjaXR5LAorCSAqIHN0YXJ0IHB1c2hpbmcgZGVsYWxsb2Mgd2hlbiAxLzIgb2YgZnJlZSBibG9ja3MgYXJlIGRpcnR5LgorCSAqLworCWlmIChmcmVlX2Jsb2NrcyA8IDIgKiBkaXJ0eV9ibG9ja3MpCisJCXdyaXRlYmFja19pbm9kZXNfc2JfaWZfaWRsZShzYik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDc5NCw2ICs0ODIwLDkgQEAKIAkJCSgoX191NjQpbGUxNl90b19jcHUocmF3X2lub2RlLT5pX2ZpbGVfYWNsX2hpZ2gpKSA8PCAzMjsKIAlpbm9kZS0+aV9zaXplID0gZXh0NF9pc2l6ZShyYXdfaW5vZGUpOwogCWVpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwllaS0+aV9yZXNlcnZlZF9xdW90YSA9IDA7CisjZW5kaWYKIAlpbm9kZS0+aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2dlbmVyYXRpb24pOwogCWVpLT5pX2Jsb2NrX2dyb3VwID0gaWxvYy5ibG9ja19ncm91cDsKIAllaS0+aV9sYXN0X2FsbG9jX2dyb3VwID0gfjA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGIxZmQzZGEuLmQzNGFmYWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0yNzU1LDEyICsyNzU1LDYgQEAKIAlpZiAoIShhYy0+YWNfZmxhZ3MgJiBFWFQ0X01CX0RFTEFMTE9DX1JFU0VSVkVEKSkKIAkJLyogcmVsZWFzZSBhbGwgdGhlIHJlc2VydmVkIGJsb2NrcyBpZiBub24gZGVsYWxsb2MgKi8KIAkJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgcmVzZXJ2X2Jsa3MpOwotCWVsc2UgewotCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLAotCQkJCQkJYWMtPmFjX2JfZXguZmVfbGVuKTsKLQkJLyogY29udmVydCByZXNlcnZlZCBxdW90YSBibG9ja3MgdG8gcmVhbCBxdW90YSBibG9ja3MgKi8KLQkJdmZzX2RxX2NsYWltX2Jsb2NrKGFjLT5hY19pbm9kZSwgYWMtPmFjX2JfZXguZmVfbGVuKTsKLQl9CiAKIAlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKIAkJZXh0NF9ncm91cF90IGZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmggYi9mcy9leHQ0L21iYWxsb2MuaAppbmRleCAwY2E4MTEwLi40MzY1MjFjIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuaAorKysgYi9mcy9leHQ0L21iYWxsb2MuaApAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJleHQ0X2piZDIuaCIKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCA4MjdiZGUxLi43MzVjMjBkIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC03MDIsOCArNzAyLDEyIEBACiAJZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgPSAwOwogCWVpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzID0gMDsKIAllaS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3MgPSAwOworCWVpLT5pX2RhX21ldGFkYXRhX2NhbGNfbGVuID0gMDsKIAllaS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmKGVpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spKTsKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwllaS0+aV9yZXNlcnZlZF9xdW90YSA9IDA7CisjZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KTsKIAllaS0+Y3VyX2Fpb19kaW8gPSBOVUxMOwogCWVpLT5pX3N5bmNfdGlkID0gMDsKQEAgLTEwMTQsNyArMTAxOCw5IEBACiAJLnJlc2VydmVfc3BhY2UJPSBkcXVvdF9yZXNlcnZlX3NwYWNlLAogCS5jbGFpbV9zcGFjZQk9IGRxdW90X2NsYWltX3NwYWNlLAogCS5yZWxlYXNlX3Jzdgk9IGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2UsCisjaWZkZWYgQ09ORklHX1FVT1RBCiAJLmdldF9yZXNlcnZlZF9zcGFjZSA9IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlLAorI2VuZGlmCiAJLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCiAJLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLAogCS5mcmVlX2lub2RlCT0gZHF1b3RfZnJlZV9pbm9kZSwKQEAgLTIxNjksOSArMjE3NSw5IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS0+c19idWRkeV9jYWNoZS0+aV9zYjsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsbHVcbiIsCi0JCQlzYmktPnNfa2J5dGVzX3dyaXR0ZW4gKyAKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKHNiaS0+c19rYnl0ZXNfd3JpdHRlbiArCiAJCQkoKHBhcnRfc3RhdF9yZWFkKHNiLT5zX2JkZXYtPmJkX3BhcnQsIHNlY3RvcnNbMV0pIC0KLQkJCSAgRVhUNF9TQihzYiktPnNfc2VjdG9yc193cml0dGVuX3N0YXJ0KSA+PiAxKSk7CisJCQkgIEVYVDRfU0Ioc2IpLT5zX3NlY3RvcnNfd3JpdHRlbl9zdGFydCkgPj4gMSkpKTsKIH0KIAogc3RhdGljIHNzaXplX3QgaW5vZGVfcmVhZGFoZWFkX2Jsa3Nfc3RvcmUoc3RydWN0IGV4dDRfYXR0ciAqYSwKQEAgLTQwMDAsNiArNDAwNiw3IEBACiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQyX2ZzX3R5cGUpOwogfQorTU9EVUxFX0FMSUFTKCJleHQyIik7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2FzX2V4dDIodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9hc19leHQyKHZvaWQpIHsgfQpAQCAtNDAyNiw2ICs0MDMzLDcgQEAKIHsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmV4dDNfZnNfdHlwZSk7CiB9CitNT0RVTEVfQUxJQVMoImV4dDMiKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfYXNfZXh0Myh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX2FzX2V4dDModm9pZCkgeyB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggODMyMThiZS4uZjNhMmY3ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCisrKyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTMzMiw2ICsxMzMyLDggQEAKIAkJCWdvdG8gY2xlYW51cDsKIAkJa2ZyZWUoYl9lbnRyeV9uYW1lKTsKIAkJa2ZyZWUoYnVmZmVyKTsKKwkJYl9lbnRyeV9uYW1lID0gTlVMTDsKKwkJYnVmZmVyID0gTlVMTDsKIAkJYnJlbHNlKGlzLT5pbG9jLmJoKTsKIAkJa2ZyZWUoaXMpOwogCQlrZnJlZShicyk7CmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggMGFmYWNmNi4uNjk2NTJjNSAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtMTg2LDEwICsxODYsOCBAQAogCSAqIHRoYXQgd2UgY2FuIGRvIGRlYnVnZ2luZyBjaGVja3MgYXQgX19mcHV0KCkKIAkgKi8KIAlpZiAoKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgIXNwZWNpYWxfZmlsZShwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKLQkJaW50IGVycm9yID0gMDsKIAkJZmlsZV90YWtlX3dyaXRlKGZpbGUpOwotCQllcnJvciA9IG1udF9jbG9uZV93cml0ZShwYXRoLT5tbnQpOwotCQlXQVJOX09OKGVycm9yKTsKKwkJV0FSTl9PTihtbnRfY2xvbmVfd3JpdGUocGF0aC0+bW50KSk7CiAJfQogCWltYV9jb3VudHNfZ2V0KGZpbGUpOwogCXJldHVybiBmaWxlOwpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCA0OWJjMWI4Li4xYTdjNDJjIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtMjQyLDYgKzI0Miw3IEBACiAvKioKICAqIGJkaV9zdGFydF93cml0ZWJhY2sgLSBzdGFydCB3cml0ZWJhY2sKICAqIEBiZGk6IHRoZSBiYWNraW5nIGRldmljZSB0byB3cml0ZSBmcm9tCisgKiBAc2I6IHdyaXRlIGlub2RlcyBmcm9tIHRoaXMgc3VwZXJfYmxvY2sKICAqIEBucl9wYWdlczogdGhlIG51bWJlciBvZiBwYWdlcyB0byB3cml0ZQogICoKICAqIERlc2NyaXB0aW9uOgpAQCAtMTE4Nyw2ICsxMTg4LDIzIEBACiBFWFBPUlRfU1lNQk9MKHdyaXRlYmFja19pbm9kZXNfc2IpOwogCiAvKioKKyAqIHdyaXRlYmFja19pbm9kZXNfc2JfaWZfaWRsZQktCXN0YXJ0IHdyaXRlYmFjayBpZiBub25lIHVuZGVyd2F5CisgKiBAc2I6IHRoZSBzdXBlcmJsb2NrCisgKgorICogSW52b2tlIHdyaXRlYmFja19pbm9kZXNfc2IgaWYgbm8gd3JpdGViYWNrIGlzIGN1cnJlbnRseSB1bmRlcndheS4KKyAqIFJldHVybnMgMSBpZiB3cml0ZWJhY2sgd2FzIHN0YXJ0ZWQsIDAgaWYgbm90LgorICovCitpbnQgd3JpdGViYWNrX2lub2Rlc19zYl9pZl9pZGxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaWYgKCF3cml0ZWJhY2tfaW5fcHJvZ3Jlc3Moc2ItPnNfYmRpKSkgeworCQl3cml0ZWJhY2tfaW5vZGVzX3NiKHNiKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh3cml0ZWJhY2tfaW5vZGVzX3NiX2lmX2lkbGUpOworCisvKioKICAqIHN5bmNfaW5vZGVzX3NiCS0Jc3luYyBzYiBpbm9kZSBwYWdlcwogICogQHNiOiB0aGUgc3VwZXJibG9jawogICoKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IGY2N2NkMTQuLmU5NmExNjYgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKKysrIGIvZnMvaW50ZXJuYWwuaApAQCAtODUsMyArODUsMTAgQEAKICAqIHN1cGVyLmMKICAqLwogZXh0ZXJuIGludCBkb19yZW1vdW50X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHZvaWQgKiwgaW50KTsKKworLyoKKyAqIG9wZW4uYworICovCitzdHJ1Y3QgbmFtZWlkYXRhOworZXh0ZXJuIHN0cnVjdCBmaWxlICpuYW1laWRhdGFfdG9fZmlscChzdHJ1Y3QgbmFtZWlkYXRhICopOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9vcGVuX2ludGVudChzdHJ1Y3QgbmFtZWlkYXRhICopOwpkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggNDE2MGFmYS4uYmQyMjRlZSAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC0xOTEzLDcgKzE5MTMsNyBAQAogewogCWpiZF9kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiamJkIiwgTlVMTCk7CiAJaWYgKGpiZF9kZWJ1Z2ZzX2RpcikKLQkJamJkX2RlYnVnID0gZGVidWdmc19jcmVhdGVfdTgoImpiZC1kZWJ1ZyIsIFNfSVJVR08sCisJCWpiZF9kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX3U4KCJqYmQtZGVidWciLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJICAgICAgIGpiZF9kZWJ1Z2ZzX2RpciwKIAkJCQkJICAgICAgICZqb3VybmFsX2VuYWJsZV9kZWJ1Zyk7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IGNhMGY1ZWIuLjg4Njg0OTMgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvamJkMi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9qYmQyLmg+CiAKIC8qCkBAIC01MTUsNiArNTE2LDIwIEBACiAJam91cm5hbC0+al90YWlsX3NlcXVlbmNlID0gZmlyc3RfdGlkOwogCWpvdXJuYWwtPmpfdGFpbCA9IGJsb2NrbnI7CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGFuIGV4dGVybmFsIGpvdXJuYWwsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKKwkgKiBhbnkgZGF0YSBibG9ja3MgdGhhdCB3ZXJlIHJlY2VudGx5IHdyaXR0ZW4gb3V0IC0tLSBwZXJoYXBzCisJICogYnkgamJkMl9sb2dfZG9fY2hlY2twb2ludCgpIC0tLSBhcmUgZmx1c2hlZCBvdXQgYmVmb3JlIHdlCisJICogZHJvcCB0aGUgdHJhbnNhY3Rpb25zIGZyb20gdGhlIGV4dGVybmFsIGpvdXJuYWwuICBJdCdzCisJICogdW5saWtlbHkgdGhpcyB3aWxsIGJlIG5lY2Vzc2FyeSwgZXNwZWNpYWxseSB3aXRoIGEKKwkgKiBhcHByb3ByaWF0ZWx5IHNpemVkIGpvdXJuYWwsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gZ3VhcmFudGVlCisJICogY29ycmVjdG5lc3MuICBGb3J0dW5hdGVseSBqYmQyX2NsZWFudXBfam91cm5hbF90YWlsKCkKKwkgKiBkb2Vzbid0IGdldCBjYWxsZWQgYWxsIHRoYXQgb2Z0ZW4uCisJICovCisJaWYgKChqb3VybmFsLT5qX2ZzX2RldiAhPSBqb3VybmFsLT5qX2RldikgJiYKKwkgICAgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0JBUlJJRVIpKQorCQlibGtkZXZfaXNzdWVfZmx1c2goam91cm5hbC0+al9mc19kZXYsIE5VTEwpOwogCWlmICghKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0FCT1JUKSkKIAkJamJkMl9qb3VybmFsX3VwZGF0ZV9zdXBlcmJsb2NrKGpvdXJuYWwsIDEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggNmExMDIzOC4uMWJjNzRiNiAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYworKysgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC0yNTksNiArMjU5LDcgQEAKIAkJCXJldCA9IGVycjsKIAkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCUpfQVNTRVJUKGppbm9kZS0+aV90cmFuc2FjdGlvbiA9PSBjb21taXRfdHJhbnNhY3Rpb24pOworCQljb21taXRfdHJhbnNhY3Rpb24tPnRfZmx1c2hlZF9kYXRhX2Jsb2NrcyA9IDE7CiAJCWppbm9kZS0+aV9mbGFncyAmPSB+SklfQ09NTUlUX1JVTk5JTkc7CiAJCXdha2VfdXBfYml0KCZqaW5vZGUtPmlfZmxhZ3MsIF9fSklfQ09NTUlUX1JVTk5JTkcpOwogCX0KQEAgLTcwOCw4ICs3MDksMTcgQEAKIAkJfQogCX0KIAotCS8qIERvbmUgaXQgYWxsOiBub3cgd3JpdGUgdGhlIGNvbW1pdCByZWNvcmQgYXN5bmNocm9ub3VzbHkuICovCisJLyogCisJICogSWYgdGhlIGpvdXJuYWwgaXMgbm90IGxvY2F0ZWQgb24gdGhlIGZpbGUgc3lzdGVtIGRldmljZSwKKwkgKiB0aGVuIHdlIG11c3QgZmx1c2ggdGhlIGZpbGUgc3lzdGVtIGRldmljZSBiZWZvcmUgd2UgaXNzdWUKKwkgKiB0aGUgY29tbWl0IHJlY29yZAorCSAqLworCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfZmx1c2hlZF9kYXRhX2Jsb2NrcyAmJgorCSAgICAoam91cm5hbC0+al9mc19kZXYgIT0gam91cm5hbC0+al9kZXYpICYmCisJICAgIChqb3VybmFsLT5qX2ZsYWdzICYgSkJEMl9CQVJSSUVSKSkKKwkJYmxrZGV2X2lzc3VlX2ZsdXNoKGpvdXJuYWwtPmpfZnNfZGV2LCBOVUxMKTsKIAorCS8qIERvbmUgaXQgYWxsOiBub3cgd3JpdGUgdGhlIGNvbW1pdCByZWNvcmQgYXN5bmNocm9ub3VzbHkuICovCiAJaWYgKEpCRDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoam91cm5hbCwKIAkJCQkgICAgICBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUKSkgewogCQllcnIgPSBqb3VybmFsX3N1Ym1pdF9jb21taXRfcmVjb3JkKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbiwKQEAgLTcyMCwxMyArNzMwLDYgQEAKIAkJCWJsa2Rldl9pc3N1ZV9mbHVzaChqb3VybmFsLT5qX2RldiwgTlVMTCk7CiAJfQogCi0JLyoKLQkgKiBUaGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byB3YWl0IGZvciBkYXRhIGJ1ZmZlcnMgYm90aCBmb3IgQVNZTkMKLQkgKiBhbmQgIUFTWU5DIGNvbW1pdC4gSWYgY29tbWl0IGlzIEFTWU5DLCB3ZSBuZWVkIHRvIHdhaXQgb25seSBhZnRlcgotCSAqIHRoZSBjb21taXQgYmxvY2sgd2VudCB0byBkaXNrICh3aGljaCBoYXBwZW5zIGFib3ZlKS4gSWYgY29tbWl0IGlzCi0JICogU1lOQywgd2UgbmVlZCB0byB3YWl0IGZvciBkYXRhIGJ1ZmZlcnMgYmVmb3JlIHdlIHN0YXJ0IHdyaXRpbmcKLQkgKiBjb21taXQgYmxvY2ssIHdoaWNoIGhhcHBlbnMgYmVsb3cgaW4gc3VjaCBzZXR0aW5nLgotCSAqLwogCWVyciA9IGpvdXJuYWxfZmluaXNoX2lub2RlX2RhdGFfYnVmZmVycyhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBiN2NhM2E5Li5hYzBkMDI3IDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtODE0LDcgKzgxNCw3IEBACiAJam91cm5hbF90ICpqb3VybmFsOwogCWludCBlcnI7CiAKLQlqb3VybmFsID0ga3phbGxvYyhzaXplb2YoKmpvdXJuYWwpLCBHRlBfS0VSTkVMfF9fR0ZQX05PRkFJTCk7CisJam91cm5hbCA9IGt6YWxsb2Moc2l6ZW9mKCpqb3VybmFsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFqb3VybmFsKQogCQlnb3RvIGZhaWw7CiAKQEAgLTIxMTUsNyArMjExNSw4IEBACiB7CiAJamJkMl9kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiamJkMiIsIE5VTEwpOwogCWlmIChqYmQyX2RlYnVnZnNfZGlyKQotCQlqYmQyX2RlYnVnID0gZGVidWdmc19jcmVhdGVfdTgoSkJEMl9ERUJVR19OQU1FLCBTX0lSVUdPLAorCQlqYmQyX2RlYnVnID0gZGVidWdmc19jcmVhdGVfdTgoSkJEMl9ERUJVR19OQU1FLAorCQkJCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCSAgICAgICBqYmQyX2RlYnVnZnNfZGlyLAogCQkJCQkgICAgICAgJmpiZDJfam91cm5hbF9lbmFibGVfZGVidWcpOwogfQpkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCAyMjM0YzczLi5kOTI5YTgyIDEwMDY0NAotLS0gYS9mcy9qZnMvc3VwZXIuYworKysgYi9mcy9qZnMvc3VwZXIuYwpAQCAtNTI0LDcgKzUyNCw3IEBACiAJICogUGFnZSBjYWNoZSBpcyBpbmRleGVkIGJ5IGxvbmcuCiAJICogSSB3b3VsZCB1c2UgTUFYX0xGU19GSUxFU0laRSwgYnV0IGl0J3Mgb25seSBoYWxmIGFzIGJpZwogCSAqLwotCXNiLT5zX21heGJ5dGVzID0gbWluKCgodTY0KSBQQUdFX0NBQ0hFX1NJWkUgPDwgMzIpIC0gMSwgc2ItPnNfbWF4Ynl0ZXMpOworCXNiLT5zX21heGJ5dGVzID0gbWluKCgodTY0KSBQQUdFX0NBQ0hFX1NJWkUgPDwgMzIpIC0gMSwgKHU2NClzYi0+c19tYXhieXRlcyk7CiAjZW5kaWYKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZGFkNGI4MC4uYjU1NDQwYiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0zNyw4ICszNyw2IEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi0jZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwMFwwMDRcMDAyXDAwNiJbKHgpJk9fQUNDTU9ERV0pCi0KIC8qIFtGZWItMTk5NyBULiBTY2hvZWJlbC1UaGV1ZXJdCiAgKiBGdW5kYW1lbnRhbCBjaGFuZ2VzIGluIHRoZSBwYXRobmFtZSBsb29rdXAgbWVjaGFuaXNtcyAobmFtZWkpCiAgKiB3ZXJlIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIG9taXJyLiAgVGhlIHJlYXNvbiBpcyB0aGF0IG9taXJyIG5lZWRzCkBAIC0yMzQsNiArMjMyLDcgQEAKIAkvKgogCSAqIFNlYXJjaGluZyBpbmNsdWRlcyBleGVjdXRhYmxlIG9uIGRpcmVjdG9yaWVzLCBlbHNlIGp1c3QgcmVhZC4KIAkgKi8KKwltYXNrICY9IE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUM7CiAJaWYgKG1hc2sgPT0gTUFZX1JFQUQgfHwgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgIShtYXNrICYgTUFZX1dSSVRFKSkpCiAJCWlmIChjYXBhYmxlKENBUF9EQUNfUkVBRF9TRUFSQ0gpKQogCQkJcmV0dXJuIDA7CkBAIC0xNjQwLDYgKzE2MzksNyBAQAogCQlpZiAoZmlscCA9PSBOVUxMKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVORklMRSk7CiAJCW5kLmludGVudC5vcGVuLmZpbGUgPSBmaWxwOworCQlmaWxwLT5mX2ZsYWdzID0gb3Blbl9mbGFnOwogCQluZC5pbnRlbnQub3Blbi5mbGFncyA9IGZsYWc7CiAJCW5kLmludGVudC5vcGVuLmNyZWF0ZV9tb2RlID0gMDsKIAkJZXJyb3IgPSBkb19wYXRoX2xvb2t1cChkZmQsIHBhdGhuYW1lLApAQCAtMTY4NSw2ICsxNjg1LDcgQEAKIAlpZiAoZmlscCA9PSBOVUxMKQogCQlnb3RvIGV4aXRfcGFyZW50OwogCW5kLmludGVudC5vcGVuLmZpbGUgPSBmaWxwOworCWZpbHAtPmZfZmxhZ3MgPSBvcGVuX2ZsYWc7CiAJbmQuaW50ZW50Lm9wZW4uZmxhZ3MgPSBmbGFnOwogCW5kLmludGVudC5vcGVuLmNyZWF0ZV9tb2RlID0gbW9kZTsKIAlkaXIgPSBuZC5wYXRoLmRlbnRyeTsKQEAgLTE3MjUsNyArMTcyNiw3IEBACiAJCQltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KLQkJZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCwgb3Blbl9mbGFnKTsKKwkJZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCk7CiAJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIAkJaWYgKG5kLnJvb3QubW50KQogCQkJcGF0aF9wdXQoJm5kLnJvb3QpOwpAQCAtMTc4OSw3ICsxNzkwLDcgQEAKIAkJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIAkJZ290byBleGl0OwogCX0KLQlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kLCBvcGVuX2ZsYWcpOworCWZpbHAgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQpOwogCWlmICghSVNfRVJSKGZpbHApKSB7CiAJCWVycm9yID0gaW1hX3BhdGhfY2hlY2soJmZpbHAtPmZfcGF0aCwgZmlscC0+Zl9tb2RlICYKIAkJCSAgICAgICAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDJjNWFjZTQuLjNjN2YwM2IgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTE2MTUsNiArMTYxNSw3IEBACiAJCQkJZ290byBvdXQ7CiAKIAkJCW5ld19kZW50cnkgPSBkZW50cnk7CisJCQlyZWhhc2ggPSBOVUxMOwogCQkJbmV3X2lub2RlID0gTlVMTDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzZmguYyBiL2ZzL25mc2QvbmZzZmguYwppbmRleCAxYzEyMTc3Li41NWM4ZTYzIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2ZoLmMKKysrIGIvZnMvbmZzZC9uZnNmaC5jCkBAIC04OSw3ICs4OSw3IEBACiAJaW50IGZsYWdzID0gbmZzZXhwX2ZsYWdzKHJxc3RwLCBleHApOwogCiAJLyogQ2hlY2sgaWYgdGhlIHJlcXVlc3Qgb3JpZ2luYXRlZCBmcm9tIGEgc2VjdXJlIHBvcnQuICovCi0JaWYgKCFycXN0cC0+cnFfc2VjdXJlICYmIChmbGFncyAmIE5GU0VYUF9JTlNFQ1VSRV9QT1JUKSkgeworCWlmICghcnFzdHAtPnJxX3NlY3VyZSAmJiAhKGZsYWdzICYgTkZTRVhQX0lOU0VDVVJFX1BPUlQpKSB7CiAJCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOwogCQlkcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIm5mc2Q6IHJlcXVlc3QgZnJvbSBpbnNlY3VyZSBwb3J0ICVzIVxuIiwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDdjMmUzMzcuLmMxOTQ3OTMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtNzgwLDEyICs3ODAsOSBAQAogCWludCAoKmZzeW5jKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwogCWludCBlcnI7CiAKLQllcnIgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisJZXJyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKIAlpZiAoZXJyID09IDAgJiYgZm9wICYmIChmc3luYyA9IGZvcC0+ZnN5bmMpKQogCQllcnIgPSBmc3luYyhmaWxwLCBkcCwgMCk7Ci0JaWYgKGVyciA9PSAwKQotCQllcnIgPSBmaWxlbWFwX2ZkYXRhd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKLQogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9ibWFwLmMgYi9mcy9uaWxmczIvYm1hcC5jCmluZGV4IGY0YTE0ZWEuLmVmZmRiZGIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9ibWFwLmMKKysrIGIvZnMvbmlsZnMyL2JtYXAuYwpAQCAtNDE3LDggKzQxNyw4IEBACiAKIAlrZXkgPSBwYWdlX2luZGV4KGJoLT5iX3BhZ2UpIDw8IChQQUdFX0NBQ0hFX1NISUZUIC0KIAkJCQkJIGJtYXAtPmJfaW5vZGUtPmlfYmxrYml0cyk7Ci0JZm9yIChwYmggPSBwYWdlX2J1ZmZlcnMoYmgtPmJfcGFnZSk7IHBiaCAhPSBiaDsKLQkgICAgIHBiaCA9IHBiaC0+Yl90aGlzX3BhZ2UsIGtleSsrKTsKKwlmb3IgKHBiaCA9IHBhZ2VfYnVmZmVycyhiaC0+Yl9wYWdlKTsgcGJoICE9IGJoOyBwYmggPSBwYmgtPmJfdGhpc19wYWdlKQorCQlrZXkrKzsKIAogCXJldHVybiBrZXk7CiB9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvY3BmaWxlLmMgYi9mcy9uaWxmczIvY3BmaWxlLmMKaW5kZXggZDVhZDU0ZS4uMTg3Mzc4MSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2NwZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9jcGZpbGUuYwpAQCAtMzI4LDE5ICszMjgsMjQgQEAKIAkJCXRuaWNwcyArPSBuaWNwczsKIAkJCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShjcF9iaCk7CiAJCQluaWxmc19tZHRfbWFya19kaXJ0eShjcGZpbGUpOwotCQkJaWYgKCFuaWxmc19jcGZpbGVfaXNfaW5fZmlyc3QoY3BmaWxlLCBjbm8pICYmCi0JCQkgICAgKGNvdW50ID0gbmlsZnNfY3BmaWxlX2Jsb2NrX3N1Yl92YWxpZF9jaGVja3BvaW50cygKLQkJCQkgICAgY3BmaWxlLCBjcF9iaCwga2FkZHIsIG5pY3BzKSkgPT0gMCkgewotCQkJCS8qIG1ha2UgaG9sZSAqLwotCQkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQkJCQlicmVsc2UoY3BfYmgpOwotCQkJCXJldCA9IG5pbGZzX2NwZmlsZV9kZWxldGVfY2hlY2twb2ludF9ibG9jaygKLQkJCQkJY3BmaWxlLCBjbm8pOwotCQkJCWlmIChyZXQgPT0gMCkKLQkJCQkJY29udGludWU7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGRlbGV0ZSBibG9ja1xuIiwKLQkJCQkgICAgICAgX19mdW5jX18pOwotCQkJCWJyZWFrOworCQkJaWYgKCFuaWxmc19jcGZpbGVfaXNfaW5fZmlyc3QoY3BmaWxlLCBjbm8pKSB7CisJCQkJY291bnQgPQorCQkJCSAgbmlsZnNfY3BmaWxlX2Jsb2NrX3N1Yl92YWxpZF9jaGVja3BvaW50cygKKwkJCQkJCWNwZmlsZSwgY3BfYmgsIGthZGRyLCBuaWNwcyk7CisJCQkJaWYgKGNvdW50ID09IDApIHsKKwkJCQkJLyogbWFrZSBob2xlICovCisJCQkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJCQkJYnJlbHNlKGNwX2JoKTsKKwkJCQkJcmV0ID0KKwkJCQkJICBuaWxmc19jcGZpbGVfZGVsZXRlX2NoZWNrcG9pbnRfYmxvY2soCisJCQkJCQkJCSAgIGNwZmlsZSwgY25vKTsKKwkJCQkJaWYgKHJldCA9PSAwKQorCQkJCQkJY29udGludWU7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIiVzOiBjYW5ub3QgZGVsZXRlIGJsb2NrXG4iLAorCQkJCQkgICAgICAgX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2RpcmVjdC5jIGIvZnMvbmlsZnMyL2RpcmVjdC5jCmluZGV4IGQzNjlhYzcuLjIzNjc1M2QgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9kaXJlY3QuYworKysgYi9mcy9uaWxmczIvZGlyZWN0LmMKQEAgLTUxLDExICs1MSwxMSBAQAogCXN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdDsKIAlfX3U2NCBwdHI7CiAKLQlkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7Ci0JaWYgKChrZXkgPiBOSUxGU19ESVJFQ1RfS0VZX01BWCkgfHwKLQkgICAgKGxldmVsICE9IDEpIHx8CS8qIFhYWDogdXNlIG1hY3JvIGZvciBsZXZlbCAxICovCi0JICAgICgocHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpKSA9PQotCSAgICAgTklMRlNfQk1BUF9JTlZBTElEX1BUUikpCisJZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOyAgLyogWFhYOiB1c2UgbWFjcm8gZm9yIGxldmVsIDEgKi8KKwlpZiAoa2V5ID4gTklMRlNfRElSRUNUX0tFWV9NQVggfHwgbGV2ZWwgIT0gMSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpOworCWlmIChwdHIgPT0gTklMRlNfQk1BUF9JTlZBTElEX1BUUikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlpZiAocHRycCAhPSBOVUxMKQpAQCAtNzMsOSArNzMsMTAgQEAKIAlzZWN0b3JfdCBibG9ja25yOwogCWludCByZXQsIGNudDsKIAotCWlmIChrZXkgPiBOSUxGU19ESVJFQ1RfS0VZX01BWCB8fAotCSAgICAocHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpKSA9PQotCSAgICBOSUxGU19CTUFQX0lOVkFMSURfUFRSKQorCWlmIChrZXkgPiBOSUxGU19ESVJFQ1RfS0VZX01BWCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpOworCWlmIChwdHIgPT0gTklMRlNfQk1BUF9JTlZBTElEX1BUUikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKSB7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW9jdGwuYyBiL2ZzL25pbGZzMi9pb2N0bC5jCmluZGV4IGY2YWY3NjAuLmQ2YjJiODMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pb2N0bC5jCisrKyBiL2ZzL25pbGZzMi9pb2N0bC5jCkBAIC00ODAsNyArNDgwLDcgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKIAlzdHJ1Y3QgbmlsZnNfYXJndiBhcmd2WzVdOwotCWNvbnN0IHN0YXRpYyBzaXplX3QgYXJnc3pbNV0gPSB7CisJc3RhdGljIGNvbnN0IHNpemVfdCBhcmdzels1XSA9IHsKIAkJc2l6ZW9mKHN0cnVjdCBuaWxmc192ZGVzYyksCiAJCXNpemVvZihzdHJ1Y3QgbmlsZnNfcGVyaW9kKSwKIAkJc2l6ZW9mKF9fdTY0KSwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL0tjb25maWcgYi9mcy9vY2ZzMi9LY29uZmlnCmluZGV4IDcwMWI3YTMuLjBkODQwNjYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL0tjb25maWcKKysrIGIvZnMvb2NmczIvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgUVVPVEEKIAlzZWxlY3QgUVVPVEFfVFJFRQorCXNlbGVjdCBGU19QT1NJWF9BQ0wKIAloZWxwCiAJICBPQ0ZTMiBpcyBhIGdlbmVyYWwgcHVycG9zZSBleHRlbnQgYmFzZWQgc2hhcmVkIGRpc2sgY2x1c3RlciBmaWxlCiAJICBzeXN0ZW0gd2l0aCBtYW55IHNpbWlsYXJpdGllcyB0byBleHQzLiBJdCBzdXBwb3J0cyA2NCBiaXQgaW5vZGUKQEAgLTc0LDEyICs3NSwzIEBACiAJICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBleHBlbnNpdmUgY29uc2lzdGVuY3kgY2hlY2tzLiBFbmFibGUKIAkgIHRoaXMgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgb25seSBhcyBpdCBpcyBsaWtlbHkgdG8gZGVjcmVhc2UKIAkgIHBlcmZvcm1hbmNlIG9mIHRoZSBmaWxlc3lzdGVtLgotCi1jb25maWcgT0NGUzJfRlNfUE9TSVhfQUNMCi0JYm9vbCAiT0NGUzIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiBPQ0ZTMl9GUwotCXNlbGVjdCBGU19QT1NJWF9BQ0wKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCi0JICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9NYWtlZmlsZSBiL2ZzL29jZnMyL01ha2VmaWxlCmluZGV4IDMxZjI1Y2UuLjYwMGQyZDIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL01ha2VmaWxlCisrKyBiL2ZzL29jZnMyL01ha2VmaWxlCkBAIC0zOSwxMSArMzksOCBAQAogCXZlci5vCQkJXAogCXF1b3RhX2xvY2FsLm8JCVwKIAlxdW90YV9nbG9iYWwubwkJXAotCXhhdHRyLm8KLQotaWZlcSAoJChDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMKSx5KQotb2NmczItb2JqcyArPSBhY2wubwotZW5kaWYKKwl4YXR0ci5vCQkJXAorCWFjbC5vCiAKIG9jZnMyX3N0YWNrZ2x1ZS1vYmpzIDo9IHN0YWNrZ2x1ZS5vCiBvY2ZzMl9zdGFja19vMmNiLW9ianMgOj0gc3RhY2tfbzJjYi5vCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IGUzZTQ3NDEuLjA1MDE5NzQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5jCisrKyBiL2ZzL29jZnMyL2FjbC5jCkBAIC05OCwxNSArOTgsMTEgQEAKIAkJCQkJICAgICAgaW50IHR5cGUsCiAJCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCiB7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAJaW50IG5hbWVfaW5kZXg7CiAJY2hhciAqdmFsdWUgPSBOVUxMOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgcmV0dmFsOwogCi0JaWYgKCEob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX1BPU0lYX0FDTCkpCi0JCXJldHVybiBOVUxMOwotCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CiAJCW5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaAppbmRleCA4ZjYzODllLi41YzVkMzFmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hY2wuaAorKysgYi9mcy9vY2ZzMi9hY2wuaApAQCAtMjYsOCArMjYsNiBAQAogCV9fbGUzMiBlX2lkOwogfTsKIAotI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0wKLQogZXh0ZXJuIGludCBvY2ZzMl9jaGVja19hY2woc3RydWN0IGlub2RlICosIGludCk7CiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKQEAgLTM1LDI0ICszMyw0IEBACiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOwogCi0jZWxzZSAvKiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMKi8KLQotI2RlZmluZSBvY2ZzMl9jaGVja19hY2wgTlVMTAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKLQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCi0JCQkJIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAotCQkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYykKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0wqLwotCiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IGZiNGU2NzIuLmQxN2JkYzcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmMKKysrIGIvZnMvb2NmczIvYWxsb2MuYwpAQCAtMTc2NSw5ICsxNzY1LDkgQEAKICAqCiAgKiBUaGUgYXJyYXkgaW5kZXggb2YgdGhlIHN1YnRyZWUgcm9vdCBpcyBwYXNzZWQgYmFjay4KICAqLwotc3RhdGljIGludCBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAotCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0LAotCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodCkKK2ludCBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0LAorCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodCkKIHsKIAlpbnQgaSA9IDA7CiAKQEAgLTI4NzIsOCArMjg3Miw4IEBACiAgKiBUaGlzIGxvb2tzIHNpbWlsYXIsIGJ1dCBpcyBzdWJ0bHkgZGlmZmVyZW50IHRvCiAgKiBvY2ZzMl9maW5kX2Nwb3NfZm9yX2xlZnRfbGVhZigpLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCQkgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLCB1MzIgKmNwb3MpCitpbnQgb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsIHUzMiAqY3BvcykKIHsKIAlpbnQgaSwgaiwgcmV0ID0gMDsKIAl1NjQgYmxrbm87CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5oIGIvZnMvb2NmczIvYWxsb2MuaAppbmRleCA5YzEyMmQ1Ny4uMWRiNDM1OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9hbGxvYy5oCkBAIC0zMTcsNCArMzE3LDkgQEAKIGludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKTsKK2ludCBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgdTMyICpjcG9zKTsKK2ludCBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0LAorCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodCk7CiAjZW5kaWYgLyogT0NGUzJfQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggYzQ1MmQxMS4uZWRhNWI4YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0xNzYsNyArMTc2LDggQEAKIAogc3RhdGljIHZvaWQgbzJoYl9hcm1fd3JpdGVfdGltZW91dChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKIHsKLQltbG9nKDAsICJRdWV1ZSB3cml0ZSB0aW1lb3V0IGZvciAldSBtc1xuIiwgTzJIQl9NQVhfV1JJVEVfVElNRU9VVF9NUyk7CisJbWxvZyhNTF9IRUFSVEJFQVQsICJRdWV1ZSB3cml0ZSB0aW1lb3V0IGZvciAldSBtc1xuIiwKKwkgICAgIE8ySEJfTUFYX1dSSVRFX1RJTUVPVVRfTVMpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcmVnLT5ocl93cml0ZV90aW1lb3V0X3dvcmspOwogCXJlZy0+aHJfbGFzdF90aW1lb3V0X3N0YXJ0ID0gamlmZmllczsKQEAgLTg3NCw3ICs4NzUsOCBAQAogCQlkb19nZXR0aW1lb2ZkYXkoJmFmdGVyX2hiKTsKIAkJZWxhcHNlZF9tc2VjID0gbzJoYl9lbGFwc2VkX21zZWNzKCZiZWZvcmVfaGIsICZhZnRlcl9oYik7CiAKLQkJbWxvZygwLCAic3RhcnQgPSAlbHUuJWx1LCBlbmQgPSAlbHUuJWx1LCBtc2VjID0gJXVcbiIsCisJCW1sb2coTUxfSEVBUlRCRUFULAorCQkgICAgICJzdGFydCA9ICVsdS4lbHUsIGVuZCA9ICVsdS4lbHUsIG1zZWMgPSAldVxuIiwKIAkJICAgICBiZWZvcmVfaGIudHZfc2VjLCAodW5zaWduZWQgbG9uZykgYmVmb3JlX2hiLnR2X3VzZWMsCiAJCSAgICAgYWZ0ZXJfaGIudHZfc2VjLCAodW5zaWduZWQgbG9uZykgYWZ0ZXJfaGIudHZfdXNlYywKIAkJICAgICBlbGFwc2VkX21zZWMpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jIGIvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCmluZGV4IDdlZTYxODguLmM4MTE0MmUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKQEAgLTM1LDYgKzM1LDEwIEBACiAgKiBjbHVzdGVyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB3aGVyZSBub2RlcyBhcmUgbG9va2VkIHVwICovCiBzdHJ1Y3QgbzJubV9jbHVzdGVyICpvMm5tX3NpbmdsZV9jbHVzdGVyID0gTlVMTDsKIAorY2hhciAqbzJubV9mZW5jZV9tZXRob2RfZGVzY1tPMk5NX0ZFTkNFX01FVEhPRFNdID0geworCQkicmVzZXQiLAkvKiBPMk5NX0ZFTkNFX1JFU0VUICovCisJCSJwYW5pYyIsCS8qIE8yTk1fRkVOQ0VfUEFOSUMgKi8KK307CiAKIHN0cnVjdCBvMm5tX25vZGUgKm8ybm1fZ2V0X25vZGVfYnlfbnVtKHU4IG5vZGVfbnVtKQogewpAQCAtNTc5LDYgKzU4Myw0MyBAQAogCXJldHVybiBvMm5tX2NsdXN0ZXJfYXR0cl93cml0ZShwYWdlLCBjb3VudCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsdXN0ZXItPmNsX3JlY29ubmVjdF9kZWxheV9tcyk7CiB9CisKK3N0YXRpYyBzc2l6ZV90IG8ybm1fY2x1c3Rlcl9hdHRyX2ZlbmNlX21ldGhvZF9yZWFkKAorCXN0cnVjdCBvMm5tX2NsdXN0ZXIgKmNsdXN0ZXIsIGNoYXIgKnBhZ2UpCit7CisJc3NpemVfdCByZXQgPSAwOworCisJaWYgKGNsdXN0ZXIpCisJCXJldCA9IHNwcmludGYocGFnZSwgIiVzXG4iLAorCQkJICAgICAgbzJubV9mZW5jZV9tZXRob2RfZGVzY1tjbHVzdGVyLT5jbF9mZW5jZV9tZXRob2RdKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBvMm5tX2NsdXN0ZXJfYXR0cl9mZW5jZV9tZXRob2Rfd3JpdGUoCisJc3RydWN0IG8ybm1fY2x1c3RlciAqY2x1c3RlciwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHBhZ2VbY291bnQgLSAxXSAhPSAnXG4nKQorCQlnb3RvIGJhaWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTzJOTV9GRU5DRV9NRVRIT0RTOyArK2kpIHsKKwkJaWYgKGNvdW50ICE9IHN0cmxlbihvMm5tX2ZlbmNlX21ldGhvZF9kZXNjW2ldKSArIDEpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cm5jYXNlY21wKHBhZ2UsIG8ybm1fZmVuY2VfbWV0aG9kX2Rlc2NbaV0sIGNvdW50IC0gMSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNsdXN0ZXItPmNsX2ZlbmNlX21ldGhvZCAhPSBpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJvY2ZzMjogQ2hhbmdpbmcgZmVuY2UgbWV0aG9kIHRvICVzXG4iLAorCQkJICAgICAgIG8ybm1fZmVuY2VfbWV0aG9kX2Rlc2NbaV0pOworCQkJY2x1c3Rlci0+Y2xfZmVuY2VfbWV0aG9kID0gaTsKKwkJfQorCQlyZXR1cm4gY291bnQ7CisJfQorCitiYWlsOgorCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgc3RydWN0IG8ybm1fY2x1c3Rlcl9hdHRyaWJ1dGUgbzJubV9jbHVzdGVyX2F0dHJfaWRsZV90aW1lb3V0X21zID0gewogCS5hdHRyCT0geyAuY2Ffb3duZXIgPSBUSElTX01PRFVMRSwKIAkJICAgIC5jYV9uYW1lID0gImlkbGVfdGltZW91dF9tcyIsCkBAIC02MDMsMTAgKzY0NCwxOSBAQAogCS5zdG9yZQk9IG8ybm1fY2x1c3Rlcl9hdHRyX3JlY29ubmVjdF9kZWxheV9tc193cml0ZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbzJubV9jbHVzdGVyX2F0dHJpYnV0ZSBvMm5tX2NsdXN0ZXJfYXR0cl9mZW5jZV9tZXRob2QgPSB7CisJLmF0dHIJPSB7IC5jYV9vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICAgLmNhX25hbWUgPSAiZmVuY2VfbWV0aG9kIiwKKwkJICAgIC5jYV9tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKKwkuc2hvdwk9IG8ybm1fY2x1c3Rlcl9hdHRyX2ZlbmNlX21ldGhvZF9yZWFkLAorCS5zdG9yZQk9IG8ybm1fY2x1c3Rlcl9hdHRyX2ZlbmNlX21ldGhvZF93cml0ZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpvMm5tX2NsdXN0ZXJfYXR0cnNbXSA9IHsKIAkmbzJubV9jbHVzdGVyX2F0dHJfaWRsZV90aW1lb3V0X21zLmF0dHIsCiAJJm8ybm1fY2x1c3Rlcl9hdHRyX2tlZXBhbGl2ZV9kZWxheV9tcy5hdHRyLAogCSZvMm5tX2NsdXN0ZXJfYXR0cl9yZWNvbm5lY3RfZGVsYXlfbXMuYXR0ciwKKwkmbzJubV9jbHVzdGVyX2F0dHJfZmVuY2VfbWV0aG9kLmF0dHIsCiAJTlVMTCwKIH07CiBzdGF0aWMgc3NpemVfdCBvMm5tX2NsdXN0ZXJfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCkBAIC03NzgsNiArODI4LDcgQEAKIAljbHVzdGVyLT5jbF9yZWNvbm5lY3RfZGVsYXlfbXMgPSBPMk5FVF9SRUNPTk5FQ1RfREVMQVlfTVNfREVGQVVMVDsKIAljbHVzdGVyLT5jbF9pZGxlX3RpbWVvdXRfbXMgICAgPSBPMk5FVF9JRExFX1RJTUVPVVRfTVNfREVGQVVMVDsKIAljbHVzdGVyLT5jbF9rZWVwYWxpdmVfZGVsYXlfbXMgPSBPMk5FVF9LRUVQQUxJVkVfREVMQVlfTVNfREVGQVVMVDsKKwljbHVzdGVyLT5jbF9mZW5jZV9tZXRob2QgICAgICAgPSBPMk5NX0ZFTkNFX1JFU0VUOwogCiAJcmV0ID0gJmNsdXN0ZXItPmNsX2dyb3VwOwogCW8ybm1fc2luZ2xlX2NsdXN0ZXIgPSBjbHVzdGVyOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5oIGIvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5oCmluZGV4IGM5OTJlYTAuLjA5ZWEyZDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmgKQEAgLTMzLDYgKzMzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIAorZW51bSBvMm5tX2ZlbmNlX21ldGhvZCB7CisJTzJOTV9GRU5DRV9SRVNFVAk9IDAsCisJTzJOTV9GRU5DRV9QQU5JQywKKwlPMk5NX0ZFTkNFX01FVEhPRFMsCS8qIE51bWJlciBvZiBmZW5jZSBtZXRob2RzICovCit9OworCiBzdHJ1Y3QgbzJubV9ub2RlIHsKIAlzcGlubG9ja190CQluZF9sb2NrOwogCXN0cnVjdCBjb25maWdfaXRlbQluZF9pdGVtOwpAQCAtNTgsNiArNjQsNyBAQAogCXVuc2lnbmVkIGludAkJY2xfaWRsZV90aW1lb3V0X21zOwogCXVuc2lnbmVkIGludAkJY2xfa2VlcGFsaXZlX2RlbGF5X21zOwogCXVuc2lnbmVkIGludAkJY2xfcmVjb25uZWN0X2RlbGF5X21zOworCWVudW0gbzJubV9mZW5jZV9tZXRob2QJY2xfZmVuY2VfbWV0aG9kOwogCiAJLyogdGhpcyBiaXRtYXAgaXMgcGFydCBvZiBhIGhhY2sgZm9yIGRpc2sgYml0bWFwLi4gd2lsbCBnbyBldmVudHVhbGx5LiAtIHphYiAqLwogCXVuc2lnbmVkIGxvbmcJY2xfbm9kZXNfYml0bWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3F1b3J1bS5jCmluZGV4IGJiYWNmN2QuLjYzOTAyNDAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9xdW9ydW0uYwpAQCAtNzQsOCArNzQsMjAgQEAKIAkgKiB0aHJlYWRzIGNhbiBzdGlsbCBzY2hlZHVsZSwgZXRjLCBldGMgKi8KIAlvMmhiX3N0b3BfYWxsX3JlZ2lvbnMoKTsKIAotCXByaW50aygib2NmczIgaXMgdmVyeSBzb3JyeSB0byBiZSBmZW5jaW5nIHRoaXMgc3lzdGVtIGJ5IHJlc3RhcnRpbmdcbiIpOwotCWVtZXJnZW5jeV9yZXN0YXJ0KCk7CisJc3dpdGNoIChvMm5tX3NpbmdsZV9jbHVzdGVyLT5jbF9mZW5jZV9tZXRob2QpIHsKKwljYXNlIE8yTk1fRkVOQ0VfUEFOSUM6CisJCXBhbmljKCIqKiogb2NmczIgaXMgdmVyeSBzb3JyeSB0byBiZSBmZW5jaW5nIHRoaXMgc3lzdGVtIGJ5ICIKKwkJICAgICAgInBhbmljaW5nICoqKlxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04obzJubV9zaW5nbGVfY2x1c3Rlci0+Y2xfZmVuY2VfbWV0aG9kID49CisJCQlPMk5NX0ZFTkNFX01FVEhPRFMpOworCWNhc2UgTzJOTV9GRU5DRV9SRVNFVDoKKwkJcHJpbnRrKEtFUk5fRVJSICIqKiogb2NmczIgaXMgdmVyeSBzb3JyeSB0byBiZSBmZW5jaW5nIHRoaXMgIgorCQkgICAgICAgInN5c3RlbSBieSByZXN0YXJ0aW5nICoqKlxuIik7CisJCWVtZXJnZW5jeV9yZXN0YXJ0KCk7CisJCWJyZWFrOworCX07CiB9CiAKIC8qIEluZGljYXRlIHRoYXQgYSB0aW1lb3V0IG9jY3VyZWQgb24gYSBoZWFyYmVhdCByZWdpb24gd3JpdGUuIFRoZQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCBkOWZhM2QyLi4yZjllNGUxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtMjU4OSw2ICsyNTg5LDE0IEBACiAJCQkgICAgICJiZWdpbiByZWNvIG1zZyAoJWQpXG4iLCBkbG0tPm5hbWUsIG5vZGVudW0sIHJldCk7CiAJCQlyZXQgPSAwOwogCQl9CisJCWlmIChyZXQgPT0gLUVBR0FJTikgeworCQkJbWxvZygwLCAiJXM6IHRyeWluZyB0byBzdGFydCByZWNvdmVyeSBvZiBub2RlICIKKwkJCSAgICAgIiV1LCBidXQgbm9kZSAldSBpcyB3YWl0aW5nIGZvciBsYXN0IHJlY292ZXJ5ICIKKwkJCSAgICAgInRvIGNvbXBsZXRlLCBiYWNrb2ZmIGZvciBhIGJpdFxuIiwgZGxtLT5uYW1lLAorCQkJICAgICBkZWFkX25vZGUsIG5vZGVudW0pOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHJldHJ5OworCQl9CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKIAkJCS8qIHRoaXMgaXMgbm93IGEgc2VyaW91cyBwcm9ibGVtLCBwb3NzaWJseSBFTk9NRU0gCkBAIC0yNjA4LDE0ICsyNjE2LDYgQEAKIAkJCSAqIGFub3RoZXIgRU5PTUVNICovCiAJCQltc2xlZXAoMTAwKTsKIAkJCWdvdG8gcmV0cnk7Ci0JCX0gZWxzZSBpZiAocmV0ID09IEVBR0FJTikgewotCQkJbWxvZygwLCAiJXM6IHRyeWluZyB0byBzdGFydCByZWNvdmVyeSBvZiBub2RlICIKLQkJCSAgICAgIiV1LCBidXQgbm9kZSAldSBpcyB3YWl0aW5nIGZvciBsYXN0IHJlY292ZXJ5ICIKLQkJCSAgICAgInRvIGNvbXBsZXRlLCBiYWNrb2ZmIGZvciBhIGJpdFxuIiwgZGxtLT5uYW1lLAotCQkJICAgICBkZWFkX25vZGUsIG5vZGVudW0pOwotCQkJLyogVE9ETyBMb29rIGludG8gcmVwbGFjaW5nIG1zbGVlcCB3aXRoIGNvbmRfcmVzY2hlZCgpICovCi0JCQltc2xlZXAoMTAwKTsKLQkJCWdvdG8gcmV0cnk7CiAJCX0KIAl9CiAKQEAgLTI2MzksNyArMjYzOSw3IEBACiAJCSAgICAgZGxtLT5uYW1lLCBici0+bm9kZV9pZHgsIGJyLT5kZWFkX25vZGUsCiAJCSAgICAgZGxtLT5yZWNvLmRlYWRfbm9kZSwgZGxtLT5yZWNvLm5ld19tYXN0ZXIpOwogCQlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7Ci0JCXJldHVybiBFQUdBSU47CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYyBiL2ZzL29jZnMyL2V4dGVudF9tYXAuYwppbmRleCA4NDNkYjY0Li5kMzVhMjdmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKKysrIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiZXh0ZW50X21hcC5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAic3VwZXIuaCIKKyNpbmNsdWRlICJzeW1saW5rLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC03MDMsNiArNzA0LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIFRoZSBvY2ZzMl9maWVtYXBfaW5saW5lKCkgbWF5IGJlIGEgbGl0dGxlIGJpdCBtaXNsZWFkaW5nLCBzaW5jZQorICogaXQgbm90IG9ubHkgaGFuZGxlcyB0aGUgZmllbWFwIGZvciBpbmxpbmVkIGZpbGVzLCBidXQgYWxzbyBkZWFscworICogd2l0aCB0aGUgZmFzdCBzeW1saW5rLCBjYXVzZSB0aGV5IGhhdmUgbm8gZGlmZmVyZW5jZSBmb3IgZXh0ZW50CisgKiBtYXBwaW5nIHBlciBzZS4KKyAqLwogc3RhdGljIGludCBvY2ZzMl9maWVtYXBfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiAJCQkgICAgICAgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKIAkJCSAgICAgICB1NjQgbWFwX3N0YXJ0KQpAQCAtNzE1LDExICs3MjIsMTggQEAKIAlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKIAogCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwotCWlkX2NvdW50ID0gbGUxNl90b19jcHUoZGktPmlkMi5pX2RhdGEuaWRfY291bnQpOworCWlmIChvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKQorCQlpZF9jb3VudCA9IG9jZnMyX2Zhc3Rfc3ltbGlua19jaGFycyhpbm9kZS0+aV9zYik7CisJZWxzZQorCQlpZF9jb3VudCA9IGxlMTZfdG9fY3B1KGRpLT5pZDIuaV9kYXRhLmlkX2NvdW50KTsKIAogCWlmIChtYXBfc3RhcnQgPCBpZF9jb3VudCkgewogCQlwaHlzID0gb2ktPmlwX2Jsa25vIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotCQlwaHlzICs9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSk7CisJCWlmIChvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKQorCQkJcGh5cyArPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIuaV9zeW1saW5rKTsKKwkJZWxzZQorCQkJcGh5cyArPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLAorCQkJCQkgaWQyLmlfZGF0YS5pZF9kYXRhKTsKIAogCQlyZXQgPSBmaWVtYXBfZmlsbF9uZXh0X2V4dGVudChmaWVpbmZvLCAwLCBwaHlzLCBpZF9jb3VudCwKIAkJCQkJICAgICAgZmxhZ3MpOwpAQCAtNzU2LDkgKzc3MCwxMCBAQAogCWRvd25fcmVhZCgmT0NGUzJfSShpbm9kZSktPmlwX2FsbG9jX3NlbSk7CiAKIAkvKgotCSAqIEhhbmRsZSBpbmxpbmUtZGF0YSBzZXBhcmF0ZWx5LgorCSAqIEhhbmRsZSBpbmxpbmUtZGF0YSBhbmQgZmFzdCBzeW1saW5rIHNlcGFyYXRlbHkuCiAJICovCi0JaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgeworCWlmICgoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB8fAorCSAgICBvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSB7CiAJCXJldCA9IG9jZnMyX2ZpZW1hcF9pbmxpbmUoaW5vZGUsIGRpX2JoLCBmaWVpbmZvLCBtYXBfc3RhcnQpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtNzg2LDYgKzgwMSw4IEBACiAJCWZlX2ZsYWdzID0gMDsKIAkJaWYgKHJlYy5lX2ZsYWdzICYgT0NGUzJfRVhUX1VOV1JJVFRFTikKIAkJCWZlX2ZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOOworCQlpZiAocmVjLmVfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkKKwkJCWZlX2ZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfU0hBUkVEOwogCQlpZiAoaXNfbGFzdCkKIAkJCWZlX2ZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfTEFTVDsKIAkJbGVuX2J5dGVzID0gKHU2NClsZTE2X3RvX2NwdShyZWMuZV9sZWFmX2NsdXN0ZXJzKSA8PCBvc2ItPnNfY2x1c3RlcnNpemVfYml0czsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCAzZDMwYTFjLi4wNmNjZjZhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0xNzcyLDcgKzE3NzIsOCBAQAogCQkJCQkgbG9mZl90ICpwcG9zLAogCQkJCQkgc2l6ZV90IGNvdW50LAogCQkJCQkgaW50IGFwcGVuZGluZywKLQkJCQkJIGludCAqZGlyZWN0X2lvKQorCQkJCQkgaW50ICpkaXJlY3RfaW8sCisJCQkJCSBpbnQgKmhhc19yZWZjb3VudCkKIHsKIAlpbnQgcmV0ID0gMCwgbWV0YV9sZXZlbCA9IDA7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKQEAgLTE4MzMsNiArMTgzNCw4IEBACiAJCQkJCQkJICAgICAgIHNhdmVkX3BvcywKIAkJCQkJCQkgICAgICAgY291bnQsCiAJCQkJCQkJICAgICAgICZtZXRhX2xldmVsKTsKKwkJCWlmIChoYXNfcmVmY291bnQpCisJCQkJKmhhc19yZWZjb3VudCA9IDE7CiAJCX0KIAogCQlpZiAocmV0IDwgMCkgewpAQCAtMTg1Niw2ICsxODU5LDEwIEBACiAJCQlicmVhazsKIAkJfQogCisJCWlmIChoYXNfcmVmY291bnQgJiYgKmhhc19yZWZjb3VudCA9PSAxKSB7CisJCQkqZGlyZWN0X2lvID0gMDsKKwkJCWJyZWFrOworCQl9CiAJCS8qCiAJCSAqIEFsbG93aW5nIGNvbmN1cnJlbnQgZGlyZWN0IHdyaXRlcyBtZWFucwogCQkgKiBpX3NpemUgY2hhbmdlcyB3b3VsZG4ndCBiZSBzeW5jaHJvbml6ZWQsIHNvCkBAIC0xODk5LDcgKzE5MDYsNyBAQAogCQkJCSAgICBsb2ZmX3QgcG9zKQogewogCWludCByZXQsIGRpcmVjdF9pbywgYXBwZW5kaW5nLCByd19sZXZlbCwgaGF2ZV9hbGxvY19zZW0gID0gMDsKLQlpbnQgY2FuX2RvX2RpcmVjdDsKKwlpbnQgY2FuX2RvX2RpcmVjdCwgaGFzX3JlZmNvdW50ID0gMDsKIAlzc2l6ZV90IHdyaXR0ZW4gPSAwOwogCXNpemVfdCBvY291bnQ7CQkvKiBvcmlnaW5hbCBjb3VudCAqLwogCXNpemVfdCBjb3VudDsJCS8qIGFmdGVyIGZpbGUgbGltaXQgY2hlY2tzICovCkBAIC0xOTQyLDcgKzE5NDksNyBAQAogCWNhbl9kb19kaXJlY3QgPSBkaXJlY3RfaW87CiAJcmV0ID0gb2NmczJfcHJlcGFyZV9pbm9kZV9mb3Jfd3JpdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgcHBvcywKIAkJCQkJICAgIGlvY2ItPmtpX2xlZnQsIGFwcGVuZGluZywKLQkJCQkJICAgICZjYW5fZG9fZGlyZWN0KTsKKwkJCQkJICAgICZjYW5fZG9fZGlyZWN0LCAmaGFzX3JlZmNvdW50KTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMjAwNiwxNCArMjAxMywxNiBAQAogCS8qIGJ1ZmZlcmVkIGFpbyB3b3VsZG4ndCBoYXZlIHByb3BlciBsb2NrIGNvdmVyYWdlIHRvZGF5ICovCiAJQlVHX09OKHJldCA9PSAtRUlPQ0JRVUVVRUQgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKTsKIAotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMgJiYgIWRpcmVjdF9pbykgfHwgSVNfU1lOQyhpbm9kZSkpIHsKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DICYmICFkaXJlY3RfaW8pIHx8IElTX1NZTkMoaW5vZGUpIHx8CisJICAgIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QgJiYgaGFzX3JlZmNvdW50KSkgewogCQlyZXQgPSBmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoZmlsZS0+Zl9tYXBwaW5nLCBwb3MsCiAJCQkJCSAgICAgICBwb3MgKyBjb3VudCAtIDEpOwogCQlpZiAocmV0IDwgMCkKIAkJCXdyaXR0ZW4gPSByZXQ7CiAKIAkJaWYgKCFyZXQgJiYgKG9sZF9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSB8fAotCQkgICAgb2xkX2NsdXN0ZXJzICE9IE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycykpIHsKKwkJICAgIG9sZF9jbHVzdGVycyAhPSBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgfHwKKwkJICAgIGhhc19yZWZjb3VudCkpIHsKIAkJCXJldCA9IGpiZDJfam91cm5hbF9mb3JjZV9jb21taXQob3NiLT5qb3VybmFsLT5qX2pvdXJuYWwpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJd3JpdHRlbiA9IHJldDsKQEAgLTIwNjIsNyArMjA3MSw3IEBACiAJaW50IHJldDsKIAogCXJldCA9IG9jZnMyX3ByZXBhcmVfaW5vZGVfZm9yX3dyaXRlKG91dC0+Zl9wYXRoLmRlbnRyeSwJJnNkLT5wb3MsCi0JCQkJCSAgICBzZC0+dG90YWxfbGVuLCAwLCBOVUxMKTsKKwkJCQkJICAgIHNkLT50b3RhbF9sZW4sIDAsIE5VTEwsIE5VTEwpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IGYwMTBiMjIuLjUwZmIyNmEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMjEwOCw2ICsyMTA4LDcgQEAKIAl9CiAJZGlkX3F1b3RhX2lub2RlID0gMTsKIAorCWlub2RlLT5pX25saW5rID0gMDsKIAkvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi8KIAlzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLAogCQkJCSAgICAwLCAmbmV3X2RpX2JoLCBwYXJlbnRfZGlfYmgsIGhhbmRsZSwKQEAgLTIxMzYsNiArMjEzNyw3IEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAorCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKIGxlYXZlOgogCWlmIChzdGF0dXMgPCAwICYmIGRpZF9xdW90YV9pbm9kZSkKIAkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwpAQCAtMjI2Nyw2ICsyMjY5LDggQEAKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKIAlsZTMyX2FkZF9jcHUoJmRpLT5pX2ZsYWdzLCAtT0NGUzJfT1JQSEFORURfRkwpOwogCWRpLT5pX29ycGhhbmVkX3Nsb3QgPSAwOworCWlub2RlLT5pX25saW5rID0gMTsKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZGksIGlub2RlLT5pX25saW5rKTsKIAlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOwogCiAJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKQEAgLTIyODQsNyArMjI4OCw2IEBACiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKLQlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAJZGVudHJ5LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlzdGF0dXMgPSAwOwpAQCAtMjMyNiw0ICsyMzI5LDUgQEAKIAkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAogCS5saXN0eGF0dHIJPSBvY2ZzMl9saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKKwkuZmllbWFwICAgICAgICAgPSBvY2ZzMl9maWVtYXAsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggZDk2M2Q4Ni4uOTM2MmVlYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC0yNDUsOSArMjQ1LDExIEBACiAJT0NGUzJfTU9VTlRfTE9DQUxGTE9DS1MgPSAxIDw8IDUsIC8qIE5vIGNsdXN0ZXIgYXdhcmUgdXNlciBmaWxlIGxvY2tzICovCiAJT0NGUzJfTU9VTlRfTk9VU0VSWEFUVFIgPSAxIDw8IDYsIC8qIE5vIHVzZXIgeGF0dHIgKi8KIAlPQ0ZTMl9NT1VOVF9JTk9ERTY0ID0gMSA8PCA3LAkvKiBBbGxvdyBpbm9kZSBudW1iZXJzID4gMl4zMiAqLwotCU9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgPDwgOCwJLyogUE9TSVggYWNjZXNzIGNvbnRyb2wgbGlzdHMgKi8KLQlPQ0ZTMl9NT1VOVF9VU1JRVU9UQSA9IDEgPDwgOSwgLyogV2Ugc3VwcG9ydCB1c2VyIHF1b3RhcyAqLwotCU9DRlMyX01PVU5UX0dSUFFVT1RBID0gMSA8PCAxMCwgLyogV2Ugc3VwcG9ydCBncm91cCBxdW90YXMgKi8KKwlPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgPSAxIDw8IDgsCS8qIEZvcmNlIFBPU0lYIGFjY2VzcyBjb250cm9sIGxpc3RzICovCisJT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMID0gMSA8PCA5LAkvKiBEaXNhYmxlIFBPU0lYIGFjY2VzcworCQkJCQkJICAgY29udHJvbCBsaXN0cyAqLworCU9DRlMyX01PVU5UX1VTUlFVT1RBID0gMSA8PCAxMCwgLyogV2Ugc3VwcG9ydCB1c2VyIHF1b3RhcyAqLworCU9DRlMyX01PVU5UX0dSUFFVT1RBID0gMSA8PCAxMSwgLyogV2Ugc3VwcG9ydCBncm91cCBxdW90YXMgKi8KIH07CiAKICNkZWZpbmUgT0NGUzJfT1NCX1NPRlRfUk8JCQkweDAwMDEKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyX2ZzLmggYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCmluZGV4IGU5NDMxZTQuLjFhMWE2NzkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyX2ZzLmgKKysrIGIvZnMvb2NmczIvb2NmczJfZnMuaApAQCAtMTIwMiw3ICsxMjAyLDcgQEAKIC8qIEhlYWRlciBvZiBvbmUgY2h1bmsgb2YgYSBxdW90YSBmaWxlICovCiBzdHJ1Y3Qgb2NmczJfbG9jYWxfZGlza19jaHVuayB7CiAJX19sZTMyIGRxY19mcmVlOwkvKiBOdW1iZXIgb2YgZnJlZSBlbnRyaWVzIGluIHRoZSBiaXRtYXAgKi8KLQl1OCBkcWNfYml0bWFwWzBdOwkvKiBCaXRtYXAgb2YgZW50cmllcyBpbiB0aGUgY29ycmVzcG9uZGluZworCV9fdTggZHFjX2JpdG1hcFswXTsJLyogQml0bWFwIG9mIGVudHJpZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcKIAkJCQkgKiBjaHVuayBvZiBxdW90YSBmaWxlICovCiB9OwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCmluZGV4IDMwOTY3ZTMuLjc0ZGIyYmUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCisrKyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CiB9CiAKLXZvaWQgb2NmczJfa3JlZl9yZW1vdmVfcmVmY291bnRfdHJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3N0YXRpYyB2b2lkIG9jZnMyX2tyZWZfcmVtb3ZlX3JlZmNvdW50X3RyZWUoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUgPQogCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUsIHJmX2dldGNudCk7CkBAIC01MjQsMjMgKzUyNCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZV9ieV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcncsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKipyZXRfdHJlZSwKLQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZWZfYmgpCi17Ci0JaW50IHJldDsKLQl1NjQgcmVmX2Jsa25vOwotCi0JcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X2Jsb2NrKGlub2RlLCAmcmVmX2Jsa25vKTsKLQlpZiAocmV0KSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gb2NmczJfbG9ja19yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgcmVmX2Jsa25vLAotCQkJCQlydywgcmV0X3RyZWUsIHJlZl9iaCk7Ci19Ci0KIHZvaWQgb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUsIGludCBydykKIHsKQEAgLTk2OSw2ICs5NTIsMTAzIEBACiB9CiAKIC8qCisgKiBGaW5kIHRoZSBlbmQgcmFuZ2UgZm9yIGEgbGVhZiByZWZjb3VudCBibG9jayBpbmRpY2F0ZWQgYnkKKyAqIGVsLT5sX3JlY3NbaW5kZXhdLmVfYmxrbm8uCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmNvdW50X2Nwb3NfZW5kKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYiwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKKwkJCQkgICAgICAgaW50IGluZGV4LCAgdTMyICpjcG9zX2VuZCkKK3sKKwlpbnQgcmV0LCBpLCBzdWJ0cmVlX3Jvb3Q7CisJdTMyIGNwb3M7CisJdTY0IGJsa25vOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGggPSBOVUxMLCAqcmlnaHRfcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqdG1wX2VsOworCisJaWYgKGluZGV4IDwgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgYSBleHRlbnQgcmVjIGFmdGVyIGluZGV4LCBzbyBqdXN0IHVzZSB0aGUgZV9jcG9zCisJCSAqIG9mIHRoZSBuZXh0IGV4dGVudCByZWMuCisJCSAqLworCQkqY3Bvc19lbmQgPSBsZTMyX3RvX2NwdShlbC0+bF9yZWNzW2luZGV4KzFdLmVfY3Bvcyk7CisJCXJldHVybiAwOworCX0KKworCWlmICghZWIgfHwgKGViICYmICFlYi0+aF9uZXh0X2xlYWZfYmxrKSkgeworCQkvKgorCQkgKiBXZSBhcmUgdGhlIGxhc3QgZXh0ZW50IHJlYywgc28gYW55IGhpZ2ggY3BvcyBzaG91bGQKKwkJICogYmUgc3RvcmVkIGluIHRoaXMgbGVhZiByZWZjb3VudCBibG9jay4KKwkJICovCisJCSpjcG9zX2VuZCA9IFVJTlRfTUFYOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBleHRlbnQgYmxvY2sgaXNuJ3QgdGhlIGxhc3Qgb25lLCB3ZSBoYXZlIHRvIGZpbmQKKwkgKiB0aGUgc3VidHJlZSByb290IGJldHdlZW4gdGhpcyBleHRlbnQgYmxvY2sgYW5kIHRoZSBuZXh0CisJICogbGVhZiBleHRlbnQgYmxvY2sgYW5kIGdldCB0aGUgY29ycmVzcG9uZGluZyBlX2Nwb3MgZnJvbQorCSAqIHRoZSBzdWJyb290LiBPdGhlcndpc2Ugd2UgbWF5IGNvcnJ1cHQgdGhlIGItdHJlZS4KKwkgKi8KKwlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZldCwgY2ksIHJlZl9yb290X2JoKTsKKworCWxlZnRfcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoJmV0KTsKKwlpZiAoIWxlZnRfcGF0aCkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWNwb3MgPSBsZTMyX3RvX2NwdShlYi0+aF9saXN0LmxfcmVjc1tpbmRleF0uZV9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoY2ksIGxlZnRfcGF0aCwgY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJpZ2h0X3BhdGggPSBvY2ZzMl9uZXdfcGF0aF9mcm9tX3BhdGgobGVmdF9wYXRoKTsKKwlpZiAoIXJpZ2h0X3BhdGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc2IsIGxlZnRfcGF0aCwgJmNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoY2ksIHJpZ2h0X3BhdGgsIGNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzdWJ0cmVlX3Jvb3QgPSBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdCgmZXQsIGxlZnRfcGF0aCwKKwkJCQkJICAgICAgIHJpZ2h0X3BhdGgpOworCisJdG1wX2VsID0gbGVmdF9wYXRoLT5wX25vZGVbc3VidHJlZV9yb290XS5lbDsKKwlibGtubyA9IGxlZnRfcGF0aC0+cF9ub2RlW3N1YnRyZWVfcm9vdCsxXS5iaC0+Yl9ibG9ja25yOworCWZvciAoaSA9IDA7IGkgPCBsZTMyX3RvX2NwdSh0bXBfZWwtPmxfbmV4dF9mcmVlX3JlYyk7IGkrKykgeworCQlpZiAobGU2NF90b19jcHUodG1wX2VsLT5sX3JlY3NbaV0uZV9ibGtubykgPT0gYmxrbm8pIHsKKwkJCSpjcG9zX2VuZCA9IGxlMzJfdG9fY3B1KHRtcF9lbC0+bF9yZWNzW2krMV0uZV9jcG9zKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJQlVHX09OKGkgPT0gbGUzMl90b19jcHUodG1wX2VsLT5sX25leHRfZnJlZV9yZWMpKTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChsZWZ0X3BhdGgpOworCW9jZnMyX2ZyZWVfcGF0aChyaWdodF9wYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogR2l2ZW4gYSBjcG9zIGFuZCBsZW4sIHRyeSB0byBmaW5kIHRoZSByZWZjb3VudCByZWNvcmQgd2hpY2ggY29udGFpbnMgY3Bvcy4KICAqIDEuIElmIGNwb3MgY2FuIGJlIGZvdW5kIGluIG9uZSByZWZjb3VudCByZWNvcmQsIHJldHVybiB0aGUgcmVjb3JkLgogICogMi4gSWYgY3BvcyBjYW4ndCBiZSBmb3VuZCwgcmV0dXJuIGEgZmFrZSByZWNvcmQgd2hpY2ggc3RhcnQgZnJvbSBjcG9zCkBAIC05ODMsMTAgKzEwNjMsMTAgQEAKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9iaCkKIHsKIAlpbnQgcmV0ID0gMCwgaSwgZm91bmQ7Ci0JdTMyIGxvd19jcG9zOworCXUzMiBsb3dfY3BvcywgdW5pbml0aWFsaXplZF92YXIoY3Bvc19lbmQpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWw7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnRtcCwgKnJlYyA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CisJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWIgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMLCAqcmVmX2xlYWZfYmggPSBOVUxMOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOwogCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQpAQCAtMTAzNCwxMiArMTExNCwxNiBAQAogCQl9CiAJfQogCi0JLyogYWRqdXN0IGxlbiB3aGVuIHdlIGhhdmUgb2NmczJfZXh0ZW50X3JlYyBhZnRlciBpdC4gKi8KLQlpZiAoZm91bmQgJiYgaSA8IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMSkgewotCQl0bXAgPSAmZWwtPmxfcmVjc1tpKzFdOworCWlmIChmb3VuZCkgeworCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfY3Bvc19lbmQoY2ksIHJlZl9yb290X2JoLAorCQkJCQkJICBlYiwgZWwsIGksICZjcG9zX2VuZCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLQkJaWYgKGxlMzJfdG9fY3B1KHRtcC0+ZV9jcG9zKSA8IGNwb3MgKyBsZW4pCi0JCQlsZW4gPSBsZTMyX3RvX2NwdSh0bXAtPmVfY3BvcykgLSBjcG9zOworCQlpZiAoY3Bvc19lbmQgPCBsb3dfY3BvcyArIGxlbikKKwkJCWxlbiA9IGNwb3NfZW5kIC0gbG93X2Nwb3M7CiAJfQogCiAJcmV0ID0gb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jayhjaSwgbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKSwKQEAgLTE0MTgsNyArMTUwMiw3IEBACiAKIAkvKiBjaGFuZ2Ugb2xkIGFuZCBuZXcgcmxfdXNlZCBhY2NvcmRpbmdseS4gKi8KIAlsZTE2X2FkZF9jcHUoJnJsLT5ybF91c2VkLCAtbnVtX21vdmVkKTsKLQluZXdfcmwtPnJsX3VzZWQgPSBjcHVfdG9fbGUzMihudW1fbW92ZWQpOworCW5ld19ybC0+cmxfdXNlZCA9IGNwdV90b19sZTE2KG51bV9tb3ZlZCk7CiAKIAlzb3J0KCZybC0+cmxfcmVjcywgbGUxNl90b19jcHUocmwtPnJsX3VzZWQpLAogCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpLApAQCAtMTc5Nyw3ICsxODgxLDggQEAKIAkJcmVjc19uZWVkKys7CiAKIAkvKiBJZiB0aGUgbGVhZiBibG9jayBkb24ndCBoYXZlIGVub3VnaCByZWNvcmQsIGV4cGFuZCBpdC4gKi8KLQlpZiAobGUxNl90b19jcHUocmZfbGlzdC0+cmxfdXNlZCkgKyByZWNzX25lZWQgPiByZl9saXN0LT5ybF9jb3VudCkgeworCWlmIChsZTE2X3RvX2NwdShyZl9saXN0LT5ybF91c2VkKSArIHJlY3NfbmVlZCA+CisJCQkJCSBsZTE2X3RvX2NwdShyZl9saXN0LT5ybF9jb3VudCkpIHsKIAkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyB0bXBfcmVjOwogCQl1NjQgY3BvcyA9IGxlNjRfdG9fY3B1KG9yaWdfcmVjLT5yX2Nwb3MpOwogCQlsZW4gPSBsZTMyX3RvX2NwdShvcmlnX3JlYy0+cl9jbHVzdGVycyk7CkBAIC0xODU5LDcgKzE5NDQsNyBAQAogCQltZW1jcHkodGFpbF9yZWMsIG9yaWdfcmVjLCBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYykpOwogCQlsZTY0X2FkZF9jcHUoJnRhaWxfcmVjLT5yX2Nwb3MsCiAJCQkgICAgIGxlMzJfdG9fY3B1KHRhaWxfcmVjLT5yX2NsdXN0ZXJzKSAtIGxlbik7Ci0JCXRhaWxfcmVjLT5yX2NsdXN0ZXJzID0gbGUzMl90b19jcHUobGVuKTsKKwkJdGFpbF9yZWMtPnJfY2x1c3RlcnMgPSBjcHVfdG9fbGUzMihsZW4pOwogCX0KIAogCS8qCkBAIC0zODQwLDggKzM5MjUsNyBAQAogCX0KIAogCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQoaGFuZGxlLCBldCwgY3BvcywKLQkJCWNwdV90b19sZTY0KG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwKLQkJCQkJCQkgICAgIHBfY2x1c3RlcikpLAorCQkJb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCBwX2NsdXN0ZXIpLAogCQkJbnVtX2NsdXN0ZXJzLCBleHRfZmxhZ3MsIG1ldGFfYWMpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDI1Myw4ICs0MzM3LDggQEAKICAqIEBuZXdfZGVudHJ5OiAgICAgICAgdGFyZ2V0IGRlbnRyeQogICogQHByZXNlcnZlOiAgaWYgdHJ1ZSwgcHJlc2VydmUgYWxsIGZpbGUgYXR0cmlidXRlcwogICovCi1pbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGJvb2wgcHJlc2VydmUpCitzdGF0aWMgaW50IG9jZnMyX3Zmc19yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBib29sIHByZXNlcnZlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrX3VzZXIuYyBiL2ZzL29jZnMyL3N0YWNrX3VzZXIuYwppbmRleCBmZjRjNzk4Li5kYTc4YTJhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdGFja191c2VyLmMKKysrIGIvZnMvb2NmczIvc3RhY2tfdXNlci5jCkBAIC04MTQsNyArODE0LDcgQEAKIHN0YXRpYyBpbnQgdXNlcl9jbHVzdGVyX2Nvbm5lY3Qoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubikKIHsKIAlkbG1fbG9ja3NwYWNlX3QgKmZzZGxtOwotCXN0cnVjdCBvY2ZzMl9saXZlX2Nvbm5lY3Rpb24gKmNvbnRyb2w7CisJc3RydWN0IG9jZnMyX2xpdmVfY29ubmVjdGlvbiAqdW5pbml0aWFsaXplZF92YXIoY29udHJvbCk7CiAJaW50IHJjID0gMDsKIAogCUJVR19PTihjb25uID09IE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggMTRmNDdkMi4uMjYwNjk5MSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0xMDAsNiArMTAwLDggQEAKIHN0YXRpYyBpbnQgb2NmczJfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICpvcHRpb25zLAogCQkJICAgICAgIHN0cnVjdCBtb3VudF9vcHRpb25zICptb3B0LAogCQkJICAgICAgIGludCBpc19yZW1vdW50KTsKK3N0YXRpYyBpbnQgb2NmczJfY2hlY2tfc2V0X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3QgbW91bnRfb3B0aW9ucyAqb3B0aW9ucyk7CiBzdGF0aWMgaW50IG9jZnMyX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIHN0YXRpYyB2b2lkIG9jZnMyX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHN0YXRpYyBpbnQgb2NmczJfbW91bnRfdm9sdW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwpAQCAtNjAwLDcgKzYwMiw4IEBACiAKIAlsb2NrX2tlcm5lbCgpOwogCi0JaWYgKCFvY2ZzMl9wYXJzZV9vcHRpb25zKHNiLCBkYXRhLCAmcGFyc2VkX29wdGlvbnMsIDEpKSB7CisJaWYgKCFvY2ZzMl9wYXJzZV9vcHRpb25zKHNiLCBkYXRhLCAmcGFyc2VkX29wdGlvbnMsIDEpIHx8CisJICAgICFvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzYiwgJnBhcnNlZF9vcHRpb25zKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC02OTEsOCArNjk0LDYgQEAKIAlpZiAoIXJldCkgewogCQkvKiBPbmx5IHNhdmUgb2ZmIHRoZSBuZXcgbW91bnQgb3B0aW9ucyBpbiBjYXNlIG9mIGEgc3VjY2Vzc2Z1bAogCQkgKiByZW1vdW50LiAqLwotCQlpZiAoIShvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKQotCQkJcGFyc2VkX29wdGlvbnMubW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7CiAJCW9zYi0+c19tb3VudF9vcHQgPSBwYXJzZWRfb3B0aW9ucy5tb3VudF9vcHQ7CiAJCW9zYi0+c19hdGltZV9xdWFudHVtID0gcGFyc2VkX29wdGlvbnMuYXRpbWVfcXVhbnR1bTsKIAkJb3NiLT5wcmVmZXJyZWRfc2xvdCA9IHBhcnNlZF9vcHRpb25zLnNsb3Q7CkBAIC03MDEsNiArNzAyLDEwIEBACiAKIAkJaWYgKCFvY2ZzMl9pc19oYXJkX3JlYWRvbmx5KG9zYikpCiAJCQlvY2ZzMl9zZXRfam91cm5hbF9wYXJhbXMob3NiKTsKKworCQlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH5NU19QT1NJWEFDTCkgfAorCQkJKChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/CisJCQkJCQkJTVNfUE9TSVhBQ0wgOiAwKTsKIAl9CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMTAxMSwzMSArMTAxNiwxNiBAQAogCWJyZWxzZShiaCk7CiAJYmggPSBOVUxMOwogCi0JaWYgKCEob3NiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkKLQkJcGFyc2VkX29wdGlvbnMubW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7Ci0KKwlpZiAoIW9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHNiLCAmcGFyc2VkX29wdGlvbnMpKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKKwl9CiAJb3NiLT5zX21vdW50X29wdCA9IHBhcnNlZF9vcHRpb25zLm1vdW50X29wdDsKIAlvc2ItPnNfYXRpbWVfcXVhbnR1bSA9IHBhcnNlZF9vcHRpb25zLmF0aW1lX3F1YW50dW07CiAJb3NiLT5wcmVmZXJyZWRfc2xvdCA9IHBhcnNlZF9vcHRpb25zLnNsb3Q7CiAJb3NiLT5vc2JfY29tbWl0X2ludGVydmFsID0gcGFyc2VkX29wdGlvbnMuY29tbWl0X2ludGVydmFsOwogCW9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzID0gb2NmczJfbWVnYWJ5dGVzX3RvX2NsdXN0ZXJzKHNiLCBwYXJzZWRfb3B0aW9ucy5sb2NhbGFsbG9jX29wdCk7CiAJb3NiLT5sb2NhbF9hbGxvY19iaXRzID0gb3NiLT5sb2NhbF9hbGxvY19kZWZhdWx0X2JpdHM7Ci0JaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9VU1JRVU9UQSAmJgotCSAgICAhT0NGUzJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLAotCQkJCQkgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfVVNSUVVPVEEpKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCW1sb2coTUxfRVJST1IsICJVc2VyIHF1b3RhcyB3ZXJlIHJlcXVlc3RlZCwgYnV0IHRoaXMgIgotCQkgICAgICJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiIpOwotCQlnb3RvIHJlYWRfc3VwZXJfZXJyb3I7Ci0JfQotCWlmIChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfR1JQUVVPVEEgJiYKLQkgICAgIU9DRlMyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKLQkJCQkJIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX0dSUFFVT1RBKSkgewotCQlzdGF0dXMgPSAtRUlOVkFMOwotCQltbG9nKE1MX0VSUk9SLCAiR3JvdXAgcXVvdGFzIHdlcmUgcmVxdWVzdGVkLCBidXQgdGhpcyAiCi0JCSAgICAgImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGUgZmVhdHVyZSBlbmFibGVkLlxuIik7Ci0JCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKLQl9CiAKIAlzdGF0dXMgPSBvY2ZzMl92ZXJpZnlfdXNlcnNwYWNlX3N0YWNrKG9zYiwgJnBhcnNlZF9vcHRpb25zKTsKIAlpZiAoc3RhdHVzKQpAQCAtMTI0NSw2ICsxMjM1LDQwIEBACiAJLm5leHQgICAgICAgICAgID0gTlVMTAogfTsKIAorc3RhdGljIGludCBvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBtb3VudF9vcHRpb25zICpvcHRpb25zKQoreworCWlmIChvcHRpb25zLT5tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9VU1JRVU9UQSAmJgorCSAgICAhT0NGUzJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLAorCQkJCQkgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfVVNSUVVPVEEpKSB7CisJCW1sb2coTUxfRVJST1IsICJVc2VyIHF1b3RhcyB3ZXJlIHJlcXVlc3RlZCwgYnV0IHRoaXMgIgorCQkgICAgICJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9wdGlvbnMtPm1vdW50X29wdCAmIE9DRlMyX01PVU5UX0dSUFFVT1RBICYmCisJICAgICFPQ0ZTMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCisJCQkJCSBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9HUlBRVU9UQSkpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIkdyb3VwIHF1b3RhcyB3ZXJlIHJlcXVlc3RlZCwgYnV0IHRoaXMgIgorCQkgICAgICJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9wdGlvbnMtPm1vdW50X29wdCAmIE9DRlMyX01PVU5UX1BPU0lYX0FDTCAmJgorCSAgICAhT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKSB7CisJCW1sb2coTUxfRVJST1IsICJBQ0wgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgIgorCQkgICAgICJmZWF0dXJlIGlzIG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIE5vIEFDTCBzZXR0aW5nIHNwZWNpZmllZD8gVXNlIFhBVFRSIGZlYXR1cmUuLi4gKi8KKwlpZiAoIShvcHRpb25zLT5tb3VudF9vcHQgJiAoT0NGUzJfTU9VTlRfUE9TSVhfQUNMIHwKKwkJCQkgICAgT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMKSkpIHsKKwkJaWYgKE9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkKKwkJCW9wdGlvbnMtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7CisJCWVsc2UKKwkJCW9wdGlvbnMtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7CisJfQorCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IG9jZnMyX3BhcnNlX29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgICAgICBjaGFyICpvcHRpb25zLAogCQkJICAgICAgIHN0cnVjdCBtb3VudF9vcHRpb25zICptb3B0LApAQCAtMTM5Miw0MCArMTQxNiwxOSBAQAogCQkJbW9wdC0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX0lOT0RFNjQ7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfdXNycXVvdGE6Ci0JCQkvKiBXZSBjaGVjayBvbmx5IG9uIHJlbW91bnQsIG90aGVyd2lzZSBmZWF0dXJlcwotCQkJICogYXJlbid0IHlldCBpbml0aWFsaXplZC4gKi8KLQkJCWlmIChpc19yZW1vdW50ICYmICFPQ0ZTMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCi0JCQkgICAgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfVVNSUVVPVEEpKSB7Ci0JCQkJbWxvZyhNTF9FUlJPUiwgIlVzZXIgcXVvdGEgcmVxdWVzdGVkIGJ1dCAiCi0JCQkJICAgICAiZmlsZXN5c3RlbSBmZWF0dXJlIGlzIG5vdCBzZXRcbiIpOwotCQkJCXN0YXR1cyA9IDA7Ci0JCQkJZ290byBiYWlsOwotCQkJfQogCQkJbW9wdC0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1VTUlFVT1RBOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2dycHF1b3RhOgotCQkJaWYgKGlzX3JlbW91bnQgJiYgIU9DRlMyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKLQkJCSAgICBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9HUlBRVU9UQSkpIHsKLQkJCQltbG9nKE1MX0VSUk9SLCAiR3JvdXAgcXVvdGEgcmVxdWVzdGVkIGJ1dCAiCi0JCQkJICAgICAiZmlsZXN5c3RlbSBmZWF0dXJlIGlzIG5vdCBzZXRcbiIpOwotCQkJCXN0YXR1cyA9IDA7Ci0JCQkJZ290byBiYWlsOwotCQkJfQogCQkJbW9wdC0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX0dSUFFVT1RBOwogCQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTAogCQljYXNlIE9wdF9hY2w6CiAJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfUE9TSVhfQUNMOworCQkJbW9wdC0+bW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9hY2w6CisJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMOwogCQkJbW9wdC0+bW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7CiAJCQlicmVhazsKLSNlbHNlCi0JCWNhc2UgT3B0X2FjbDoKLQkJY2FzZSBPcHRfbm9hY2w6Ci0JCQlwcmludGsoS0VSTl9JTkZPICJvY2ZzMiAobm8pYWNsIG9wdGlvbnMgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQlicmVhazsKLSNlbmRpZgogCQlkZWZhdWx0OgogCQkJbWxvZyhNTF9FUlJPUiwKIAkJCSAgICAgIlVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiICIKQEAgLTE1MDIsMTIgKzE1MDUsMTAgQEAKIAlpZiAob3B0cyAmIE9DRlMyX01PVU5UX0lOT0RFNjQpCiAJCXNlcV9wcmludGYocywgIixpbm9kZTY0Iik7CiAKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMCiAJaWYgKG9wdHMgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpCiAJCXNlcV9wcmludGYocywgIixhY2wiKTsKIAllbHNlCiAJCXNlcV9wcmludGYocywgIixub2FjbCIpOwotI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N5bWxpbmsuYyBiL2ZzL29jZnMyL3N5bWxpbmsuYwppbmRleCBlMzQyMTAzLi40OWIxMzNjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zeW1saW5rLmMKKysrIGIvZnMvb2NmczIvc3ltbGluay5jCkBAIC0xNjMsNiArMTYzLDcgQEAKIAkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAogCS5saXN0eGF0dHIJPSBvY2ZzMl9saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKKwkuZmllbWFwCQk9IG9jZnMyX2ZpZW1hcCwKIH07CiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZGxpbmsJPSBvY2ZzMl9yZWFkbGluaywKQEAgLTE3NCw0ICsxNzUsNSBAQAogCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IG9jZnMyX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAorCS5maWVtYXAJCT0gb2NmczJfZmllbWFwLAogfTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCmluZGV4IDQzYzExNDguLjhmYzZmYjAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmMKKysrIGIvZnMvb2NmczIveGF0dHIuYwpAQCAtOTgsMTAgKzk4LDggQEAKIAogc3RydWN0IHhhdHRyX2hhbmRsZXIgKm9jZnMyX3hhdHRyX2hhbmRsZXJzW10gPSB7CiAJJm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlciwKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMCiAJJm9jZnMyX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciwKIAkmb2NmczJfeGF0dHJfYWNsX2RlZmF1bHRfaGFuZGxlciwKLSNlbmRpZgogCSZvY2ZzMl94YXR0cl90cnVzdGVkX2hhbmRsZXIsCiAJJm9jZnMyX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsCiAJTlVMTApAQCAtMTA5LDEyICsxMDcsMTAgQEAKIAogc3RhdGljIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpvY2ZzMl94YXR0cl9oYW5kbGVyX21hcFtPQ0ZTMl9YQVRUUl9NQVhdID0gewogCVtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXQk9ICZvY2ZzMl94YXR0cl91c2VyX2hhbmRsZXIsCi0jaWZkZWYgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTAogCVtPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTXQogCQkJCQk9ICZvY2ZzMl94YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIsCiAJW09DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUXQogCQkJCQk9ICZvY2ZzMl94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyLAotI2VuZGlmCiAJW09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdCT0gJm9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlciwKIAlbT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFldCT0gJm9jZnMyX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsCiB9OwpAQCAtNjA2NCw3ICs2MDYwLDcgQEAKIAkJICogdG8gdGhlIGV4dGVudCBibG9jaywgc28ganVzdCBjYWxjdWxhdGUgYSBtYXhpbXVtIHJlY29yZCBudW0uCiAJCSAqLwogCQlpZiAoIXh2LT54cl9saXN0LmxfdHJlZV9kZXB0aCkKLQkJCSpudW1fcmVjcyArPSB4di0+eHJfbGlzdC5sX25leHRfZnJlZV9yZWM7CisJCQkqbnVtX3JlY3MgKz0gbGUxNl90b19jcHUoeHYtPnhyX2xpc3QubF9uZXh0X2ZyZWVfcmVjKTsKIAkJZWxzZQogCQkJKm51bV9yZWNzICs9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhzYiwKIAkJCQkJCQkgICAgICBYQVRUUl9TSVpFX01BWCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCAwOGUzNjM4Li5hYmQ3MmE0IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5oCisrKyBiL2ZzL29jZnMyL3hhdHRyLmgKQEAgLTQwLDEwICs0MCw4IEBACiBleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgb2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyOwogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlcjsKIGV4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwotI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0wKIGV4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXI7CiBleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgb2NmczJfeGF0dHJfYWNsX2RlZmF1bHRfaGFuZGxlcjsKLSNlbmRpZgogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpvY2ZzMl94YXR0cl9oYW5kbGVyc1tdOwogCiBzc2l6ZV90IG9jZnMyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBjYTY5MjQxLi4wNDBjZWY3IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC04MjEsMTUgKzgyMSwxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZpbGUgKl9fZGVudHJ5X29wZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKLQkJCQkJaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqZiwKKwkJCQkJc3RydWN0IGZpbGUgKmYsCiAJCQkJCWludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSwKIAkJCQkJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyb3I7CiAKLQlmLT5mX2ZsYWdzID0gZmxhZ3M7Ci0JZi0+Zl9tb2RlID0gKF9fZm9yY2UgZm1vZGVfdCkoKGZsYWdzKzEpICYgT19BQ0NNT0RFKSB8IEZNT0RFX0xTRUVLIHwKKwlmLT5mX21vZGUgPSBPUEVOX0ZNT0RFKGYtPmZfZmxhZ3MpIHwgRk1PREVfTFNFRUsgfAogCQkJCUZNT0RFX1BSRUFEIHwgRk1PREVfUFdSSVRFOwogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWlmIChmLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewpAQCAtOTMwLDcgKzkyOSw2IEBACiAJaWYgKElTX0VSUihkZW50cnkpKQogCQlnb3RvIG91dF9lcnI7CiAJbmQtPmludGVudC5vcGVuLmZpbGUgPSBfX2RlbnRyeV9vcGVuKGRnZXQoZGVudHJ5KSwgbW50Z2V0KG5kLT5wYXRoLm1udCksCi0JCQkJCSAgICAgbmQtPmludGVudC5vcGVuLmZsYWdzIC0gMSwKIAkJCQkJICAgICBuZC0+aW50ZW50Lm9wZW4uZmlsZSwKIAkJCQkJICAgICBvcGVuLCBjcmVkKTsKIG91dDoKQEAgLTk0OSw3ICs5NDcsNyBAQAogICoKICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIHRoZSBvcmlnaW5hbCBuYW1laWRhdGEKICAqLwotc3RydWN0IGZpbGUgKm5hbWVpZGF0YV90b19maWxwKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgZmxhZ3MpCitzdHJ1Y3QgZmlsZSAqbmFtZWlkYXRhX3RvX2ZpbHAoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKQEAgLTk1OCw3ICs5NTYsNyBAQAogCWZpbHAgPSBuZC0+aW50ZW50Lm9wZW4uZmlsZTsKIAkvKiBIYXMgdGhlIGZpbGVzeXN0ZW0gaW5pdGlhbGlzZWQgdGhlIGZpbGUgZm9yIHVzPyAqLwogCWlmIChmaWxwLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCi0JCWZpbHAgPSBfX2RlbnRyeV9vcGVuKG5kLT5wYXRoLmRlbnRyeSwgbmQtPnBhdGgubW50LCBmbGFncywgZmlscCwKKwkJZmlscCA9IF9fZGVudHJ5X29wZW4obmQtPnBhdGguZGVudHJ5LCBuZC0+cGF0aC5tbnQsIGZpbHAsCiAJCQkJICAgICBOVUxMLCBjcmVkKTsKIAllbHNlCiAJCXBhdGhfcHV0KCZuZC0+cGF0aCk7CkBAIC05OTcsNyArOTk1LDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCX0KIAotCXJldHVybiBfX2RlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBmbGFncywgZiwgTlVMTCwgY3JlZCk7CisJZi0+Zl9mbGFncyA9IGZsYWdzOworCXJldHVybiBfX2RlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBmLCBOVUxMLCBjcmVkKTsKIH0KIEVYUE9SVF9TWU1CT0woZGVudHJ5X29wZW4pOwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggNGJhZGRlMS4uZjU2MDMyNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMTM0LDEzICsxMzQsMTYgQEAKICAqIHNpbXBsZSBiaXQgdGVzdHMuCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp0YXNrX3N0YXRlX2FycmF5W10gPSB7Ci0JIlIgKHJ1bm5pbmcpIiwJCS8qICAwICovCi0JIlMgKHNsZWVwaW5nKSIsCQkvKiAgMSAqLwotCSJEIChkaXNrIHNsZWVwKSIsCS8qICAyICovCi0JIlQgKHN0b3BwZWQpIiwJCS8qICA0ICovCi0JIlQgKHRyYWNpbmcgc3RvcCkiLAkvKiAgOCAqLwotCSJaICh6b21iaWUpIiwJCS8qIDE2ICovCi0JIlggKGRlYWQpIgkJLyogMzIgKi8KKwkiUiAocnVubmluZykiLAkJLyogICAwICovCisJIlMgKHNsZWVwaW5nKSIsCQkvKiAgIDEgKi8KKwkiRCAoZGlzayBzbGVlcCkiLAkvKiAgIDIgKi8KKwkiVCAoc3RvcHBlZCkiLAkJLyogICA0ICovCisJInQgKHRyYWNpbmcgc3RvcCkiLAkvKiAgIDggKi8KKwkiWiAoem9tYmllKSIsCQkvKiAgMTYgKi8KKwkiWCAoZGVhZCkiLAkJLyogIDMyICovCisJInggKGRlYWQpIiwJCS8qICA2NCAqLworCSJLICh3YWtla2lsbCkiLAkJLyogMTI4ICovCisJIlcgKHdha2luZykiLAkJLyogMjU2ICovCiB9OwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF90YXNrX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpAQCAtMTQ4LDYgKzE1MSw4IEBACiAJdW5zaWduZWQgaW50IHN0YXRlID0gKHRzay0+c3RhdGUgJiBUQVNLX1JFUE9SVCkgfCB0c2stPmV4aXRfc3RhdGU7CiAJY29uc3QgY2hhciAqKnAgPSAmdGFza19zdGF0ZV9hcnJheVswXTsKIAorCUJVSUxEX0JVR19PTigxICsgaWxvZzIoVEFTS19TVEFURV9NQVgpICE9IEFSUkFZX1NJWkUodGFza19zdGF0ZV9hcnJheSkpOworCiAJd2hpbGUgKHN0YXRlKSB7CiAJCXArKzsKIAkJc3RhdGUgPj49IDE7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCBjZDZiYjlhLi5kZWE4NmFiIDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTMyMyw2ICszMjMsMzAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfbWFya19kcXVvdF9kaXJ0eSk7CiAKKy8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCitzdGF0aWMgaW5saW5lIGludCBtYXJrX2FsbF9kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKiBjb25zdCAqZHF1b3QpCit7CisJaW50IHJldCwgZXJyLCBjbnQ7CisKKwlyZXQgPSBlcnIgPSAwOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoZHF1b3RbY250XSkKKwkJCS8qIEV2ZW4gaW4gY2FzZSBvZiBlcnJvciB3ZSBoYXZlIHRvIGNvbnRpbnVlICovCisJCQlyZXQgPSBtYXJrX2RxdW90X2RpcnR5KGRxdW90W2NudF0pOworCQlpZiAoIWVycikKKwkJCWVyciA9IHJldDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRxcHV0X2FsbChzdHJ1Y3QgZHF1b3QgKipkcXVvdCkKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlkcXB1dChkcXVvdFtjbnRdKTsKK30KKwogLyogVGhpcyBmdW5jdGlvbiBuZWVkcyBkcV9saXN0X2xvY2sgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNsZWFyX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CkBAIC0xMjY4LDggKzEyOTIsNyBAQAogb3V0X2VycjoKIAl1cF93cml0ZSgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOwogCS8qIERyb3AgdW51c2VkIHJlZmVyZW5jZXMgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWRxcHV0KGdvdFtjbnRdKTsKKwlkcXB1dF9hbGwoZ290KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9pbml0aWFsaXplKTsKQEAgLTEyODgsOSArMTMxMSw3IEBACiAJCWlub2RlLT5pX2RxdW90W2NudF0gPSBOVUxMOwogCX0KIAl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlkcXB1dChwdXRbY250XSk7CisJZHFwdXRfYWxsKHB1dCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X2Ryb3ApOwpAQCAtMTMxOSw2ICsxMzQwLDY3IEBACiBFWFBPUlRfU1lNQk9MKHZmc19kcV9kcm9wKTsKIAogLyoKKyAqIGlub2RlX3Jlc2VydmVkX3NwYWNlIGlzIG1hbmFnZWQgaW50ZXJuYWxseSBieSBxdW90YSwgYW5kIHByb3RlY3RlZCBieQorICogaV9sb2NrIHNpbWlsYXIgdG8gaV9ibG9ja3MraV9ieXRlcy4KKyAqLworc3RhdGljIHFzaXplX3QgKmlub2RlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQoreworCS8qIEZpbGVzeXN0ZW0gbXVzdCBleHBsaWNpdGx5IGRlZmluZSBpdCdzIG93biBtZXRob2QgaW4gb3JkZXIgdG8gdXNlCisJICogcXVvdGEgcmVzZXJ2YXRpb24gaW50ZXJmYWNlICovCisJQlVHX09OKCFpbm9kZS0+aV9zYi0+ZHFfb3AtPmdldF9yZXNlcnZlZF9zcGFjZSk7CisJcmV0dXJuIGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKK30KKworc3RhdGljIHZvaWQgaW5vZGVfYWRkX3Jzdl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3sKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCSppbm9kZV9yZXNlcnZlZF9zcGFjZShpbm9kZSkgKz0gbnVtYmVyOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKK30KKworCitzdGF0aWMgdm9pZCBpbm9kZV9jbGFpbV9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpIC09IG51bWJlcjsKKwlfX2lub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX3N1Yl9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpIC09IG51bWJlcjsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKK3N0YXRpYyBxc2l6ZV90IGlub2RlX2dldF9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlxc2l6ZV90IHJldDsKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXJldCA9ICppbm9kZV9yZXNlcnZlZF9zcGFjZShpbm9kZSk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2luY3Jfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsCisJCQkJaW50IHJlc2VydmUpCit7CisJaWYgKHJlc2VydmUpCisJCWlub2RlX2FkZF9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CisJZWxzZQorCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2RlY3Jfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQoreworCWlmIChyZXNlcnZlKQorCQlpbm9kZV9zdWJfcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOworCWVsc2UKKwkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworfQorCisvKgogICogRm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIHVwZGF0ZSBpX2Jsb2NrcytpX2J5dGVzIGZpZWxkcyBhbmQKICAqIHF1b3RhIGluZm9ybWF0aW9uICh0b2dldGhlciB3aXRoIGFwcHJvcHJpYXRlIGNoZWNrcykKICAqIE5PVEU6IFdlIGFic29sdXRlbHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGNhbGxlciBkaXJ0aWVzCkBAIC0xMzM2LDYgKzE0MTgsMjEgQEAKIAlpbnQgY250LCByZXQgPSBRVU9UQV9PSzsKIAljaGFyIHdhcm50eXBlW01BWFFVT1RBU107CiAKKwkvKgorCSAqIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorCSAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleAorCSAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCQlpbm9kZV9pbmNyX3NwYWNlKGlub2RlLCBudW1iZXIsIHJlc2VydmUpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKIAkJd2FybnR5cGVbY250XSA9IFFVT1RBX05MX05PV0FSTjsKIApAQCAtMTM0Niw3ICsxNDQzLDggQEAKIAkJaWYgKGNoZWNrX2JkcShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIsIHdhcm4sIHdhcm50eXBlK2NudCkKIAkJICAgID09IE5PX1FVT1RBKSB7CiAJCQlyZXQgPSBOT19RVU9UQTsKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCQkJZ290byBvdXRfZmx1c2hfd2FybjsKIAkJfQogCX0KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKQEAgLTEzNTcsNjQgKzE0NTUsMjkgQEAKIAkJZWxzZQogCQkJZHF1b3RfaW5jcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwogCX0KLQlpZiAoIXJlc2VydmUpCi0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLW91dF91bmxvY2s6CisJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKworCWlmIChyZXNlcnZlKQorCQlnb3RvIG91dF9mbHVzaF93YXJuOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKK291dF9mbHVzaF93YXJuOgogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CitvdXRfdW5sb2NrOgorCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCB3YXJuKQogewotCWludCBjbnQsIHJldCA9IFFVT1RBX09LOwotCi0JLyoKLQkgKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLQkgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXgKLQkgKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKLQlpZiAocmV0ID09IE5PX1FVT1RBKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOwotb3V0X3VubG9jazoKLQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2Nfc3BhY2UpOwogCiBpbnQgZHF1b3RfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHdhcm4pCiB7Ci0JaW50IHJldCA9IFFVT1RBX09LOwotCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlnb3RvIG91dDsKLQotCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAxKTsKLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X3Jlc2VydmVfc3BhY2UpOwogCkBAIC0xNDU1LDEwICsxNTE4LDcgQEAKIHdhcm5fcHV0X2FsbDoKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAlpZiAocmV0ID09IFFVT1RBX09LKQotCQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOworCQltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAJcmV0dXJuIHJldDsKQEAgLTE0NzEsMTQgKzE1MzEsMTQgQEAKIAlpbnQgcmV0ID0gUVVPVEFfT0s7CiAKIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkJewogCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJaW5vZGVfY2xhaW1fcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE0OTAsMTIgKzE1NTAsOSBAQAogCQkJCQkJCW51bWJlcik7CiAJfQogCS8qIFVwZGF0ZSBpbm9kZSBieXRlcyAqLwotCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKwltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogb3V0OgogCXJldHVybiByZXQ7CkBAIC0xNTAzLDM4ICsxNTYwLDkgQEAKIEVYUE9SVF9TWU1CT0woZHF1b3RfY2xhaW1fc3BhY2UpOwogCiAvKgotICogUmVsZWFzZSByZXNlcnZlZCBxdW90YSBzcGFjZQotICovCi12b2lkIGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCi17Ci0JaW50IGNudDsKLQotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXQ7Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQkvKiBSZWxlYXNlIHJlc2VydmVkIGRxdW90cyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCWRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0KLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybjsKLX0KLUVYUE9SVF9TWU1CT0woZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZSk7Ci0KLS8qCiAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAogICovCi1pbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK2ludCBfX2RxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQogewogCXVuc2lnbmVkIGludCBjbnQ7CiAJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwpAQCAtMTU0Myw3ICsxNTcxLDcgQEAKICAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCiAJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CiBvdXRfc3ViOgotCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJCXJldHVybiBRVU9UQV9PSzsKIAl9CiAKQEAgLTE1NTgsMjEgKzE1ODYsNDAgQEAKIAkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQogCQkJY29udGludWU7CiAJCXdhcm50eXBlW2NudF0gPSBpbmZvX2JkcV9mcmVlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7Ci0JCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJaWYgKHJlc2VydmUpCisJCQlkcXVvdF9mcmVlX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJCWVsc2UKKwkJCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKIAl9Ci0JaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKworCWlmIChyZXNlcnZlKQorCQlnb3RvIG91dF91bmxvY2s7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOworb3V0X3VubG9jazoKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAlyZXR1cm4gUVVPVEFfT0s7CiB9CisKK2ludCBkcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXJldHVybiAgX19kcXVvdF9mcmVlX3NwYWNlKGlub2RlLCBudW1iZXIsIDApOworfQogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX3NwYWNlKTsKIAogLyoKKyAqIFJlbGVhc2UgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKKyAqLwordm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCV9fZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwgbnVtYmVyLCAxKTsKKworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKTsKKworLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KIGludCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQpAQCAtMTU5OSwxMCArMTY0Niw3IEBACiAJCWRxdW90X2RlY3JfaW5vZGVzKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CiAJfQogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOwogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCXJldHVybiBRVU9UQV9PSzsKQEAgLTE2MTAsMTkgKzE2NTQsNiBAQAogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX2lub2RlKTsKIAogLyoKLSAqIGNhbGwgYmFjayBmdW5jdGlvbiwgZ2V0IHJlc2VydmVkIHF1b3RhIHNwYWNlIGZyb20gdW5kZXJseWluZyBmcwotICovCi1xc2l6ZV90IGRxdW90X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXFzaXplX3QgcmVzZXJ2ZWRfc3BhY2UgPSAwOwotCi0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpICYmCi0JICAgIGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKQotCQlyZXNlcnZlZF9zcGFjZSA9IGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKLQlyZXR1cm4gcmVzZXJ2ZWRfc3BhY2U7Ci19Ci0KLS8qCiAgKiBUcmFuc2ZlciB0aGUgbnVtYmVyIG9mIGlub2RlIGFuZCBibG9ja3MgZnJvbSBvbmUgZGlza3F1b3RhIHRvIGFuIG90aGVyLgogICoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCkBAIC0xNjY1LDcgKzE2OTYsNyBAQAogCX0KIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CiAJY3VyX3NwYWNlID0gaW5vZGVfZ2V0X2J5dGVzKGlub2RlKTsKLQlyc3Zfc3BhY2UgPSBkcXVvdF9nZXRfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpOworCXJzdl9zcGFjZSA9IGlub2RlX2dldF9yc3Zfc3BhY2UoaW5vZGUpOwogCXNwYWNlID0gY3VyX3NwYWNlICsgcnN2X3NwYWNlOwogCS8qIEJ1aWxkIHRoZSB0cmFuc2Zlcl9mcm9tIGxpc3QgYW5kIGNoZWNrIHRoZSBsaW1pdHMgKi8KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKQEAgLTE3MDksMjUgKzE3NDAsMTggQEAKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCi0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKHRyYW5zZmVyX2Zyb21bY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfZnJvbVtjbnRdKTsKLQkJaWYgKHRyYW5zZmVyX3RvW2NudF0pIHsKLQkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfdG9bY250XSk7Ci0JCQkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KLQkJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwotCQl9Ci0JfQorCW1hcmtfYWxsX2RxdW90X2RpcnR5KHRyYW5zZmVyX2Zyb20pOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KHRyYW5zZmVyX3RvKTsKKwkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwogd2Fybl9wdXRfYWxsOgogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX3RvLCB3YXJudHlwZV90byk7CiAJZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfZnJvbSwgd2FybnR5cGVfZnJvbV9pbm9kZXMpOwogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX2Zyb20sIHdhcm50eXBlX2Zyb21fc3BhY2UpOwogcHV0X2FsbDoKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJZHFwdXQodHJhbnNmZXJfZnJvbVtjbnRdKTsKLQkJZHFwdXQodHJhbnNmZXJfdG9bY250XSk7Ci0JfQorCWRxcHV0X2FsbCh0cmFuc2Zlcl9mcm9tKTsKKwlkcXB1dF9hbGwodHJhbnNmZXJfdG8pOwogCXJldHVybiByZXQ7CiBvdmVyX3F1b3RhOgogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjIuYyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKaW5kZXggM2RmYzIzZS4uZTNkYTAyZiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjIuYworKysgYi9mcy9xdW90YS9xdW90YV92Mi5jCkBAIC05Nyw4ICs5NywxMSBAQAogCXVuc2lnbmVkIGludCB2ZXJzaW9uOwogCiAJaWYgKCF2Ml9yZWFkX2hlYWRlcihzYiwgdHlwZSwgJmRxaGVhZCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLTE7CiAJdmVyc2lvbiA9IGxlMzJfdG9fY3B1KGRxaGVhZC5kcWhfdmVyc2lvbik7CisJaWYgKChpbmZvLT5kcWlfZm10X2lkID09IFFGTVRfVkZTX1YwICYmIHZlcnNpb24gIT0gMCkgfHwKKwkgICAgKGluZm8tPmRxaV9mbXRfaWQgPT0gUUZNVF9WRlNfVjEgJiYgdmVyc2lvbiAhPSAxKSkKKwkJcmV0dXJuIC0xOwogCiAJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkaW5mbywKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7CkBAIC0xMjAsOCArMTIzLDggQEAKIAkJaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmY7CiAJfSBlbHNlIHsKIAkJLyogdXNlZCBzcGFjZSBpcyBzdG9yZWQgYXMgdW5zaWduZWQgNjQtYml0IHZhbHVlICovCi0JCWluZm8tPmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmZmZmZmZmZmY7CS8qIDJeNjQtMSAqLwotCQlpbmZvLT5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmOworCQlpbmZvLT5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMOwkvKiAyXjY0LTEgKi8KKwkJaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTDsKIAl9CiAJaW5mby0+ZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpOwogCWluZm8tPmRxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKaW5kZXggNjg1NDk1Ny4uNjVjODcyNyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvYml0bWFwLmMKKysrIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKQEAgLTEyNzcsNyArMTI3NywxMCBAQAogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbyAqYml0bWFwOwogCXVuc2lnbmVkIGludCBibWFwX25yID0gcmVpc2VyZnNfYm1hcF9jb3VudChzYik7CiAKKwkvKiBBdm9pZCBsb2NrIHJlY3Vyc2lvbiBpbiBmYXVsdCBjYXNlICovCisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHNiKTsKIAliaXRtYXAgPSB2bWFsbG9jKHNpemVvZigqYml0bWFwKSAqIGJtYXBfbnIpOworCXJlaXNlcmZzX3dyaXRlX2xvY2soc2IpOwogCWlmIChiaXRtYXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDI5MGFlMzguLjExNTBlYmIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwpAQCAtMzEsMTEgKzMxLDEyIEBACiAJICAgIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArCiAJICAgIDIgKiBSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYik7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlpbnQgZGVwdGg7CiAJaW50IGVycjsKIAogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAotCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCWRlcHRoID0gcmVpc2VyZnNfd3JpdGVfbG9ja19vbmNlKGlub2RlLT5pX3NiKTsKIAogCS8qIFRoZSA9IDAgaGFwcGVucyB3aGVuIHdlIGFib3J0IGNyZWF0aW5nIGEgbmV3IGlub2RlIGZvciBzb21lIHJlYXNvbiBsaWtlIGxhY2sgb2Ygc3BhY2UuLiAqLwogCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpICYmIElOT0RFX1BLRVkoaW5vZGUpLT5rX29iamVjdGlkICE9IDApIHsJLyogYWxzbyBoYW5kbGVzIGJhZF9pbm9kZSBjYXNlICovCkBAIC03NCw3ICs3NSw3IEBACiAgICAgICBvdXQ6CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwkvKiBub3RlIHRoaXMgbXVzdCBnbyBhZnRlciB0aGUgam91cm5hbF9lbmQgdG8gcHJldmVudCBkZWFkbG9jayAqLwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKKwlyZWlzZXJmc193cml0ZV91bmxvY2tfb25jZShpbm9kZS0+aV9zYiwgZGVwdGgpOwogfQogCiBzdGF0aWMgdm9pZCBfbWFrZV9jcHVfa2V5KHN0cnVjdCBjcHVfa2V5ICprZXksIGludCB2ZXJzaW9uLCBfX3UzMiBkaXJpZCwKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwppbmRleCAyZjhhN2U3Li44M2FjNGQzIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMKKysrIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCkBAIC0yMDA5LDEwICsyMDA5LDExIEBACiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGNvbW1pdF93cSk7CiAJCWNvbW1pdF93cSA9IE5VTEw7CiAJfQotCXJlaXNlcmZzX3dyaXRlX2xvY2soc2IpOwogCiAJZnJlZV9qb3VybmFsX3JhbShzYik7CiAKKwlyZWlzZXJmc193cml0ZV9sb2NrKHNiKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNzU4LDExICsyNzU5LDE4IEBACiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWw7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamw7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOworCWludCByZXQ7CiAKKwkvKgorCSAqIFVubG9jayBoZXJlIHRvIGF2b2lkIHZhcmlvdXMgUkVDTEFJTS1GUy1PTiA8LT4gSU4tUkVDTEFJTS1GUworCSAqIGRlcGVuZGVuY3kgaW52ZXJzaW9uIHdhcm5pbmdzLgorCSAqLworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhzYik7CiAJam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwpKTsKIAlpZiAoIWpvdXJuYWwpIHsKIAkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTI1NiIsCiAJCQkJICJ1bmFibGUgdG8gZ2V0IG1lbW9yeSBmb3Igam91cm5hbCBzdHJ1Y3R1cmUiKTsKKwkJcmVpc2VyZnNfd3JpdGVfbG9jayhzYik7CiAJCXJldHVybiAxOwogCX0KIAltZW1zZXQoam91cm5hbCwgMCwgc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19qb3VybmFsKSk7CkBAIC0yNzcxLDEwICsyNzc5LDEyIEBACiAJSU5JVF9MSVNUX0hFQUQoJmpvdXJuYWwtPmpfd29ya2luZ19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmam91cm5hbC0+al9qb3VybmFsX2xpc3QpOwogCWpvdXJuYWwtPmpfcGVyc2lzdGVudF90cmFucyA9IDA7Ci0JaWYgKHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzYiwKLQkJCQkJICAgam91cm5hbC0+al9saXN0X2JpdG1hcCwKLQkJCQkJICAgcmVpc2VyZnNfYm1hcF9jb3VudChzYikpKQorCXJldCA9IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzYiwgam91cm5hbC0+al9saXN0X2JpdG1hcCwKKwkJCQkJICAgcmVpc2VyZnNfYm1hcF9jb3VudChzYikpOworCXJlaXNlcmZzX3dyaXRlX2xvY2soc2IpOworCWlmIChyZXQpCiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOworCiAJYWxsb2NhdGVfYml0bWFwX25vZGVzKHNiKTsKIAogCS8qIHJlc2VydmVkIGZvciBqb3VybmFsIGFyZWEgc3VwcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbG9jay5jIGIvZnMvcmVpc2VyZnMvbG9jay5jCmluZGV4IGVlMmNmYzAuLmI4N2FhMmMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2xvY2suYworKysgYi9mcy9yZWlzZXJmcy9sb2NrLmMKQEAgLTg2LDMgKzg2LDEyIEBACiAJCXJlaXNlcmZzX3BhbmljKHNiLCAiJXMgY2FsbGVkIHdpdGhvdXQga2VybmVsIGxvY2sgaGVsZCAlZCIsCiAJCQkgICAgICAgY2FsbGVyKTsKIH0KKworI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwordm9pZCByZWlzZXJmc19sb2NrX2NoZWNrX3JlY3Vyc2l2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCByZWlzZXJmc19zYl9pbmZvICpzYl9pID0gUkVJU0VSRlNfU0Ioc2IpOworCisJV0FSTl9PTkNFKChzYl9pLT5sb2NrX2RlcHRoID4gMCksICJVbndhbnRlZCByZWN1cnNpdmUgcmVpc2VyZnMgbG9jayFcbiIpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCBlMjk2ZmY3Li45ZDRkY2YwIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTkyMSw2ICs5MjEsNyBAQAogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CiAJaW50IGpiZWdpbl9jb3VudDsKIAl1bnNpZ25lZCBsb25nIHNhdmVsaW5rOworCWludCBkZXB0aDsKIAogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCkBAIC05MzIsNyArOTMzLDcgQEAKIAkgICAgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAyICsgMiArCiAJICAgIDQgKiBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKTsKIAotCXJlaXNlcmZzX3dyaXRlX2xvY2soZGlyLT5pX3NiKTsKKwlkZXB0aCA9IHJlaXNlcmZzX3dyaXRlX2xvY2tfb25jZShkaXItPmlfc2IpOwogCXJldHZhbCA9IGpvdXJuYWxfYmVnaW4oJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXRfdW5saW5rOwpAQCAtOTkzLDcgKzk5NCw3IEBACiAKIAlyZXR2YWwgPSBqb3VybmFsX2VuZCgmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAlyZWlzZXJmc19jaGVja19wYXRoKCZwYXRoKTsKLQlyZWlzZXJmc193cml0ZV91bmxvY2soZGlyLT5pX3NiKTsKKwlyZWlzZXJmc193cml0ZV91bmxvY2tfb25jZShkaXItPmlfc2IsIGRlcHRoKTsKIAlyZXR1cm4gcmV0dmFsOwogCiAgICAgICBlbmRfdW5saW5rOgpAQCAtMTAwMyw3ICsxMDA0LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR2YWwgPSBlcnI7CiAgICAgICBvdXRfdW5saW5rOgotCXJlaXNlcmZzX3dyaXRlX3VubG9jayhkaXItPmlfc2IpOworCXJlaXNlcmZzX3dyaXRlX3VubG9ja19vbmNlKGRpci0+aV9zYiwgZGVwdGgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IDhjNzAzM2EuLmMzYjAwNGUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtODMsNyArODMsOCBAQAogCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmlfbXV0ZXgpKTsKIAl2ZnNfZHFfaW5pdChkaXIpOwogCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CisJcmVpc2VyZnNfbXV0ZXhfbG9ja19uZXN0ZWRfc2FmZSgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQlJX01VVEVYX0NISUxELCBkaXItPmlfc2IpOwogCWVycm9yID0gZGlyLT5pX29wLT51bmxpbmsoZGlyLCBkZW50cnkpOwogCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIApAQCAtOTgsNyArOTksOCBAQAogCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmlfbXV0ZXgpKTsKIAl2ZnNfZHFfaW5pdChkaXIpOwogCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CisJcmVpc2VyZnNfbXV0ZXhfbG9ja19uZXN0ZWRfc2FmZSgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQlJX01VVEVYX0NISUxELCBkaXItPmlfc2IpOwogCWRlbnRyeV91bmhhc2goZGVudHJ5KTsKIAllcnJvciA9IGRpci0+aV9vcC0+cm1kaXIoZGlyLCBkZW50cnkpOwogCWlmICghZXJyb3IpCkBAIC0yMzUsMTYgKzIzNywyMiBAQAogCWlmIChJU19QUklWQVRFKGlub2RlKSB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gMDsKIAorCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJZGlyID0gb3Blbl94YV9kaXIoaW5vZGUsIFhBVFRSX1JFUExBQ0UpOwogCWlmIChJU19FUlIoZGlyKSkgewogCQllcnIgPSBQVFJfRVJSKGRpcik7CisJCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwogCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKCFkaXItPmRfaW5vZGUpIHsKIAkJZXJyID0gMDsKKwkJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAJCWdvdG8gb3V0X2RpcjsKIAl9CiAKIAltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKworCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCiAJYnVmLnhhZGlyID0gZGlyOwogCWVyciA9IHJlaXNlcmZzX3JlYWRkaXJfZGVudHJ5KGRpciwgJmJ1ZiwgZmlsbF93aXRoX2RlbnRyaWVzLCAmcG9zKTsKIAl3aGlsZSAoKGVyciA9PSAwIHx8IGVyciA9PSAtRU5PU1BDKSAmJiBidWYuY291bnQpIHsKQEAgLTI4Myw4ICsyOTEsOSBAQAogCQllcnIgPSBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsIGJsb2Nrcyk7CiAJCWlmICghZXJyKSB7CiAJCQlpbnQgamVycm9yOwotCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgsCi0JCQkJCSAgSV9NVVRFWF9YQVRUUik7CisJCQlyZWlzZXJmc19tdXRleF9sb2NrX25lc3RlZF9zYWZlKAorCQkJCQkgICZkaXItPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQkgIElfTVVURVhfWEFUVFIsIGlub2RlLT5pX3NiKTsKIAkJCWVyciA9IGFjdGlvbihkaXIsIGRhdGEpOwogCQkJamVycm9yID0gam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgYmxvY2tzKTsKIAkJCW11dGV4X3VubG9jaygmZGlyLT5kX3BhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CkBAIC00ODAsMTEgKzQ4OSwxNiBAQAogCWlmICghYnVmZmVyKQogCQlyZXR1cm4gbG9va3VwX2FuZF9kZWxldGVfeGF0dHIoaW5vZGUsIG5hbWUpOwogCisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAlkZW50cnkgPSB4YXR0cl9sb29rdXAoaW5vZGUsIG5hbWUsIGZsYWdzKTsKLQlpZiAoSVNfRVJSKGRlbnRyeSkpCisJaWYgKElTX0VSUihkZW50cnkpKSB7CisJCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwogCQlyZXR1cm4gUFRSX0VSUihkZW50cnkpOworCX0KIAotCWRvd25fd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CisJZG93bl9yZWFkKCZSRUlTRVJGU19JKGlub2RlKS0+aV94YXR0cl9zZW0pOworCisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAKIAl4YWhhc2ggPSB4YXR0cl9oYXNoKGJ1ZmZlciwgYnVmZmVyX3NpemUpOwogCXdoaWxlIChidWZmZXJfcG9zIDwgYnVmZmVyX3NpemUgfHwgYnVmZmVyX3BvcyA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuYwppbmRleCBiMDc1NjVjLi4xZGFiZTRlIDEwMDY0NAotLS0gYS9mcy9zaWduYWxmZC5jCisrKyBiL2ZzL3NpZ25hbGZkLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCQkgKiBhbm9uX2lub2RlX2dldGZkKCkgd2lsbCBpbnN0YWxsIHRoZSBmZC4KIAkJICovCiAJCXVmZCA9IGFub25faW5vZGVfZ2V0ZmQoIltzaWduYWxmZF0iLCAmc2lnbmFsZmRfZm9wcywgY3R4LAotCQkJCSAgICAgICBmbGFncyAmIChPX0NMT0VYRUMgfCBPX05PTkJMT0NLKSk7CisJCQkJICAgICAgIE9fUkRXUiB8IChmbGFncyAmIChPX0NMT0VYRUMgfCBPX05PTkJMT0NLKSkpOwogCQlpZiAodWZkIDwgMCkKIAkJCWtmcmVlKGN0eCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL3N0YXQuYyBiL2ZzL3N0YXQuYwppbmRleCAwNzU2OTRlLi5jNGVjZDUyIDEwMDY0NAotLS0gYS9mcy9zdGF0LmMKKysrIGIvZnMvc3RhdC5jCkBAIC00MDEsOSArNDAxLDkgQEAKIH0KICNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9TVEFUNjQgKi8KIAotdm9pZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQorLyogQ2FsbGVyIGlzIGhlcmUgcmVzcG9uc2libGUgZm9yIHN1ZmZpY2llbnQgbG9ja2luZyAoaWUuIGlub2RlLT5pX2xvY2spICovCit2b2lkIF9faW5vZGVfYWRkX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcykKIHsKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCWlub2RlLT5pX2Jsb2NrcyArPSBieXRlcyA+PiA5OwogCWJ5dGVzICY9IDUxMTsKIAlpbm9kZS0+aV9ieXRlcyArPSBieXRlczsKQEAgLTQxMSw2ICs0MTEsMTIgQEAKIAkJaW5vZGUtPmlfYmxvY2tzKys7CiAJCWlub2RlLT5pX2J5dGVzIC09IDUxMjsKIAl9Cit9CisKK3ZvaWQgaW5vZGVfYWRkX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcykKK3sKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCV9faW5vZGVfYWRkX2J5dGVzKGlub2RlLCBieXRlcyk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAxOWViNzBiLi5hZmYwNDZiIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTkwMSw4ICs5MDEsOSBAQAogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOworCX0gZWxzZSB7CisJCWRvX3JlbW91bnRfc2IocywgZmxhZ3MsIGRhdGEsIDApOwogCX0KLQlkb19yZW1vdW50X3NiKHMsIGZsYWdzLCBkYXRhLCAwKTsKIAlzaW1wbGVfc2V0X21udChtbnQsIHMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCA2MGM3MDJiLi5hMGE1MDBhIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtNDgzLDcgKzQ4Myw4IEBACiAgKglAYXR0cjoJYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KIAotaW50IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cikKK2ludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogCUJVR19PTigha29iaiB8fCAha29iai0+c2QgfHwgIWF0dHIpOwogCkBAIC00OTcsNyArNDk4LDggQEAKICAqCUBhdHRyOglhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogCi12b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cikKK3ZvaWQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKGtvYmotPnNkLCBhdHRyLT5hdHRyLm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCBmMDVmMjMwLi42OTlmMzcxIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtMTA2LDggKzEwNiwxMCBAQAogCQkJcmV0dXJuIE5VTEw7CiAKIAkJdCA9IGF0b21pY19jbXB4Y2hnKCZzZC0+c19hY3RpdmUsIHYsIHYgKyAxKTsKLQkJaWYgKGxpa2VseSh0ID09IHYpKQorCQlpZiAobGlrZWx5KHQgPT0gdikpIHsKKwkJCXJ3c2VtX2FjcXVpcmVfcmVhZCgmc2QtPmRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTsKIAkJCXJldHVybiBzZDsKKwkJfQogCQlpZiAodCA8IDApCiAJCQlyZXR1cm4gTlVMTDsKIApAQCAtMTMwLDYgKzEzMiw3IEBACiAJaWYgKHVubGlrZWx5KCFzZCkpCiAJCXJldHVybjsKIAorCXJ3c2VtX3JlbGVhc2UoJnNkLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CiAJdiA9IGF0b21pY19kZWNfcmV0dXJuKCZzZC0+c19hY3RpdmUpOwogCWlmIChsaWtlbHkodiAhPSBTRF9ERUFDVElWQVRFRF9CSUFTKSkKIAkJcmV0dXJuOwpAQCAtMTk0LDE1ICsxOTcsMjEgQEAKIAlCVUdfT04oc2QtPnNfc2libGluZyB8fCAhKHNkLT5zX2ZsYWdzICYgU1lTRlNfRkxBR19SRU1PVkVEKSk7CiAJc2QtPnNfc2libGluZyA9ICh2b2lkICopJndhaXQ7CiAKKwlyd3NlbV9hY3F1aXJlKCZzZC0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwogCS8qIGF0b21pY19hZGRfcmV0dXJuKCkgaXMgYSBtYigpLCBwdXRfYWN0aXZlKCkgd2lsbCBhbHdheXMgc2VlCiAJICogdGhlIHVwZGF0ZWQgc2QtPnNfc2libGluZy4KIAkgKi8KIAl2ID0gYXRvbWljX2FkZF9yZXR1cm4oU0RfREVBQ1RJVkFURURfQklBUywgJnNkLT5zX2FjdGl2ZSk7CiAKLQlpZiAodiAhPSBTRF9ERUFDVElWQVRFRF9CSUFTKQorCWlmICh2ICE9IFNEX0RFQUNUSVZBVEVEX0JJQVMpIHsKKwkJbG9ja19jb250ZW5kZWQoJnNkLT5kZXBfbWFwLCBfUkVUX0lQXyk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOworCX0KIAogCXNkLT5zX3NpYmxpbmcgPSBOVUxMOworCisJbG9ja19hY3F1aXJlZCgmc2QtPmRlcF9tYXAsIF9SRVRfSVBfKTsKKwlyd3NlbV9yZWxlYXNlKCZzZC0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwogfQogCiBzdGF0aWMgaW50IHN5c2ZzX2FsbG9jX2lubyhpbm9fdCAqcGlubykKQEAgLTM0NSw2ICszNTQsNyBAQAogCiAJYXRvbWljX3NldCgmc2QtPnNfY291bnQsIDEpOwogCWF0b21pY19zZXQoJnNkLT5zX2FjdGl2ZSwgMCk7CisJc3lzZnNfZGlyZW50X2luaXRfbG9ja2RlcChzZCk7CiAKIAlzZC0+c19uYW1lID0gbmFtZTsKIAlzZC0+c19tb2RlID0gbW9kZTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IGNhNTJlN2I5Li5jZGQ5Mzc3IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeXNmcy5oCisrKyBiL2ZzL3N5c2ZzL3N5c2ZzLmgKQEAgLTgsNiArOCw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50OwpAQCAtNTAsNiArNTEsOSBAQAogc3RydWN0IHN5c2ZzX2RpcmVudCB7CiAJYXRvbWljX3QJCXNfY291bnQ7CiAJYXRvbWljX3QJCXNfYWN0aXZlOworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwCWRlcF9tYXA7CisjZW5kaWYKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50CSpzX3BhcmVudDsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50CSpzX3NpYmxpbmc7CiAJY29uc3QgY2hhcgkJKnNfbmFtZTsKQEAgLTg0LDYgKzg4LDE3IEBACiAJcmV0dXJuIHNkLT5zX2ZsYWdzICYgU1lTRlNfVFlQRV9NQVNLOwogfQogCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyNkZWZpbmUgc3lzZnNfZGlyZW50X2luaXRfbG9ja2RlcChzZCkJCQkJXAorZG8gewkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQkJCQkJCQlcCisJbG9ja2RlcF9pbml0X21hcCgmc2QtPmRlcF9tYXAsICJzX2FjdGl2ZSIsICZfX2tleSwgMCk7CVwKK30gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIHN5c2ZzX2RpcmVudF9pbml0X2xvY2tkZXAoc2QpIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKwogLyoKICAqIENvbnRleHQgc3RydWN0dXJlIHRvIGJlIHVzZWQgd2hpbGUgYWRkaW5nL3JlbW92aW5nIG5vZGVzLgogICovCmRpZmYgLS1naXQgYS9mcy90aW1lcmZkLmMgYi9mcy90aW1lcmZkLmMKaW5kZXggYjA0MmJkNy4uMWJmYzk1YSAxMDA2NDQKLS0tIGEvZnMvdGltZXJmZC5jCisrKyBiL2ZzL3RpbWVyZmQuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJaHJ0aW1lcl9pbml0KCZjdHgtPnRtciwgY2xvY2tpZCwgSFJUSU1FUl9NT0RFX0FCUyk7CiAKIAl1ZmQgPSBhbm9uX2lub2RlX2dldGZkKCJbdGltZXJmZF0iLCAmdGltZXJmZF9mb3BzLCBjdHgsCi0JCQkgICAgICAgZmxhZ3MgJiBURkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKTsKKwkJCSAgICAgICBPX1JEV1IgfCAoZmxhZ3MgJiBURkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKSk7CiAJaWYgKHVmZCA8IDApCiAJCWtmcmVlKGN0eCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAppbmRleCAyOTI0NWM2Li4wZWE1ZWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCkBAIC0yMjQsOCArMjI0LDYgQEAKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfdGhyb3R0bGluZyB0aHJvdHRsaW5nOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9saW1pdCBsaW1pdDsKIAlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldjsKLQkvKiB0aGUgX1BEQyBvYmplY3RzIGZvciB0aGlzIHByb2Nlc3NvciwgaWYgYW55ICovCi0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKnBkYzsKIH07CiAKIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9lcnJhdGEgewpAQCAtMjU3LDkgKzI1NSw2IEBACiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IGFjcGlfcHJvY2Vzc29yICosIHByb2Nlc3NvcnMpOwogZXh0ZXJuIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9lcnJhdGEgZXJyYXRhOwogCi12b2lkIGFyY2hfYWNwaV9wcm9jZXNzb3JfaW5pdF9wZGMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7Ci12b2lkIGFyY2hfYWNwaV9wcm9jZXNzb3JfY2xlYW51cF9wZGMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7Ci0KICNpZmRlZiBBUkNIX0hBU19QT1dFUl9JTklUCiB2b2lkIGFjcGlfcHJvY2Vzc29yX3Bvd2VyX2luaXRfYm1fY2hlY2soc3RydWN0IGFjcGlfcHJvY2Vzc29yX2ZsYWdzICpmbGFncywKIAkJCQkJdW5zaWduZWQgaW50IGNwdSk7CkBAIC0zMjUsNiArMzIwLDkgQEAKIAogI2VuZGlmCQkJCS8qIENPTkZJR19DUFVfRlJFUSAqLwogCisvKiBpbiBwcm9jZXNzb3JfcGRjLmMgKi8KK3ZvaWQgYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhhY3BpX2hhbmRsZSBoYW5kbGUpOworCiAvKiBpbiBwcm9jZXNzb3JfdGhyb3R0bGluZy5jICovCiBpbnQgYWNwaV9wcm9jZXNzb3JfdHN0YXRlX2hhc19jaGFuZ2VkKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwogaW50IGFjcGlfcHJvY2Vzc29yX2dldF90aHJvdHRsaW5nX2luZm8oc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggMTllZjhlYi4uZmZhYzE1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMjk2LDYgKzI5Niw3IEBACiAjZGVmaW5lCURSTV9NQVNURVIJMHgyCiAjZGVmaW5lIERSTV9ST09UX09OTFkJMHg0CiAjZGVmaW5lIERSTV9DT05UUk9MX0FMTE9XIDB4OAorI2RlZmluZSBEUk1fVU5MT0NLRUQJMHgxMAogCiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgewogCXVuc2lnbmVkIGludCBjbWQ7CkBAIC0xMTI4LDggKzExMjksOCBAQAogCQkJCS8qIERyaXZlciBzdXBwb3J0IChkcm1fZHJ2LmgpICovCiBleHRlcm4gaW50IGRybV9pbml0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwogZXh0ZXJuIHZvaWQgZHJtX2V4aXQoc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7Ci1leHRlcm4gaW50IGRybV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gbG9uZyBkcm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBsb25nIGRybV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQgZHJtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTE0MDcsNyArMTQwOCw3IEBACiAJCQkJICAgc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZvICogZ2FydF9pbmZvKTsKIAogZXh0ZXJuIGRybV9kbWFfaGFuZGxlX3QgKmRybV9wY2lfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgICAgIHNpemVfdCBhbGlnbiwgZG1hX2FkZHJfdCBtYXhhZGRyKTsKKwkJCQkgICAgICAgc2l6ZV90IGFsaWduKTsKIGV4dGVybiB2b2lkIF9fZHJtX3BjaV9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9kbWFfaGFuZGxlX3QgKiBkbWFoKTsKIGV4dGVybiB2b2lkIGRybV9wY2lfZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fZG1hX2hhbmRsZV90ICogZG1haCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IGVjM2Y1ZTgwLi5iNjRhOGQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKQEAgLTE4OCw2ICsxODgsNyBAQAogI2RlZmluZSBEUk1fSTkxNV9HRU1fTUFEVklTRQkweDI2CiAjZGVmaW5lIERSTV9JOTE1X09WRVJMQVlfUFVUX0lNQUdFCTB4MjcKICNkZWZpbmUgRFJNX0k5MTVfT1ZFUkxBWV9BVFRSUwkweDI4CisjZGVmaW5lIERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSMgkweDI5CiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0gJCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTIwNyw2ICsyMDgsNyBAQAogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9WQkxBTktfU1dBUAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfVkJMQU5LX1NXQVAsIGRybV9pOTE1X3ZibGFua19zd2FwX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9JTklUCQlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fSU5JVCwgc3RydWN0IGRybV9pOTE1X2dlbV9pbml0KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUglEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUiwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUjIJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIyLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUElOCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BJTiwgc3RydWN0IGRybV9pOTE1X2dlbV9waW4pCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9VTlBJTglEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVU5QSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fdW5waW4pCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9CVVNZCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0JVU1ksIHN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSkKQEAgLTI3Miw2ICsyNzQsNyBAQAogI2RlZmluZSBJOTE1X1BBUkFNX05VTV9GRU5DRVNfQVZBSUwgICAgICA2CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX09WRVJMQVkgICAgICAgICAgIDcKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfUEFHRUZMSVBQSU5HCSA4CisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0VYRUNCVUYyICAgICAgICAgIDkKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gewogCWludCBwYXJhbTsKQEAgLTU2Nyw2ICs1NzAsNTcgQEAKIAlfX3U2NCBjbGlwcmVjdHNfcHRyOwogfTsKIAorc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgeworCS8qKgorCSAqIFVzZXIncyBoYW5kbGUgZm9yIGEgYnVmZmVyIHRvIGJlIGJvdW5kIGludG8gdGhlIEdUVCBmb3IgdGhpcworCSAqIG9wZXJhdGlvbi4KKwkgKi8KKwlfX3UzMiBoYW5kbGU7CisKKwkvKiogTnVtYmVyIG9mIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGlzIGJ1ZmZlciAqLworCV9fdTMyIHJlbG9jYXRpb25fY291bnQ7CisJLyoqCisJICogUG9pbnRlciB0byBhcnJheSBvZiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgY29udGFpbmluZworCSAqIHRoZSByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgaW4gdGhpcyBidWZmZXIuCisJICovCisJX191NjQgcmVsb2NzX3B0cjsKKworCS8qKiBSZXF1aXJlZCBhbGlnbm1lbnQgaW4gZ3JhcGhpY3MgYXBlcnR1cmUgKi8KKwlfX3U2NCBhbGlnbm1lbnQ7CisKKwkvKioKKwkgKiBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgdXBkYXRlZCBvZmZzZXQgb2YgdGhlIG9iamVjdCwgZm9yIGZ1dHVyZQorCSAqIHByZXN1bWVkX29mZnNldCB3cml0ZXMuCisJICovCisJX191NjQgb2Zmc2V0OworCisjZGVmaW5lIEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFICgxPDwwKQorCV9fdTY0IGZsYWdzOworCV9fdTY0IHJzdmQxOworCV9fdTY0IHJzdmQyOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiB7CisJLyoqCisJICogTGlzdCBvZiBnZW1fZXhlY19vYmplY3QyIHN0cnVjdHMKKwkgKi8KKwlfX3U2NCBidWZmZXJzX3B0cjsKKwlfX3UzMiBidWZmZXJfY291bnQ7CisKKwkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KKwlfX3UzMiBiYXRjaF9zdGFydF9vZmZzZXQ7CisJLyoqIEJ5dGVzIHVzZWQgaW4gYmF0Y2hidWZmZXIgZnJvbSBiYXRjaF9zdGFydF9vZmZzZXQgKi8KKwlfX3UzMiBiYXRjaF9sZW47CisJX191MzIgRFIxOworCV9fdTMyIERSNDsKKwlfX3UzMiBudW1fY2xpcHJlY3RzOworCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLworCV9fdTY0IGNsaXByZWN0c19wdHI7CisJX191NjQgZmxhZ3M7IC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KKwlfX3U2NCByc3ZkMTsKKwlfX3U2NCByc3ZkMjsKK307CisKIHN0cnVjdCBkcm1faTkxNV9nZW1fcGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgcGlubmVkLiAqLwogCV9fdTMyIGhhbmRsZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggY2U5NDVkNC4uMzY5MjQyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTI1MSw2ICsyNTEsNyBAQAogdm9pZCBfX2luaXQgYWNwaV9ub19zNF9od19zaWduYXR1cmUodm9pZCk7CiB2b2lkIF9faW5pdCBhY3BpX29sZF9zdXNwZW5kX29yZGVyaW5nKHZvaWQpOwogdm9pZCBfX2luaXQgYWNwaV9zNF9ub19udnModm9pZCk7Cit2b2lkIF9faW5pdCBhY3BpX3NldF9zY2lfZW5fb25fcmVzdW1lKHZvaWQpOwogI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiBzdHJ1Y3QgYWNwaV9vc2NfY29udGV4dCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA3ODRhOTE5Li45Yjk4MTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTg0NSw3ICs4NDUsNiBAQAogICogYmxrX3JxX2Vycl9ieXRlcygpCQk6IGJ5dGVzIGxlZnQgdGlsbCB0aGUgbmV4dCBlcnJvciBib3VuZGFyeQogICogYmxrX3JxX3NlY3RvcnMoKQkJOiBzZWN0b3JzIGxlZnQgaW4gdGhlIGVudGlyZSByZXF1ZXN0CiAgKiBibGtfcnFfY3VyX3NlY3RvcnMoKQkJOiBzZWN0b3JzIGxlZnQgaW4gdGhlIGN1cnJlbnQgc2VnbWVudAotICogYmxrX3JxX2Vycl9zZWN0b3JzKCkJCTogc2VjdG9ycyBsZWZ0IHRpbGwgdGhlIG5leHQgZXJyb3IgYm91bmRhcnkKICAqLwogc3RhdGljIGlubGluZSBzZWN0b3JfdCBibGtfcnFfcG9zKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKQEAgLTg3NCwxMSArODczLDYgQEAKIAlyZXR1cm4gYmxrX3JxX2N1cl9ieXRlcyhycSkgPj4gOTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmxrX3JxX2Vycl9zZWN0b3JzKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlyZXR1cm4gYmxrX3JxX2Vycl9ieXRlcyhycSkgPj4gOTsKLX0KLQogLyoKICAqIFJlcXVlc3QgaXNzdWUgcmVsYXRlZCBmdW5jdGlvbnMuCiAgKi8KQEAgLTExMTYsMTEgKzExMTAsMTggQEAKIAlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2xpbWl0X2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBzZWN0b3JfdCBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50IGdyYW51bGFyaXR5ID0gbWF4KGxpbS0+cGh5c2ljYWxfYmxvY2tfc2l6ZSwgbGltLT5pb19taW4pOworCisJb2Zmc2V0ICY9IGdyYW51bGFyaXR5IC0gMTsKKwlyZXR1cm4gKGdyYW51bGFyaXR5ICsgbGltLT5hbGlnbm1lbnRfb2Zmc2V0IC0gb2Zmc2V0KSAmIChncmFudWxhcml0eSAtIDEpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9zZWN0b3JfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJCQkJCXNlY3Rvcl90IHNlY3RvcikKIHsKLQlyZXR1cm4gKChzZWN0b3IgPDwgOSkgLSBxLT5saW1pdHMuYWxpZ25tZW50X29mZnNldCkKLQkJJiAocS0+bGltaXRzLmlvX21pbiAtIDEpOworCXJldHVybiBxdWV1ZV9saW1pdF9hbGlnbm1lbnRfb2Zmc2V0KCZxLT5saW1pdHMsIHNlY3RvciA8PCA5KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCAyYTczZDliLi5hNjI3OTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTE2Niw5ICsxNjYsOSBAQAogCV9fQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCiAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRyaXZlcl9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAotCQkJCQkgICBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkJCWNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKTsKIGV4dGVybiB2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAotCQkJICAgICAgIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKTsKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cik7CiAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRyaXZlcl9hZGRfa29iaihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAogCQkJCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTMxOSwxMyArMzE5LDEzIEBACiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkKIAogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwKLQkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmVudHJ5KTsKKwkJCQkJY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmVudHJ5KTsKIGV4dGVybiB2b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpOworCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKTsKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOworCQkJCQljb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CiBleHRlcm4gdm9pZCBkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkJICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwogZXh0ZXJuIGludCBkZXZpY2Vfc2NoZWR1bGVfY2FsbGJhY2tfb3duZXIoc3RydWN0IGRldmljZSAqZGV2LAogCQl2b2lkICgqZnVuYykoc3RydWN0IGRldmljZSAqZGV2KSwgc3RydWN0IG1vZHVsZSAqb3duZXIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RzdC5oIGIvaW5jbHVkZS9saW51eC9kc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI2ZmVkOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2RzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTg3ICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9fRFNUX0gKLSNkZWZpbmUgX19EU1RfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KLQotI2RlZmluZSBEU1RfTkFNRUxFTgkJMzIKLSNkZWZpbmUgRFNUX05BTUUJCSJkc3QiCi0KLWVudW0gewotCS8qIFJlbW92ZSBub2RlIHdpdGggZ2l2ZW4gaWQgZnJvbSBzdG9yYWdlICovCi0JRFNUX0RFTF9OT0RFCT0gMCwKLQkvKiBBZGQgcmVtb3RlIG5vZGUgd2l0aCBnaXZlbiBpZCB0byB0aGUgc3RvcmFnZSAqLwotCURTVF9BRERfUkVNT1RFLAotCS8qIEFkZCBsb2NhbCBub2RlIHdpdGggZ2l2ZW4gaWQgdG8gdGhlIHN0b3JhZ2UgdG8gYmUgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgcmVtb3RlIHBlZXJzICovCi0JRFNUX0FERF9FWFBPUlQsCi0JLyogQ3J5cHRvIGluaXRpYWxpemF0aW9uIGNvbW1hbmQgKGhhc2gvY2lwaGVyIHVzZWQgdG8gcHJvdGVjdCB0aGUgY29ubmVjdGlvbikgKi8KLQlEU1RfQ1JZUFRPLAotCS8qIFNlY3VyaXR5IGF0dHJpYnV0ZXMgZm9yIGdpdmVuIGNvbm5lY3Rpb24gKHBlcm1pc3Npb25zIGZvciBleGFtcGxlKSAqLwotCURTVF9TRUNVUklUWSwKLQkvKiBSZWdpc3RlciBnaXZlbiBub2RlIGluIHRoZSBibG9jayBsYXllciBzdWJzeXN0ZW0gKi8KLQlEU1RfU1RBUlQsCi0JRFNUX0NNRF9NQVgKLX07Ci0KLXN0cnVjdCBkc3RfY3RsCi17Ci0JLyogU3RvcmFnZSBuYW1lICovCi0JY2hhcgkJCW5hbWVbRFNUX05BTUVMRU5dOwotCS8qIENvbW1hbmQgZmxhZ3MgKi8KLQlfX3UzMgkJCWZsYWdzOwotCS8qIENvbW1hbmQgaXRzZWxmIChzZWUgYWJvdmUpICovCi0JX191MzIJCQljbWQ7Ci0JLyogTWF4aW11bSBudW1iZXIgb2YgcGFnZXMgcGVyIHNpbmdsZSByZXF1ZXN0IGluIHRoaXMgZGV2aWNlICovCi0JX191MzIJCQltYXhfcGFnZXM7Ci0JLyogU3RhbGUvZXJyb3IgdHJhbnNhY3Rpb24gc2Nhbm5pbmcgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KLQlfX3UzMgkJCXRyYW5zX3NjYW5fdGltZW91dDsKLQkvKiBNYXhpbXVtIG51bWJlciBvZiByZXRyeSBzZW5kcyBiZWZvcmUgY29tcGxldGluZyB0cmFuc2FjdGlvbiBhcyBicm9rZW4gKi8KLQlfX3UzMgkJCXRyYW5zX21heF9yZXRyaWVzOwotCS8qIFN0b3JhZ2Ugc2l6ZSAqLwotCV9fdTY0CQkJc2l6ZTsKLX07Ci0KLS8qIFJlcGx5IGNvbW1hbmQgY2FycmllcyBjb21wbGV0aW9uIHN0YXR1cyAqLwotc3RydWN0IGRzdF9jdGxfYWNrCi17Ci0Jc3RydWN0IGNuX21zZwkJbXNnOwotCWludAkJCWVycm9yOwotCWludAkJCXVudXNlZFszXTsKLX07Ci0KLS8qCi0gKiBVbmZvcnR1bmFsdGVseSBzb2NrZXQgYWRkcmVzcyBzdHJ1Y3R1cmUgaXMgbm90IGV4cG9ydGVkIHRvIHVzZXJzcGFjZQotICogYW5kIGlzIHJlZGVmaW5lZCB0aGVyZS4KLSAqLwotI2RlZmluZSBTQUREUl9NQVhfREFUQQkxMjgKLQotc3RydWN0IHNhZGRyIHsKLQkvKiBhZGRyZXNzIGZhbWlseSwgQUZfeHh4CSovCi0JdW5zaWduZWQgc2hvcnQJCXNhX2ZhbWlseTsKLQkvKiAxNCBieXRlcyBvZiBwcm90b2NvbCBhZGRyZXNzCSovCi0JY2hhcgkJCXNhX2RhdGFbU0FERFJfTUFYX0RBVEFdOwotCS8qIE51bWJlciBvZiBieXRlcyB1c2VkIGluIHNhX2RhdGEgKi8KLQl1bnNpZ25lZCBzaG9ydAkJc2FfZGF0YV9sZW47Ci19OwotCi0vKiBBZGRyZXNzIHN0cnVjdHVyZSAqLwotc3RydWN0IGRzdF9uZXR3b3JrX2N0bAotewotCS8qIFNvY2tldCB0eXBlOiBkYXRhZ3JhbSwgc3RyZWFtLi4uKi8KLQl1bnNpZ25lZCBpbnQJCXR5cGU7Ci0JLyogTGV0IG1lIGd1ZXNzLCBpcyBpdCBhIEp1cGl0ZXIgZGlhbWV0ZXI/ICovCi0JdW5zaWduZWQgaW50CQlwcm90bzsKLQkvKiBQZWVyJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzYWRkcgkJYWRkcjsKLX07Ci0KLXN0cnVjdCBkc3RfY3J5cHRvX2N0bAotewotCS8qIENpcGhlciBhbmQgaGFzaCBuYW1lcyAqLwotCWNoYXIJCQljaXBoZXJfYWxnb1tEU1RfTkFNRUxFTl07Ci0JY2hhcgkJCWhhc2hfYWxnb1tEU1RfTkFNRUxFTl07Ci0KLQkvKiBLZXkgc2l6ZXMuIENhbiBiZSB6ZXJvIGZvciBkaWdlc3QgZm9yIGV4YW1wbGUgKi8KLQl1bnNpZ25lZCBpbnQJCWNpcGhlcl9rZXlzaXplLCBoYXNoX2tleXNpemU7Ci0JLyogQWxpZ25tZW50LiBDYWxjdWxhdGVkIGJ5IHRoZSBEU1QgaXRzZWxmLiAqLwotCXVuc2lnbmVkIGludAkJY3J5cHRvX2F0dGFjaGVkX3NpemU7Ci0JLyogTnVtYmVyIG9mIHRocmVhZHMgdG8gcGVyZm9ybSBjcnlwdG8gb3BlcmF0aW9ucyAqLwotCWludAkJCXRocmVhZF9udW07Ci19OwotCi0vKiBFeHBvcnQgc2VjdXJpdHkgYXR0cmlidXRlcyBoYXZlIHRoaXMgYml0cyBjaGVja2VkIGluIHdoZW4gY2xpZW50IGNvbm5lY3RzICovCi0jZGVmaW5lIERTVF9QRVJNX1JFQUQJCSgxPDwwKQotI2RlZmluZSBEU1RfUEVSTV9XUklURQkJKDE8PDEpCi0KLS8qCi0gKiBSaWdodCBub3cgaXQgaXMgc2ltcGxlIG1vZGVsLCB3aGVyZSBlYWNoIHJlbW90ZSBhZGRyZXNzCi0gKiBpcyBhc3NpZ25lZCB0byBzZXQgb2YgcGVybWlzc2lvbnMgaXQgaXMgYWxsb3dlZCB0byBwZXJmb3JtLgotICogSW4gcmVhbCB3b3JsZCBibG9jayBkZXZpY2UgZG9lcyBub3Qga25vdyBhbnl0aGluZyBidXQKLSAqIHJlYWRpbmcgYW5kIHdyaXRpbmcsIHNvIGl0IHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoLgotICovCi1zdHJ1Y3QgZHN0X3NlY3VyZV91c2VyCi17Ci0JdW5zaWduZWQgaW50CQlwZXJtaXNzaW9uczsKLQlzdHJ1Y3Qgc2FkZHIJCWFkZHI7Ci19OwotCi0vKgotICogRXhwb3J0IGNvbnRyb2wgY29tbWFuZDogZGV2aWNlIHRvIGV4cG9ydCBhbmQgbmV0d29yayBhZGRyZXNzIHRvIGFjY2VwdAotICogY2xpZW50cyB0byB3b3JrIHdpdGggZ2l2ZW4gZGV2aWNlCi0gKi8KLXN0cnVjdCBkc3RfZXhwb3J0X2N0bAotewotCWNoYXIJCQlkZXZpY2VbRFNUX05BTUVMRU5dOwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwJY3RsOwotfTsKLQotZW51bSB7Ci0JRFNUX0NGRwk9IDEsIAkJLyogUmVxdWVzdCByZW1vdGUgY29uZmlndXJhdGlvbiAqLwotCURTVF9JTywJCQkvKiBJTyBjb21tYW5kICovCi0JRFNUX0lPX1JFU1BPTlNFLAkvKiBJTyByZXNwb25zZSAqLwotCURTVF9QSU5HLAkJLyogS2VlcGFsaXZlIG1lc3NhZ2UgKi8KLQlEU1RfTkNNRF9NQVgsCi19OwotCi1zdHJ1Y3QgZHN0X2NtZAotewotCS8qIE5ldHdvcmsgY29tbWFuZCBpdHNlbGYsIHNlZSBhYm92ZSAqLwotCV9fdTMyCQkJY21kOwotCS8qCi0JICogU2l6ZSBvZiB0aGUgYXR0YWNoZWQgZGF0YQotCSAqIChpbiBtb3N0IGNhc2VzLCBmb3IgUkVBRCBjb21tYW5kIGl0IG1lYW5zIGhvdyBtYW55IGJ5dGVzIHdlcmUgcmVxdWVzdGVkKQotCSAqLwotCV9fdTMyCQkJc2l6ZTsKLQkvKiBDcnlwdG8gc2l6ZTogbnVtYmVyIG9mIGF0dGFjaGVkIGJ5dGVzIHdpdGggZGlnZXN0L2htYWMgKi8KLQlfX3UzMgkJCWNzaXplOwotCS8qIEhlcmUgd2UgY2FuIGNhcnJ5IHNlY3JldCBkYXRhICovCi0JX191MzIJCQlyZXNlcnZlZDsKLQkvKiBSZWFkL3dyaXRlIGJpdHMsIHNlZSBob3cgdGhleSBhcmUgZW5jb2RlZCBpbiBiaW8gc3RydWN0dXJlICovCi0JX191NjQJCQlydzsKLQkvKiBCSU8gZmxhZ3MgKi8KLQlfX3U2NAkJCWZsYWdzOwotCS8qIFVuaXF1ZSBjb21tYW5kIGlkIChsaWtlIHRyYW5zYWN0aW9uIElEKSAqLwotCV9fdTY0CQkJaWQ7Ci0JLyogU2VjdG9yIHRvIHN0YXJ0IElPIGZyb20gKi8KLQlfX3U2NAkJCXNlY3RvcjsKLQkvKiBIYXNoIGRhdGEgaXMgcGxhY2VkIGFmdGVyIHRoaXMgaGVhZGVyICovCi0JX191OAkJCWhhc2hbMF07Ci19OwotCi0vKgotICogQ29udmVydCBjb21tYW5kIHRvL2Zyb20gbmV0d29yayBieXRlIG9yZGVyLgotICogV2UgZG8gbm90IHVzZSBodG9uKigpIGZ1bmN0aW9ucywgc2luY2UgdGhlcmUgaXMKLSAqIG5vIDY0LWJpdCBpbXBsZW1lbnRhdGlvbi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRzdF9jb252ZXJ0X2NtZChzdHJ1Y3QgZHN0X2NtZCAqYykKLXsKLQljLT5jbWQgPSBfX2NwdV90b19iZTMyKGMtPmNtZCk7Ci0JYy0+Y3NpemUgPSBfX2NwdV90b19iZTMyKGMtPmNzaXplKTsKLQljLT5zaXplID0gX19jcHVfdG9fYmUzMihjLT5zaXplKTsKLQljLT5zZWN0b3IgPSBfX2NwdV90b19iZTY0KGMtPnNlY3Rvcik7Ci0JYy0+aWQgPSBfX2NwdV90b19iZTY0KGMtPmlkKTsKLQljLT5mbGFncyA9IF9fY3B1X3RvX2JlNjQoYy0+ZmxhZ3MpOwotCWMtPnJ3ID0gX19jcHVfdG9fYmU2NChjLT5ydyk7Ci19Ci0KLS8qIFRyYW5zYWN0aW9uIGlkICovCi10eXBlZGVmIF9fdTY0IGRzdF9nZW5fdDsKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0KLSNpZmRlZiBDT05GSUdfRFNUX0RFQlVHCi0jZGVmaW5lIGRwcmludGsoZiwgYS4uLikgcHJpbnRrKEtFUk5fTk9USUNFIGYsICMjYSkKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCi0JZHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikge30KLSNlbmRpZgotCi1zdHJ1Y3QgZHN0X25vZGU7Ci0KLXN0cnVjdCBkc3RfdHJhbnMKLXsKLQkvKiBEU1Qgbm9kZSB3ZSBhcmUgd29ya2luZyB3aXRoICovCi0Jc3RydWN0IGRzdF9ub2RlCQkqbjsKLQotCS8qIEVudHJ5IGluc2lkZSB0cmFuc2FjdGlvbiB0cmVlICovCi0Jc3RydWN0IHJiX25vZGUJCXRyYW5zX2VudHJ5OwotCi0JLyogTWVybGluIGtpbGxzIHRoaXMgdHJhbnNhY3Rpb24gd2hlbiB0aGlzIG1lbW9yeSBjZWxsIGVxdWFscyB6ZXJvICovCi0JYXRvbWljX3QJCXJlZmNudDsKLQotCS8qIEhvdyB0aGlzIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQgYnkgY3J5cHRvIGVuZ2luZSAqLwotCXNob3J0CQkJZW5jOwotCS8qIEhvdyBtYW55IHRpbWVzIHRoaXMgdHJhbnNhY3Rpb24gd2FzIHJlc2VudCAqLwotCXNob3J0CQkJcmV0cmllczsKLQkvKiBDb21wbGV0aW9uIHN0YXR1cyAqLwotCWludAkJCWVycm9yOwotCi0JLyogV2hlbiBkaWQgd2Ugc2VuZCBpdCB0byB0aGUgcmVtb3RlIHBlZXIgKi8KLQlsb25nCQkJc2VuZF90aW1lOwotCi0JLyogTXkgbmFtZSBpcy4uLgotCSAqIFdlbGwsIGNvbXB1dGVycyBkb2VzIG5vdCBzcGVhaywgdGhleSBoYXZlIHVuaXF1ZSBpZCBpbnN0ZWFkICovCi0JZHN0X2dlbl90CQlnZW47Ci0KLQkvKiBCbG9jayBJTyB3ZSBhcmUgd29ya2luZyB3aXRoICovCi0Jc3RydWN0IGJpbwkJKmJpbzsKLQotCS8qIE5ldHdvcmsgY29tbWFuZCBmb3IgYWJvdmUgYmxvY2sgSU8gcmVxdWVzdCAqLwotCXN0cnVjdCBkc3RfY21kCQljbWQ7Ci19OwotCi1zdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUKLXsKLQkvKiBXaGF0IHNob3VsZCB3ZSBkbyB3aXRoIGFsbCBibG9jayByZXF1ZXN0cyAqLwotCXN0cnVjdCBjcnlwdG9faGFzaAkqaGFzaDsKLQlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIJKmNpcGhlcjsKLQotCS8qIFBvb2wgb2YgcGFnZXMgdXNlZCB0byBlbmNyeXB0IGRhdGEgaW50byBiZWZvcmUgc2VuZGluZyAqLwotCWludAkJCXBhZ2VfbnVtOwotCXN0cnVjdCBwYWdlCQkqKnBhZ2VzOwotCi0JLyogV2hhdCB0byBkbyB3aXRoIGN1cnJlbnQgcmVxdWVzdCAqLwotCWludAkJCWVuYzsKLQkvKiBXaG8gd2UgYXJlIGFuZCB3aGVyZSBkbyB3ZSBnbyAqLwotCXN0cnVjdCBzY2F0dGVybGlzdAkqc3JjLCAqZHN0OwotCi0JLyogTWF4aW11bSB0aW1lb3V0IHdhaXRpbmcgZm9yIGVuY3J5cHRpb24gdG8gYmUgY29tcGxldGVkICovCi0JbG9uZwkJCXRpbWVvdXQ7Ci0JLyogSVYgaXMgYSA2NC1iaXQgc2VxdWVudGlhbCBjb3VudGVyICovCi0JdTY0CQkJaXY7Ci0KLQkvKiBTZWNyZXQgZGF0YSAqLwotCXZvaWQJCQkqcHJpdmF0ZTsKLQotCS8qIENhY2hlZCB0ZW1wb3JhcnkgZGF0YSBsaXZlcyBoZXJlICovCi0JaW50CQkJc2l6ZTsKLQl2b2lkCQkJKmRhdGE7Ci19OwotCi1zdHJ1Y3QgZHN0X3N0YXRlCi17Ci0JLyogVGhlIG1haW4gc3RhdGUgcHJvdGVjdGlvbiAqLwotCXN0cnVjdCBtdXRleAkJc3RhdGVfbG9jazsKLQotCS8qIFBvbGxpbmcgbWFjaGluZXJ5IGZvciBzb2NrZXRzICovCi0Jd2FpdF9xdWV1ZV90IAkJd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAJKndoZWFkOwotCS8qIE1vc3Qgb2YgZXZlbnRzIGFyZSBiZWluZyB3YWl0ZWQgaGVyZSAqLwotCXdhaXRfcXVldWVfaGVhZF90IAl0aHJlYWRfd2FpdDsKLQotCS8qIFdobyBvd25zIHRoaXM/ICovCi0Jc3RydWN0IGRzdF9ub2RlCQkqbm9kZTsKLQotCS8qIE5ldHdvcmsgYWRkcmVzcyBmb3IgdGhpcyBzdGF0ZSAqLwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwJY3RsOwotCi0JLyogUGVybWlzc2lvbnMgdG8gd29yayB3aXRoOiByZWFkLW9ubHkgb3IgcncgY29ubmVjdGlvbiAqLwotCXUzMgkJCXBlcm1pc3Npb25zOwotCi0JLyogQ2FsbGVkIHdoZW4gd2UgbmVlZCB0byBjbGVhbiBwcml2YXRlIGRhdGEgKi8KLQl2b2lkCQkJKCogY2xlYW51cCkoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi0JLyogVXNlZCBieSB0aGUgc2VydmVyOiBCSU8gY29tcGxldGlvbiBxdWV1ZXMgQklPcyBoZXJlICovCi0Jc3RydWN0IGxpc3RfaGVhZAlyZXF1ZXN0X2xpc3Q7Ci0Jc3BpbmxvY2tfdAkJcmVxdWVzdF9sb2NrOwotCi0JLyogR3Vlc3Mgd2hhdD8gTm8sIGl0IGlzIG5vdCBudW1iZXIgb2YgcGxhbmV0cyAqLwotCWF0b21pY190CQlyZWZjbnQ7Ci0KLQkvKiBUaGlzIGZsYWdzIGlzIHNldCB3aGVuIGNvbm5lY3Rpb24gc2hvdWxkIGJlIGRyb3BwZWQgKi8KLQlpbnQJCQluZWVkX2V4aXQ7Ci0KLQkvKgotCSAqIFNvY2tldCB0byB3b3JrIHdpdGguIFNlY29uZCBwb2ludGVyIGlzIHVzZWQgZm9yCi0JICogbG9ja2xlc3MgY2hlY2sgaWYgc29ja2V0IHdhcyBjaGFuZ2VkIGJlZm9yZSBwZXJmb3JtaW5nCi0JICogbmV4dCBhY3Rpb24gKGxpa2Ugd29ya2luZyB3aXRoIGNhY2hlZCBwb2xsaW5nIHJlc3VsdCkKLQkgKi8KLQlzdHJ1Y3Qgc29ja2V0CQkqc29ja2V0LCAqcmVhZF9zb2NrZXQ7Ci0KLQkvKiBDYWNoZWQgcHJlYWxsb2NhdGVkIGRhdGEgKi8KLQl2b2lkCQkJKmRhdGE7Ci0JdW5zaWduZWQgaW50CQlzaXplOwotCi0JLyogQ3VycmVudGx5IHByb2Nlc3NlZCBjb21tYW5kICovCi0Jc3RydWN0IGRzdF9jbWQJCWNtZDsKLX07Ci0KLXN0cnVjdCBkc3RfaW5mbwotewotCS8qIERldmljZSBzaXplICovCi0JdTY0CQkJc2l6ZTsKLQotCS8qIExvY2FsIGRldmljZSBuYW1lIGZvciBleHBvcnQgZGV2aWNlcyAqLwotCWNoYXIJCQlsb2NhbFtEU1RfTkFNRUxFTl07Ci0KLQkvKiBOZXR3b3JrIHNldHVwICovCi0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bAluZXQ7Ci0KLQkvKiBTeXNmcyBiaXRzIHVzZSB0aGlzICovCi0Jc3RydWN0IGRldmljZQkJZGV2aWNlOwotfTsKLQotc3RydWN0IGRzdF9ub2RlCi17Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlX2VudHJ5OwotCi0JLyogSGksIG15IG5hbWUgaXMgc3RvcmVkIGhlcmUgKi8KLQljaGFyCQkJbmFtZVtEU1RfTkFNRUxFTl07Ci0JLyogTXkgY2FjaGUgbmFtZSBpcyBzdG9yZWQgaGVyZSAqLwotCWNoYXIJCQljYWNoZV9uYW1lW0RTVF9OQU1FTEVOXTsKLQotCS8qIEJsb2NrIGRldmljZSBhdHRhY2hlZCB0byBnaXZlbiBub2RlLgotCSAqIE9ubHkgdmFsaWQgZm9yIGV4cG9ydGluZyBub2RlcyAqLwotCXN0cnVjdCBibG9ja19kZXZpY2UgCSpiZGV2OwotCS8qIE5ldHdvcmsgc3RhdGUgbWFjaGluZSBmb3IgZ2l2ZW4gcGVlciAqLwotCXN0cnVjdCBkc3Rfc3RhdGUJKnN0YXRlOwotCi0JLyogQmxvY2sgSU8gbWFjaGluZXJ5ICovCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUJKnF1ZXVlOwotCXN0cnVjdCBnZW5kaXNrCQkqZGlzazsKLQotCS8qIE51bWJlciBvZiB0aHJlYWRzIGluIHByb2Nlc3NpbmcgcG9vbCAqLwotCWludAkJCXRocmVhZF9udW07Ci0JLyogTWF4aW11bSBudW1iZXIgb2YgcGFnZXMgaW4gc2luZ2xlIElPICovCi0JaW50CQkJbWF4X3BhZ2VzOwotCi0JLyogSSdtIHRoYXQgYmlnIGluIGJ5dGVzICovCi0JbG9mZl90CQkJc2l6ZTsKLQotCS8qIEV4cG9ydGVkIHRvIHVzZXJzcGFjZSBub2RlIGluZm9ybWF0aW9uICovCi0Jc3RydWN0IGRzdF9pbmZvCQkqaW5mbzsKLQotCS8qCi0JICogU2VjdXJpdHkgYXR0cmlidXRlIGxpc3QuCi0JICogVXNlZCBvbmx5IGJ5IGV4cG9ydGluZyBub2RlIGN1cnJlbnRseS4KLQkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCXNlY3VyaXR5X2xpc3Q7Ci0Jc3RydWN0IG11dGV4CQlzZWN1cml0eV9sb2NrOwotCi0JLyoKLQkgKiBXaGVuIHRoaXMgdW5lcmZsb3dzIGJlbG93IHplcm8sIHVuaXZlcnNpdHkgY29sbGFwc2VzLgotCSAqIEJ1dCB0aGlzIHdpbGwgbm90IGhhcHBlbiwgc2luY2Ugbm9kZSB3aWxsIGJlIGZyZWVkLAotCSAqIHdoZW4gcmVmZXJlbmNlIGNvdW50ZXIgcmVhY2hlcyB6ZXJvLgotCSAqLwotCWF0b21pY190CQlyZWZjbnQ7Ci0KLQkvKiBIb3cgcHJlY2lzZWx5IHNob3VsZCBJIGJlIHN0YXJ0ZWQ/ICovCi0JaW50IAkJCSgqc3RhcnQpKHN0cnVjdCBkc3Rfbm9kZSAqKTsKLQotCS8qIENyeXB0byBjYXBhYmlsaXRpZXMgKi8KLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwJY3J5cHRvOwotCXU4CQkJKmhhc2hfa2V5OwotCXU4CQkJKmNpcGhlcl9rZXk7Ci0KLQkvKiBQb29sIG9mIHByb2Nlc3NpbmcgdGhyZWFkICovCi0Jc3RydWN0IHRocmVhZF9wb29sCSpwb29sOwotCi0JLyogVHJhbnNhY3Rpb24gSURzIGxpdmUgaGVyZSAqLwotCWF0b21pY19sb25nX3QJCWdlbjsKLQotCS8qCi0JICogSG93IGZyZXF1ZW50bHkgYW5kIGhvdyBtYW55IHRpbWVzIHRyYW5zYWN0aW9uCi0JICogdHJlZSBzaG91bGQgYmUgc2Nhbm5lZCB0byBkcm9wIHN0YWxlIG9iamVjdHMuCi0JICovCi0JbG9uZwkJCXRyYW5zX3NjYW5fdGltZW91dDsKLQlpbnQJCQl0cmFuc19tYXhfcmV0cmllczsKLQotCS8qIFNtYWxsIGdub21lcyBsaXZlIGhlcmUgKi8KLQlzdHJ1Y3QgcmJfcm9vdAkJdHJhbnNfcm9vdDsKLQlzdHJ1Y3QgbXV0ZXgJCXRyYW5zX2xvY2s7Ci0KLQkvKgotCSAqIFRyYW5zYWN0aW9uIGNhY2hlL21lbW9yeSBwb29sLgotCSAqIEl0IGlzIGJpZyBlbm91Z2ggdG8gY29udGFpbiBub3Qgb25seSB0cmFuc2FjdGlvbgotCSAqIGl0c2VsZiwgYnV0IGFkZGl0aW9uYWwgY3J5cHRvIGRhdGEgKGRpZ2VzdC9obWFjKS4KLQkgKi8KLQlzdHJ1Y3Qga21lbV9jYWNoZQkqdHJhbnNfY2FjaGU7Ci0JbWVtcG9vbF90CQkqdHJhbnNfcG9vbDsKLQotCS8qIFRoaXMgZW50aXR5IHNjYW5zIHRyYW5zYWN0aW9uIHRyZWUgKi8KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIAl0cmFuc193b3JrOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKLX07Ci0KLS8qIEtlcm5lbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlICovCi1zdHJ1Y3QgZHN0X3NlY3VyZQotewotCXN0cnVjdCBsaXN0X2hlYWQJc2VjX2VudHJ5OwotCXN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIJc2VjOwotfTsKLQotaW50IGRzdF9wcm9jZXNzX2JpbyhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbyk7Ci0KLWludCBkc3Rfbm9kZV9pbml0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfbmV0d29ya19jdGwgKnIpOwotaW50IGRzdF9ub2RlX2luaXRfbGlzdGVuZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X3N0YXRlICpkc3Rfc3RhdGVfZ2V0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCUJVR19PTihhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkgPT0gMCk7Ci0JYXRvbWljX2luYygmc3QtPnJlZmNudCk7Ci0JcmV0dXJuIHN0OwotfQotCi12b2lkIGRzdF9zdGF0ZV9wdXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi1zdHJ1Y3QgZHN0X3N0YXRlICpkc3Rfc3RhdGVfYWxsb2Moc3RydWN0IGRzdF9ub2RlICpuKTsKLWludCBkc3Rfc3RhdGVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci12b2lkIGRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLXZvaWQgZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotaW50IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLXZvaWQgZHN0X2R1bXBfYWRkcihzdHJ1Y3Qgc29ja2V0ICpzaywgc3RydWN0IHNvY2thZGRyICpzYSwgY2hhciAqc3RyKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF9zdGF0ZV9sb2NrKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCW11dGV4X2xvY2soJnN0LT5zdGF0ZV9sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF9zdGF0ZV91bmxvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+c3RhdGVfbG9jayk7Ci19Ci0KLXZvaWQgZHN0X3BvbGxfZXhpdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci1pbnQgZHN0X3BvbGxfaW5pdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRzdF9zdGF0ZV9wb2xsKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXVuc2lnbmVkIGludCByZXZlbnRzID0gUE9MTEhVUCB8IFBPTExFUlI7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JaWYgKHN0LT5zb2NrZXQpCi0JCXJldmVudHMgPSBzdC0+c29ja2V0LT5vcHMtPnBvbGwoTlVMTCwgc3QtPnNvY2tldCwgTlVMTCk7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQlyZXR1cm4gcmV2ZW50czsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZHN0X3RocmVhZF9zZXR1cCh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCi12b2lkIGRzdF9ub2RlX3B1dChzdHJ1Y3QgZHN0X25vZGUgKm4pOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkc3Rfbm9kZSAqZHN0X25vZGVfZ2V0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlhdG9taWNfaW5jKCZuLT5yZWZjbnQpOwotCXJldHVybiBuOwotfQotCi1pbnQgZHN0X2RhdGFfcmVjdihzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpOwotaW50IGRzdF9yZWN2X2NkYXRhKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpjZGF0YSk7Ci1pbnQgZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBtb3JlKTsKLQotaW50IGRzdF9zZW5kX2JpbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgc3RydWN0IGRzdF9jbWQgKmNtZCwgc3RydWN0IGJpbyAqYmlvKTsKLQotaW50IGRzdF9wcm9jZXNzX2lvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLWludCBkc3RfZXhwb3J0X2NyeXB0byhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbyk7Ci1pbnQgZHN0X2V4cG9ydF9zZW5kX2JpbyhzdHJ1Y3QgYmlvICpiaW8pOwotaW50IGRzdF9zdGFydF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuKTsKLQotaW50IF9faW5pdCBkc3RfZXhwb3J0X2luaXQodm9pZCk7Ci12b2lkIGRzdF9leHBvcnRfZXhpdCh2b2lkKTsKLQotLyogUHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIGV4cG9ydCBibG9jayBJTyByZXF1ZXN0cyAqLwotc3RydWN0IGRzdF9leHBvcnRfcHJpdgotewotCXN0cnVjdCBsaXN0X2hlYWQJCXJlcXVlc3RfZW50cnk7Ci0Jc3RydWN0IGRzdF9zdGF0ZQkJKnN0YXRlOwotCXN0cnVjdCBiaW8JCQkqYmlvOwotCXN0cnVjdCBkc3RfY21kCQkJY21kOwotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF90cmFuc19nZXQoc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlhdG9taWNfaW5jKCZ0LT5yZWZjbnQpOwotfQotCi1zdHJ1Y3QgZHN0X3RyYW5zICpkc3RfdHJhbnNfc2VhcmNoKHN0cnVjdCBkc3Rfbm9kZSAqbm9kZSwgZHN0X2dlbl90IGdlbik7Ci1pbnQgZHN0X3RyYW5zX3JlbW92ZShzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLWludCBkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayhzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLXZvaWQgZHN0X3RyYW5zX3B1dChzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLQotLyoKLSAqIENvbnZlcnQgYmlvIGludG8gbmV0d29yayBjb21tYW5kLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X2Jpb190b19jbWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NtZCAqY21kLAotCQl1MzIgY29tbWFuZCwgdTY0IGlkKQotewotCWNtZC0+Y21kID0gY29tbWFuZDsKLQljbWQtPmZsYWdzID0gKGJpby0+YmlfZmxhZ3MgPDwgQklPX1BPT0xfQklUUykgPj4gQklPX1BPT0xfQklUUzsKLQljbWQtPnJ3ID0gYmlvLT5iaV9ydzsKLQljbWQtPnNpemUgPSBiaW8tPmJpX3NpemU7Ci0JY21kLT5jc2l6ZSA9IDA7Ci0JY21kLT5pZCA9IGlkOwotCWNtZC0+c2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7Ci19OwotCi1pbnQgZHN0X3RyYW5zX3NlbmQoc3RydWN0IGRzdF90cmFucyAqdCk7Ci1pbnQgZHN0X3RyYW5zX2NyeXB0byhzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLQotaW50IGRzdF9ub2RlX2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwpOwotdm9pZCBkc3Rfbm9kZV9jcnlwdG9fZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pOwotCi1zdGF0aWMgaW5saW5lIGludCBkc3RfbmVlZF9jcnlwdG8oc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqYyA9ICZuLT5jcnlwdG87Ci0JLyoKLQkgKiBMb2dpY2FsIE9SIGlzIGFwcHJvcHJpYXRlIGhlcmUsIGJ1dCBib29sZWFuIG9uZSBwcm9kdWNlcwotCSAqIG1vcmUgb3B0aW1hbCBjb2RlLCBzbyBpdCBpcyB1c2VkIGluc3RlYWQuCi0JICovCi0JcmV0dXJuIChjLT5oYXNoX2FsZ29bMF0gfCBjLT5jaXBoZXJfYWxnb1swXSk7Ci19Ci0KLWludCBkc3Rfbm9kZV90cmFuc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgdW5zaWduZWQgaW50IHNpemUpOwotdm9pZCBkc3Rfbm9kZV90cmFuc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbik7Ci0KLS8qCi0gKiBQb29sIG9mIHRocmVhZHMuCi0gKiBSZWFkeSBsaXN0IGNvbnRhaW5zIHRocmVhZHMgY3VycmVudGx5IGZyZWUgdG8gYmUgdXNlZCwKLSAqIGFjdGl2ZSBvbmUgY29udGFpbnMgdGhyZWFkcyB3aXRoIHNvbWUgd29yayBzY2hlZHVsZWQgZm9yIHRoZW0uCi0gKiBDYWxsZXIgY2FuIHdhaXQgaW4gZ2l2ZW4gcXVldWUgd2hlbiB0aHJlYWQgaXMgcmVhZHkuCi0gKi8KLXN0cnVjdCB0aHJlYWRfcG9vbAotewotCWludAkJCXRocmVhZF9udW07Ci0Jc3RydWN0IG11dGV4CQl0aHJlYWRfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXJlYWR5X2xpc3QsIGFjdGl2ZV9saXN0OwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKLX07Ci0KLXZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnApOwotdm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyX2lkKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwgdW5zaWduZWQgaW50IGlkKTsKLWludCB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJY2hhciAqbmFtZSwKLQkJdW5zaWduZWQgaW50IGlkLAotCQl2b2lkICooKiBpbml0KSh2b2lkICpkYXRhKSwKLQkJdm9pZCAoKiBjbGVhbnVwKSh2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSk7Ci0KLXZvaWQgdGhyZWFkX3Bvb2xfZGVzdHJveShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnApOwotc3RydWN0IHRocmVhZF9wb29sICp0aHJlYWRfcG9vbF9jcmVhdGUoaW50IG51bSwgY2hhciAqbmFtZSwKLQkJdm9pZCAqKCogaW5pdCkodm9pZCAqZGF0YSksCi0JCXZvaWQgKCogY2xlYW51cCkodm9pZCAqZGF0YSksCi0JCXZvaWQgKmRhdGEpOwotCi1pbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGUoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQlpbnQgKCogc2V0dXApKHZvaWQgKnN0b3JlZF9wcml2YXRlLCB2b2lkICpzZXR1cF9kYXRhKSwKLQkJaW50ICgqIGFjdGlvbikodm9pZCAqc3RvcmVkX3ByaXZhdGUsIHZvaWQgKnNldHVwX2RhdGEpLAotCQl2b2lkICpzZXR1cF9kYXRhLCBsb25nIHRpbWVvdXQpOwotaW50IHRocmVhZF9wb29sX3NjaGVkdWxlX3ByaXZhdGUoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQlpbnQgKCogc2V0dXApKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQlpbnQgKCogYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSwgbG9uZyB0aW1lb3V0LCB2b2lkICppZCk7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX19EU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGYuaCBiL2luY2x1ZGUvbGludXgvZWxmLmgKaW5kZXggOTBhNGVkMC4uMGNjNGQ1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi5oCkBAIC0zNjEsNyArMzYxLDcgQEAKICNkZWZpbmUgTlRfUFBDX1ZTWAkweDEwMgkJLyogUG93ZXJQQyBWU1ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UXzM4Nl9UTFMJMHgyMDAJCS8qIGkzODYgVExTIHNsb3RzIChzdHJ1Y3QgdXNlcl9kZXNjKSAqLwogI2RlZmluZSBOVF8zODZfSU9QRVJNCTB4MjAxCQkvKiB4ODYgaW8gcGVybWlzc2lvbiBiaXRtYXAgKDE9ZGVueSkgKi8KLSNkZWZpbmUgTlRfUFJYU1RBVFVTCTB4MzAwCQkvKiBzMzkwIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcyAqLworI2RlZmluZSBOVF9TMzkwX0hJR0hfR1BSUwkweDMwMAkvKiBzMzkwIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcyAqLwogCiAKIC8qIE5vdGUgaGVhZGVyIGluIGEgUFRfTk9URSBzZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oCmluZGV4IGYwN2YzNGQuLjI1ODA4OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oCkBAIC03Miw2ICs3Miw4IEBACiAJc3RydWN0IGlub2RlICogc19qb3VybmFsX2lub2RlOwogCXN0cnVjdCBqb3VybmFsX3MgKiBzX2pvdXJuYWw7CiAJc3RydWN0IGxpc3RfaGVhZCBzX29ycGhhbjsKKwlzdHJ1Y3QgbXV0ZXggc19vcnBoYW5fbG9jazsKKwlzdHJ1Y3QgbXV0ZXggc19yZXNpemVfbG9jazsKIAl1bnNpZ25lZCBsb25nIHNfY29tbWl0X2ludGVydmFsOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmpvdXJuYWxfYmRldjsKICNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKaW5kZXggY2Y4MmQ1MS4uZDdiNWRkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaApAQCAtNDQsMTMgKzQ0LDEzIEBACiAKICNkZWZpbmUgRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhzYikJKEVYVDNfU0lOR0xFREFUQV9UUkFOU19CTE9DS1MgKyBcCiAJCQkJCSBFWFQzX1hBVFRSX1RSQU5TX0JMT0NLUyAtIDIgKyBcCi0JCQkJCSAyKkVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTKHNiKSkKKwkJCQkJIEVYVDNfTUFYUVVPVEFTX1RSQU5TX0JMT0NLUyhzYikpCiAKIC8qIERlbGV0ZSBvcGVyYXRpb25zIHBvdGVudGlhbGx5IGhpdCBvbmUgZGlyZWN0b3J5J3MgbmFtZXNwYWNlIHBsdXMgYW4KICAqIGVudGlyZSBpbm9kZSwgcGx1cyBhcmJpdHJhcnkgYW1vdW50cyBvZiBiaXRtYXAvaW5kaXJlY3Rpb24gZGF0YS4gIEJlCiAgKiBnZW5lcm91cy4gIFdlIGNhbiBncm93IHRoZSBkZWxldGUgdHJhbnNhY3Rpb24gbGF0ZXIgaWYgbmVjZXNzYXJ5LiAqLwogCi0jZGVmaW5lIEVYVDNfREVMRVRFX1RSQU5TX0JMT0NLUyhzYikJKDIgKiBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKHNiKSArIDY0KQorI2RlZmluZSBFWFQzX0RFTEVURV9UUkFOU19CTE9DS1Moc2IpICAgKEVYVDNfTUFYUVVPVEFTX1RSQU5TX0JMT0NLUyhzYikgKyA2NCkKIAogLyogRGVmaW5lIGFuIGFyYml0cmFyeSBsaW1pdCBmb3IgdGhlIGFtb3VudCBvZiBkYXRhIHdlIHdpbGwgYW50aWNpcGF0ZQogICogd3JpdGluZyB0byBhbnkgZ2l2ZW4gdHJhbnNhY3Rpb24uICBGb3IgdW5ib3VuZGVkIHRyYW5zYWN0aW9ucyBzdWNoIGFzCkBAIC04Niw2ICs4Niw5IEBACiAjZGVmaW5lIEVYVDNfUVVPVEFfSU5JVF9CTE9DS1Moc2IpIDAKICNkZWZpbmUgRVhUM19RVU9UQV9ERUxfQkxPQ0tTKHNiKSAwCiAjZW5kaWYKKyNkZWZpbmUgRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKHNiKSAoTUFYUVVPVEFTKkVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTKHNiKSkKKyNkZWZpbmUgRVhUM19NQVhRVU9UQVNfSU5JVF9CTE9DS1Moc2IpIChNQVhRVU9UQVMqRVhUM19RVU9UQV9JTklUX0JMT0NLUyhzYikpCisjZGVmaW5lIEVYVDNfTUFYUVVPVEFTX0RFTF9CTE9DS1Moc2IpIChNQVhRVU9UQVMqRVhUM19RVU9UQV9ERUxfQkxPQ0tTKHNiKSkKIAogaW50CiBleHQzX21hcmtfaWxvY19kaXJ0eShoYW5kbGVfdCAqaGFuZGxlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWVtYXAuaCBiL2luY2x1ZGUvbGludXgvZmllbWFwLmgKaW5kZXggOTM0ZTIyZC4uZDgzMDc0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWVtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpZW1hcC5oCkBAIC02Miw1ICs2Miw3IEBACiAjZGVmaW5lIEZJRU1BUF9FWFRFTlRfTUVSR0VECQkweDAwMDAxMDAwIC8qIEZpbGUgZG9lcyBub3QgbmF0aXZlbHkKIAkJCQkJCSAgICAqIHN1cHBvcnQgZXh0ZW50cy4gUmVzdWx0CiAJCQkJCQkgICAgKiBtZXJnZWQgZm9yIGVmZmljaWVuY3kuICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfU0hBUkVECQkweDAwMDAyMDAwIC8qIFNwYWNlIHNoYXJlZCB3aXRoIG90aGVyCisJCQkJCQkgICAgKiBmaWxlcy4gKi8KIAogI2VuZGlmIC8qIF9MSU5VWF9GSUVNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAppbmRleCBjNmIzY2EzLi4xZjcxNmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaApAQCAtMzQwLDYgKzM0MCw5IEBACiAgKiBUaGUgQGNsb3N1cmUgZmllbGQgaXMgcGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIGluIHRoZSByZXNwb25zZSBldmVudC4KICAqIFRoZSBAaGFuZGxlIGZpZWxkIGlzIGFuIG91dCBwYXJhbWV0ZXIsIHJldHVybmluZyBhIGhhbmRsZSB0byB0aGUgYWxsb2NhdGVkCiAgKiByYW5nZSB0byBiZSB1c2VkIGZvciBsYXRlciBkZWFsbG9jYXRpb24gb2YgdGhlIHJhbmdlLgorICoKKyAqIFRoZSBhZGRyZXNzIHJhbmdlIGlzIGFsbG9jYXRlZCBvbiBhbGwgbG9jYWwgbm9kZXMuICBUaGUgYWRkcmVzcyBhbGxvY2F0aW9uCisgKiBpcyBleGNsdXNpdmUgZXhjZXB0IGZvciB0aGUgRkNQIGNvbW1hbmQgYW5kIHJlc3BvbnNlIHJlZ2lzdGVycy4KICAqLwogc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUgewogCV9fdTY0IG9mZnNldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaCBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaAppbmRleCA5NDE2YTQ2Li5hMGU2NzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCkBAIC0yNDgsOCArMjQ4LDggQEAKIAkJCQkJICB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogCQkJCQkgIHZvaWQgKmNhbGxiYWNrX2RhdGEpOwogLyoKLSAqIEltcG9ydGFudCBub3RlOiAgVGhlIGNhbGxiYWNrIG11c3QgZ3VhcmFudGVlIHRoYXQgZWl0aGVyIGZ3X3NlbmRfcmVzcG9uc2UoKQotICogb3Iga2ZyZWUoKSBpcyBjYWxsZWQgb24gdGhlIEByZXF1ZXN0LgorICogSW1wb3J0YW50IG5vdGU6ICBFeGNlcHQgZm9yIHRoZSBGQ1AgcmVnaXN0ZXJzLCB0aGUgY2FsbGJhY2sgbXVzdCBndWFyYW50ZWUKKyAqIHRoYXQgZWl0aGVyIGZ3X3NlbmRfcmVzcG9uc2UoKSBvciBrZnJlZSgpIGlzIGNhbGxlZCBvbiB0aGUgQHJlcXVlc3QuCiAgKi8KIHR5cGVkZWYgdm9pZCAoKmZ3X2FkZHJlc3NfY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQkJICAgICAgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggY2NhMTkxOS4uOTE0N2NhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTYyNCw4ICsxNjI0LDYgQEAKICAqCQkJb24gdGhlIGJpdCBhZGRyZXNzIG9uY2UgaXQgaXMgZG9uZS4KICAqCiAgKiBROiBXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gSV9XSUxMX0ZSRUUgYW5kIElfRlJFRUlORz8KLSAqIFE6IGlncmFiKCkgb25seSBjaGVja3Mgb24gKElfRlJFRUlOR3xJX1dJTExfRlJFRSkuICBTaG91bGQgaXQgYWxzbyBjaGVjayBvbgotICogICAgSV9DTEVBUj8gIElmIG5vdCwgd2h5PwogICovCiAjZGVmaW5lIElfRElSVFlfU1lOQwkJMQogI2RlZmluZSBJX0RJUlRZX0RBVEFTWU5DCTIKQEAgLTIyOTksNiArMjI5Nyw3IEBACiBleHRlcm4gaW50IGdlbmVyaWNfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqLCBjaGFyIF9fdXNlciAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgZ2VuZXJpY19maWxsYXR0cihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGtzdGF0ICopOwogZXh0ZXJuIGludCB2ZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7Cit2b2lkIF9faW5vZGVfYWRkX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcyk7CiB2b2lkIGlub2RlX2FkZF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpOwogdm9pZCBpbm9kZV9zdWJfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKTsKIGxvZmZfdCBpbm9kZV9nZXRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSk7CkBAIC0yNDY0LDUgKzI0NjMsOCBAQAogCiBpbnQgX19pbml0IGdldF9maWxlc3lzdGVtX2xpc3QoY2hhciAqYnVmKTsKIAorI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDBcMDA0XDAwMlwwMDYiWyh4KSZPX0FDQ01PREVdKQorI2RlZmluZSBPUEVOX0ZNT0RFKGZsYWcpICgoX19mb3JjZSBmbW9kZV90KSgoZmxhZyArIDEpICYgT19BQ0NNT0RFKSkKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggZDk3MjRhMi4uMTYzYzg0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC04MzIsNyArODMyLDcgQEAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9ERUxBWV9CQQkJMHgwNDAwCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVCQkweDA4MDAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDAJCTB4MTAwMAotI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1BTTVBfU1VQUE9SVAkJMHgyMDAwCisjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfUkVTRVJWRUQJCTB4MjAwMAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQXzQwTUhaX0lOVE9MRVJBTlQJMHg0MDAwCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfTFNJR19UWE9QX1BST1QJCTB4ODAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCmluZGV4IDY5OWU4NWMuLmIyMzA0OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCkBAIC04MSw2ICs4MSw3IEBACiAjZGVmaW5lIElOX0RFVl9GT1JXQVJEKGluX2RldikJCUlOX0RFVl9DT05GX0dFVCgoaW5fZGV2KSwgRk9SV0FSRElORykKICNkZWZpbmUgSU5fREVWX01GT1JXQVJEKGluX2RldikJCUlOX0RFVl9BTkRDT05GKChpbl9kZXYpLCBNQ19GT1JXQVJESU5HKQogI2RlZmluZSBJTl9ERVZfUlBGSUxURVIoaW5fZGV2KQkJSU5fREVWX01BWENPTkYoKGluX2RldiksIFJQX0ZJTFRFUikKKyNkZWZpbmUgSU5fREVWX1NSQ19WTUFSSyhpbl9kZXYpICAgIAlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBTUkNfVk1BUkspCiAjZGVmaW5lIElOX0RFVl9TT1VSQ0VfUk9VVEUoaW5fZGV2KQlJTl9ERVZfQU5EQ09ORigoaW5fZGV2KSwgXAogCQkJCQkJICAgICAgIEFDQ0VQVF9TT1VSQ0VfUk9VVEUpCiAjZGVmaW5lIElOX0RFVl9BQ0NFUFRfTE9DQUwoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBBQ0NFUFRfTE9DQUwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IGYxMDExZjcuLjYzOGNlNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC02NTMsNiArNjUzLDcgQEAKIAkgKiB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2guCiAJICovCiAJdW5zaWduZWQgaW50IHRfc3luY2hyb25vdXNfY29tbWl0OjE7CisJdW5zaWduZWQgaW50IHRfZmx1c2hlZF9kYXRhX2Jsb2NrczoxOwogCiAJLyoKIAkgKiBGb3IgdXNlIGJ5IHRoZSBmaWxlc3lzdGVtIHRvIHN0b3JlIGZzLXNwZWNpZmljIGRhdGEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZpZm8uaCBiL2luY2x1ZGUvbGludXgva2ZpZm8uaAppbmRleCBhZDZiZGY1Li43YzZiMzJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZmlmby5oCisrKyBiL2luY2x1ZGUvbGludXgva2ZpZm8uaApAQCAtMSw2ICsxLDcgQEAKIC8qCi0gKiBBIHNpbXBsZSBrZXJuZWwgRklGTyBpbXBsZW1lbnRhdGlvbi4KKyAqIEEgZ2VuZXJpYyBrZXJuZWwgRklGTyBpbXBsZW1lbnRhdGlvbi4KICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RlZmFuaSBTZWlib2xkIDxzdGVmYW5pQHNlaWJvbGQubmV0PgogICogQ29weXJpZ2h0IChDKSAyMDA0IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE4LDYgKzE5LDI1IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCiAgKi8KKworLyoKKyAqIEhvd3RvIHBvcnRpbmcgZHJpdmVycyB0byB0aGUgbmV3IGdlbmVyaWMgZmlmbyBBUEk6CisgKgorICogLSBNb2RpZnkgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSAic3RydWN0IGtmaWZvICoiIG9iamVjdCBpbnRvIGEKKyAqICAgaW4tcGxhY2UgInN0cnVjdCBrZmlmbyIgb2JqZWN0CisgKiAtIEluaXQgdGhlIGluLXBsYWNlIG9iamVjdCB3aXRoIGtmaWZvX2FsbG9jKCkgb3Iga2ZpZm9faW5pdCgpCisgKiAgIE5vdGU6IFRoZSBhZGRyZXNzIG9mIHRoZSBpbi1wbGFjZSAic3RydWN0IGtmaWZvIiBvYmplY3QgbXVzdCBiZQorICogICBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb25zCisgKiAtIFJlcGxhY2UgdGhlIHVzZSBvZiBfX2tmaWZvX3B1dCBpbnRvIGtmaWZvX2luIGFuZCBfX2tmaWZvX2dldAorICogICBpbnRvIGtmaWZvX291dAorICogLSBSZXBsYWNlIHRoZSB1c2Ugb2Yga2ZpZm9fcHV0IGludG8ga2ZpZm9faW5fbG9ja2VkIGFuZCBrZmlmb19nZXQKKyAqICAgaW50byBrZmlmb19vdXRfbG9ja2VkCisgKiAgIE5vdGU6IHRoZSBzcGlubG9jayBwb2ludGVyIGZvcm1lcmx5IHBhc3NlZCB0byBrZmlmb19pbml0L2tmaWZvX2FsbG9jCisgKiAgIG11c3QgYmUgcGFzc2VkIG5vdyB0byB0aGUga2ZpZm9faW5fbG9ja2VkIGFuZCBrZmlmb19vdXRfbG9ja2VkCisgKiAgIGFzIHRoZSBsYXN0IHBhcmFtZXRlci4KKyAqIC0gQWxsIGZvcm1lcmx5IG5hbWUgX19rZmlmb18qIGZ1bmN0aW9ucyBoYXMgYmVlbiByZW5hbWVkIGludG8ga2ZpZm9fKgorICovCisKICNpZm5kZWYgX0xJTlVYX0tGSUZPX0gKICNkZWZpbmUgX0xJTlVYX0tGSUZPX0gKIApAQCAtMjksMTI0ICs0OSw1NjIgQEAKIAl1bnNpZ25lZCBpbnQgc2l6ZTsJLyogdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgaW47CS8qIGRhdGEgaXMgYWRkZWQgYXQgb2Zmc2V0IChpbiAlIHNpemUpICovCiAJdW5zaWduZWQgaW50IG91dDsJLyogZGF0YSBpcyBleHRyYWN0ZWQgZnJvbSBvZmYuIChvdXQgJSBzaXplKSAqLwotCXNwaW5sb2NrX3QgKmxvY2s7CS8qIHByb3RlY3RzIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyAqLwogfTsKIAotZXh0ZXJuIHN0cnVjdCBrZmlmbyAqa2ZpZm9faW5pdCh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplLAotCQkJCWdmcF90IGdmcF9tYXNrLCBzcGlubG9ja190ICpsb2NrKTsKLWV4dGVybiBzdHJ1Y3Qga2ZpZm8gKmtmaWZvX2FsbG9jKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgc3BpbmxvY2tfdCAqbG9jayk7Ci1leHRlcm4gdm9pZCBrZmlmb19mcmVlKHN0cnVjdCBrZmlmbyAqZmlmbyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fcHV0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2dldChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKTsKKy8qCisgKiBNYWNyb3MgZm9yIGRlY2xhcmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUga2ZpZm8gZGF0YXR5cGUKKyAqLworCisvKiBoZWxwZXIgbWFjcm8gKi8KKyNkZWZpbmUgX19rZmlmb19pbml0aWFsaXplcihzLCBiKSBcCisJKHN0cnVjdCBrZmlmbykgeyBcCisJCS5zaXplCT0gcywgXAorCQkuaW4JPSAwLCBcCisJCS5vdXQJPSAwLCBcCisJCS5idWZmZXIgPSBiIFwKKwl9CiAKIC8qKgotICogX19rZmlmb19yZXNldCAtIHJlbW92ZXMgdGhlIGVudGlyZSBGSUZPIGNvbnRlbnRzLCBubyBsb2NraW5nIHZlcnNpb24KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgorICogREVDTEFSRV9LRklGTyAtIG1hY3JvIHRvIGRlY2xhcmUgYSBrZmlmbyBhbmQgdGhlIGFzc29jaWF0ZWQgYnVmZmVyCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBmaWZvIGJ1ZmZlcgorICoKKyAqIE5vdGUxOiB0aGUgbWFjcm8gY2FuIGJlIHVzZWQgaW5zaWRlIHN0cnVjdCBvciB1bmlvbiBkZWNsYXJhdGlvbgorICogTm90ZTI6IHRoZSBtYWNybyBjcmVhdGVzIHR3byBvYmplY3RzOgorICogIEEga2ZpZm8gb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGEgYnVmZmVyIGZvciB0aGUga2ZpZm8KKyAqICBvYmplY3QgbmFtZWQgbmFtZSMja2ZpZm9fYnVmZmVyCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX3Jlc2V0KHN0cnVjdCBrZmlmbyAqZmlmbykKLXsKLQlmaWZvLT5pbiA9IGZpZm8tPm91dCA9IDA7CisjZGVmaW5lIERFQ0xBUkVfS0ZJRk8obmFtZSwgc2l6ZSkgXAordW5pb24geyBcCisJc3RydWN0IGtmaWZvIG5hbWU7IFwKKwl1bnNpZ25lZCBjaGFyIG5hbWUjI2tmaWZvX2J1ZmZlcltzaXplICsgc2l6ZW9mKHN0cnVjdCBrZmlmbyldOyBcCiB9CiAKIC8qKgorICogSU5JVF9LRklGTyAtIEluaXRpYWxpemUgYSBrZmlmbyBkZWNsYXJlZCBieSBERUNMQVJFX0tGSUZPCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKKyAqLworI2RlZmluZSBJTklUX0tGSUZPKG5hbWUpIFwKKwluYW1lID0gX19rZmlmb19pbml0aWFsaXplcihzaXplb2YobmFtZSMja2ZpZm9fYnVmZmVyKSAtIFwKKwkJCQlzaXplb2Yoc3RydWN0IGtmaWZvKSwgbmFtZSMja2ZpZm9fYnVmZmVyKQorCisvKioKKyAqIERFRklORV9LRklGTyAtIG1hY3JvIHRvIGRlZmluZSBhbmQgaW5pdGlhbGl6ZSBhIGtmaWZvCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBmaWZvIGJ1ZmZlcgorICoKKyAqIE5vdGUxOiB0aGUgbWFjcm8gY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBhbmQgbG9jYWwga2ZpZm8gZGF0YSB0eXBlIHZhcmlhYmxlcworICogTm90ZTI6IHRoZSBtYWNybyBjcmVhdGVzIHR3byBvYmplY3RzOgorICogIEEga2ZpZm8gb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGEgYnVmZmVyIGZvciB0aGUga2ZpZm8KKyAqICBvYmplY3QgbmFtZWQgbmFtZSMja2ZpZm9fYnVmZmVyCisgKi8KKyNkZWZpbmUgREVGSU5FX0tGSUZPKG5hbWUsIHNpemUpIFwKKwl1bnNpZ25lZCBjaGFyIG5hbWUjI2tmaWZvX2J1ZmZlcltzaXplXTsgXAorCXN0cnVjdCBrZmlmbyBuYW1lID0gX19rZmlmb19pbml0aWFsaXplcihzaXplLCBuYW1lIyNrZmlmb19idWZmZXIpCisKKyN1bmRlZiBfX2tmaWZvX2luaXRpYWxpemVyCisKK2V4dGVybiB2b2lkIGtmaWZvX2luaXQoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CitleHRlcm4gX19tdXN0X2NoZWNrIGludCBrZmlmb19hbGxvYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBzaXplLAorCQkJZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pOworZXh0ZXJuIHVuc2lnbmVkIGludCBrZmlmb19pbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbik7CitleHRlcm4gX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19vdXQoc3RydWN0IGtmaWZvICpmaWZvLAorCQkJCXVuc2lnbmVkIGNoYXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyoqCiAgKiBrZmlmb19yZXNldCAtIHJlbW92ZXMgdGhlIGVudGlyZSBGSUZPIGNvbnRlbnRzCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgZW1wdGllZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGtmaWZvX3Jlc2V0KHN0cnVjdCBrZmlmbyAqZmlmbykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoZmlmby0+bG9jaywgZmxhZ3MpOwotCi0JX19rZmlmb19yZXNldChmaWZvKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOworCWZpZm8tPmluID0gZmlmby0+b3V0ID0gMDsKIH0KIAogLyoqCi0gKiBrZmlmb19wdXQgLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPCisgKiBrZmlmb19yZXNldF9vdXQgLSBza2lwIEZJRk8gY29udGVudHMKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQga2ZpZm9fcmVzZXRfb3V0KHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlzbXBfbWIoKTsKKwlmaWZvLT5vdXQgPSBmaWZvLT5pbjsKK30KKworLyoqCisgKiBrZmlmb19zaXplIC0gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmlmbyBpbiBieXRlcwogICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAYnVmZmVyOiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KLSAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19zaXplKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4gZmlmby0+c2l6ZTsKK30KKworLyoqCisgKiBrZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBpbiB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtmaWZvX2xlbihzdHJ1Y3Qga2ZpZm8gKmZpZm8pCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50CW91dDsKKworCW91dCA9IGZpZm8tPm91dDsKKwlzbXBfcm1iKCk7CisJcmV0dXJuIGZpZm8tPmluIC0gb3V0OworfQorCisvKioKKyAqIGtmaWZvX2lzX2VtcHR5IC0gcmV0dXJucyB0cnVlIGlmIHRoZSBmaWZvIGlzIGVtcHR5CisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgaW50IGtmaWZvX2lzX2VtcHR5KHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4gZmlmby0+aW4gPT0gZmlmby0+b3V0OworfQorCisvKioKKyAqIGtmaWZvX2lzX2Z1bGwgLSByZXR1cm5zIHRydWUgaWYgdGhlIGZpZm8gaXMgZnVsbAorICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIGludCBrZmlmb19pc19mdWxsKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4ga2ZpZm9fbGVuKGZpZm8pID09IGtmaWZvX3NpemUoZmlmbyk7Cit9CisKKy8qKgorICoga2ZpZm9fYXZhaWwgLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX2F2YWlsKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4ga2ZpZm9fc2l6ZShmaWZvKSAtIGtmaWZvX2xlbihmaWZvKTsKK30KKworLyoqCisgKiBrZmlmb19pbl9sb2NrZWQgLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPIHVzaW5nIGEgc3BpbmxvY2sgZm9yIGxvY2tpbmcKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZyb206IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICogQG46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbG9jazogcG9pbnRlciB0byB0aGUgc3BpbmxvY2sgdG8gdXNlIGZvciBsb2NraW5nLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAYnVmZmVyIGludG8KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAZnJvbSBidWZmZXIgaW50bwogICogdGhlIEZJRk8gZGVwZW5kaW5nIG9uIHRoZSBmcmVlIHNwYWNlLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCiAgKiBieXRlcyBjb3BpZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9faW5fbG9ja2VkKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKIAotCXJldCA9IF9fa2ZpZm9fcHV0KGZpZm8sIGJ1ZmZlciwgbGVuKTsKKwlyZXQgPSBrZmlmb19pbihmaWZvLCBmcm9tLCBuKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiBrZmlmb19nZXQgLSBnZXRzIHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPCisgKiBrZmlmb19vdXRfbG9ja2VkIC0gZ2V0cyBzb21lIGRhdGEgZnJvbSB0aGUgRklGTyB1c2luZyBhIHNwaW5sb2NrIGZvciBsb2NraW5nCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KLSAqIEBidWZmZXI6IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgotICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEBsb2NrOiBwb2ludGVyIHRvIHRoZSBzcGlubG9jayB0byB1c2UgZm9yIGxvY2tpbmcuCiAgKgogICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEZJRk8gaW50byB0aGUKLSAqIEBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCisgKiBAdG8gYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrZmlmb19nZXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX291dF9sb2NrZWQoc3RydWN0IGtmaWZvICpmaWZvLAorCXVuc2lnbmVkIGNoYXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwogCi0JcmV0ID0gX19rZmlmb19nZXQoZmlmbywgYnVmZmVyLCBsZW4pOworCXJldCA9IGtmaWZvX291dChmaWZvLCB0bywgbik7CiAKIAkvKgogCSAqIG9wdGltaXphdGlvbjogaWYgdGhlIEZJRk8gaXMgZW1wdHksIHNldCB0aGUgaW5kaWNlcyB0byAwCiAJICogc28gd2UgZG9uJ3Qgd3JhcCB0aGUgbmV4dCB0aW1lCiAJICovCi0JaWYgKGZpZm8tPmluID09IGZpZm8tPm91dCkKLQkJZmlmby0+aW4gPSBmaWZvLT5vdXQgPSAwOworCWlmIChrZmlmb19pc19lbXB0eShmaWZvKSkKKwkJa2ZpZm9fcmVzZXQoZmlmbyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZpZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogX19rZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPLCBubyBsb2NraW5nIHZlcnNpb24KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorZXh0ZXJuIHZvaWQga2ZpZm9fc2tpcChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBsZW4pOworCitleHRlcm4gX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19mcm9tX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbik7CisKK2V4dGVybiBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX3RvX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4pOworCisvKgorICogX19rZmlmb19hZGRfb3V0IGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIG91dCBvZmZzZXQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19sZW4oc3RydWN0IGtmaWZvICpmaWZvKQorc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fYWRkX291dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgaW50IG9mZikKIHsKLQlyZXR1cm4gZmlmby0+aW4gLSBmaWZvLT5vdXQ7CisJc21wX21iKCk7CisJZmlmby0+b3V0ICs9IG9mZjsKIH0KIAotLyoqCi0gKiBrZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKy8qCisgKiBfX2tmaWZvX2FkZF9pbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSBpbiBvZmZzZXQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fbGVuKHN0cnVjdCBrZmlmbyAqZmlmbykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX2FkZF9pbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgaW50IG9mZikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNtcF93bWIoKTsKKwlmaWZvLT5pbiArPSBvZmY7Cit9CisKKy8qCisgKiBfX2tmaWZvX29mZiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGN1bGF0aW5nIHRoZSBpbmRleCBvZiBhCisgKiBnaXZlbiBvZmZlc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fb2ZmKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IG9mZikKK3sKKwlyZXR1cm4gb2ZmICYgKGZpZm8tPnNpemUgLSAxKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fcGVla19uIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgZGV0ZXJtaW5hdGUgdGhlIGxlbmd0aCBvZgorICogdGhlIG5leHQgcmVjb3JkIGluIHRoZSBmaWZvCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fcGVla19uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCQl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKyNkZWZpbmUgX19LRklGT19HRVQoZmlmbywgb2ZmLCBzaGlmdCkgXAorCSgoZmlmbyktPmJ1ZmZlcltfX2tmaWZvX29mZigoZmlmbyksIChmaWZvKS0+b3V0KyhvZmYpKV0gPDwgKHNoaWZ0KSkKKworCXVuc2lnbmVkIGludCBsOworCisJbCA9IF9fS0ZJRk9fR0VUKGZpZm8sIDAsIDApOworCisJaWYgKC0tcmVjc2l6ZSkKKwkJbCB8PSBfX0tGSUZPX0dFVChmaWZvLCAxLCA4KTsKKworCXJldHVybiBsOworI3VuZGVmCV9fS0ZJRk9fR0VUCit9CisKKy8qCisgKiBfX2tmaWZvX3Bva2VfbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIHN0b3JpbmcgdGhlIGxlbmd0aCBvZgorICogdGhlIG5leHQgcmVjb3JkIGludG8gdGhlIGZpZm8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fcG9rZV9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCXVuc2lnbmVkIGludCByZWNzaXplLCB1bnNpZ25lZCBpbnQgbikKK3sKKyNkZWZpbmUgX19LRklGT19QVVQoZmlmbywgb2ZmLCB2YWwsIHNoaWZ0KSBcCisJCSggXAorCQkoZmlmbyktPmJ1ZmZlcltfX2tmaWZvX29mZigoZmlmbyksIChmaWZvKS0+aW4rKG9mZikpXSA9IFwKKwkJKHVuc2lnbmVkIGNoYXIpKCh2YWwpID4+IChzaGlmdCkpIFwKKwkJKQorCisJX19LRklGT19QVVQoZmlmbywgMCwgbiwgMCk7CisKKwlpZiAoLS1yZWNzaXplKQorCQlfX0tGSUZPX1BVVChmaWZvLCAxLCBuLCA4KTsKKyN1bmRlZglfX0tGSUZPX1BVVAorfQorCisvKgorICogX19rZmlmb19pbl8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBwdXQgZGF0ZSBpbnRvIHRoZSBmaWZvCisgKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX2luX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2luX24oc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19pbl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX2luX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKQorewogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gX19rZmlmb19pbl9uKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOwogCi0JcmV0ID0gX19rZmlmb19sZW4oZmlmbyk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZpZm8tPmxvY2ssIGZsYWdzKTsKLQorCWlmIChsaWtlbHkocmV0ID09IDApKSB7CisJCWlmIChyZWNzaXplKQorCQkJX19rZmlmb19wb2tlX24oZmlmbywgcmVjc2l6ZSwgbik7CisJCV9fa2ZpZm9fYWRkX2luKGZpZm8sIG4gKyByZWNzaXplKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBrZmlmb19pbl9yZWMgLSBwdXRzIHNvbWUgcmVjb3JkIGRhdGEgaW50byB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZnJvbTogdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIEBuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGludG8gdGhlIEZJRk8gYW5kIHJldHVybnMKKyAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqIEEgcmV0dXJuZWQgdmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBAbiB2YWx1ZSBtZWFucyB0aGF0IHRoZSByZWNvcmQgZG9lc24ndAorICogZml0IGludG8gdGhlIGJ1ZmZlci4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9faW5fcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9faW5fZ2VuZXJpYyhmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKKwlyZXR1cm4gX19rZmlmb19pbl9yZWMoZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX291dF8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBnZXQgZGF0ZSBmcm9tIHRoZSBmaWZvCisgKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX291dF9yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19vdXRfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCAqdG8sIHVuc2lnbmVkIGludCByZWNsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICp0bywgdW5zaWduZWQgaW50IG4sCisJdW5zaWduZWQgaW50IHJlY3NpemUsIHVuc2lnbmVkIGludCAqdG90YWwpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCkKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKworCWlmICghcmVjc2l6ZSkgeworCQlsID0gbjsKKwkJaWYgKHRvdGFsKQorCQkJKnRvdGFsID0gbDsKKwl9IGVsc2UgeworCQlsID0gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7CisJCWlmICh0b3RhbCkKKwkJCSp0b3RhbCA9IGw7CisJCWlmIChuIDwgbCkKKwkJCXJldHVybiBsOworCX0KKworCXJldHVybiBfX2tmaWZvX291dF9uKGZpZm8sIHRvLCBsLCByZWNzaXplKTsKK30KKworLyoqCisgKiBrZmlmb19vdXRfcmVjIC0gZ2V0cyBzb21lIHJlY29yZCBkYXRhIGZyb20gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KKyAqIEBuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKiBAdG90YWw6IHBvaW50ZXIgd2hlcmUgdGhlIHRvdGFsIG51bWJlciBvZiB0byBjb3BpZWQgYnl0ZXMgc2hvdWxkIHN0b3JlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQG4gYnl0ZXMgZnJvbSB0aGUgRklGTyB0byBAdG8gYW5kIHJldHVybnMgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqIEEgcmV0dXJuZWQgdmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBAbiB2YWx1ZSBtZWFucyB0aGF0IHRoZSByZWNvcmQgZG9lc24ndAorICogZml0IGludG8gdGhlIEB0byBidWZmZXIuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX291dF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCkKKworeworCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCisJCXJldHVybiBfX2tmaWZvX291dF9nZW5lcmljKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7CisJcmV0dXJuIF9fa2ZpZm9fb3V0X3JlYyhmaWZvLCB0bywgbiwgcmVjc2l6ZSwgdG90YWwpOworfQorCisvKgorICogX19rZmlmb19mcm9tX3VzZXJfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgZnJvbSB1c2VyIHNwYWNlIGludG8KKyAqIHRoZSBmaWZvLiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX2Zyb21fdXNlcl9yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJcmV0ID0gX19rZmlmb19mcm9tX3VzZXJfbihmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKKworCWlmIChsaWtlbHkocmV0ID09IDApKSB7CisJCWlmIChyZWNzaXplKQorCQkJX19rZmlmb19wb2tlX24oZmlmbywgcmVjc2l6ZSwgbik7CisJCV9fa2ZpZm9fYWRkX2luKGZpZm8sIG4gKyByZWNzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBrZmlmb19mcm9tX3VzZXJfcmVjIC0gcHV0cyBzb21lIGRhdGEgZnJvbSB1c2VyIHNwYWNlIGludG8gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZyb206IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIEBuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGludG8gdGhlCisgKiBGSUZPIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgZXF1YWwgb3IgbGVzcyB0aGUgQG4gdmFsdWUsIHRoZSBjb3B5X2Zyb21fdXNlcigpCisgKiBmdW5jdGlvbnMgaGFzIGZhaWxlZC4gT3RoZXJ3aXNlIHRoZSByZWNvcmQgZG9lc24ndCBmaXQgaW50byB0aGUgYnVmZmVyLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19mcm9tX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCisJCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9nZW5lcmljKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOworCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9yZWMoZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX3RvX3VzZXJfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgZmlmbyBkYXRhIGludG8gdXNlciBzcGFjZQorICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb190b191c2VyX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY2xlbiwKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplLAorCXVuc2lnbmVkIGludCAqdG90YWwpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBuLAorCXVuc2lnbmVkIGludCByZWNzaXplLCB1bnNpZ25lZCBpbnQgKnRvdGFsKQoreworCXVuc2lnbmVkIGludCBsOworCisJaWYgKCFyZWNzaXplKSB7CisJCWwgPSBuOworCQlpZiAodG90YWwpCisJCQkqdG90YWwgPSBsOworCX0gZWxzZSB7CisJCWwgPSBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKKwkJaWYgKHRvdGFsKQorCQkJKnRvdGFsID0gbDsKKwkJaWYgKG4gPCBsKQorCQkJcmV0dXJuIGw7CisJfQorCisJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9uKGZpZm8sIHRvLCBuLCBsLCByZWNzaXplKTsKK30KKworLyoqCisgKiBrZmlmb190b191c2VyX3JlYyAtIGdldHMgZGF0YSBmcm9tIHRoZSBGSUZPIGFuZCB3cml0ZSBpdCB0byB1c2VyIHNwYWNlCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICogQHRvdGFsOiBwb2ludGVyIHdoZXJlIHRoZSB0b3RhbCBudW1iZXIgb2YgdG8gY29waWVkIGJ5dGVzIHNob3VsZCBzdG9yZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBuIGJ5dGVzIGZyb20gdGhlIEZJRk8gdG8gdGhlIEB0by4KKyAqIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90CisgKiBiZSBjb3BpZWQuCisgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgZXF1YWwgb3IgbGVzcyB0aGUgQG4gdmFsdWUsIHRoZSBjb3B5X3RvX3VzZXIoKQorICogZnVuY3Rpb25zIGhhcyBmYWlsZWQuIE90aGVyd2lzZSB0aGUgcmVjb3JkIGRvZXNuJ3QgZml0IGludG8gdGhlIEB0byBidWZmZXIuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX3RvX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJCXVuc2lnbmVkIGludCAqdG90YWwpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9nZW5lcmljKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7CisJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9yZWMoZmlmbywgdG8sIG4sIHJlY3NpemUsIHRvdGFsKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fcGVla18uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBwZWVrIGludG8gdGhlIG5leHQgZmlmbyByZWNvcmQKKyAqIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9fcGVla19yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19wZWVrX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCQkJCXVuc2lnbmVkIGludCByZWNzaXplKTsKKworLyoqCisgKiBrZmlmb19wZWVrX3JlYyAtIGdldHMgdGhlIHNpemUgb2YgdGhlIG5leHQgRklGTyByZWNvcmQgZGF0YQorICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAcmVjc2l6ZTogc2l6ZSBvZiByZWNvcmQgZmllbGQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIG5leHQgRklGTyByZWNvcmQgaW4gbnVtYmVyIG9mIGJ5dGVzCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19wZWVrX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9fcGVla19nZW5lcmljKGZpZm8sIHJlY3NpemUpOworCWlmICghcmVjc2l6ZSkKKwkJcmV0dXJuIGtmaWZvX2xlbihmaWZvKTsKKwlyZXR1cm4gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX3NraXBfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3Igc2tpcCB0aGUgbmV4dCBmaWZvIHJlY29yZAorICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19za2lwX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHZvaWQgX19rZmlmb19za2lwX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX3NraXBfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKworCWlmIChyZWNzaXplKSB7CisJCWwgPSBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKKworCQlpZiAobCArIHJlY3NpemUgPD0ga2ZpZm9fbGVuKGZpZm8pKSB7CisJCQlfX2tmaWZvX2FkZF9vdXQoZmlmbywgbCArIHJlY3NpemUpOworCQkJcmV0dXJuOworCQl9CisJfQorCWtmaWZvX3Jlc2V0X291dChmaWZvKTsKK30KKworLyoqCisgKiBrZmlmb19za2lwX3JlYyAtIHNraXAgdGhlIG5leHQgZmlmbyBvdXQgcmVjb3JkCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2tpcHMgdGhlIG5leHQgRklGTyByZWNvcmQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGtmaWZvX3NraXBfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHJlY3NpemUpKQorCQlfX2tmaWZvX3NraXBfZ2VuZXJpYyhmaWZvLCByZWNzaXplKTsKKwllbHNlCisJCV9fa2ZpZm9fc2tpcF9yZWMoZmlmbywgcmVjc2l6ZSk7Cit9CisKKy8qKgorICoga2ZpZm9fYXZhaWxfcmVjIC0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiBhIHJlY29yZCBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fYXZhaWxfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbCA9IGtmaWZvX3NpemUoZmlmbykgLSBrZmlmb19sZW4oZmlmbyk7CisKKwlyZXR1cm4gKGwgPiByZWNzaXplKSA/IGwgLSByZWNzaXplIDogMDsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaAppbmRleCAzN2ZhMTliLi4xYWRmZTc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKQEAgLTUwLDYgKzUwLDE5IEBACiAJaW50IHN0YXR1c19jaGFuZ2VfbmlkOwogfTsKIAorLyoKKyAqIER1cmluZyBwYWdlYmxvY2sgaXNvbGF0aW9uLCBjb3VudCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdpdGhpbiB0aGUKKyAqIHJhbmdlIFtzdGFydF9wZm4sIHN0YXJ0X3BmbiArIG5yX3BhZ2VzKSB3aGljaCBhcmUgb3duZWQgYnkgY29kZQorICogaW4gdGhlIG5vdGlmaWVyIGNoYWluLgorICovCisjZGVmaW5lIE1FTV9JU09MQVRFX0NPVU5UCSgxPDwwKQorCitzdHJ1Y3QgbWVtb3J5X2lzb2xhdGVfbm90aWZ5IHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbjsJLyogU3RhcnQgb2YgcmFuZ2UgdG8gY2hlY2sgKi8KKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CQkvKiAjIHBhZ2VzIGluIHJhbmdlIHRvIGNoZWNrICovCisJdW5zaWduZWQgaW50IHBhZ2VzX2ZvdW5kOwkvKiAjIHBhZ2VzIG93bmVkIGZvdW5kIGJ5IGNhbGxiYWNrcyAqLworfTsKKwogc3RydWN0IG5vdGlmaWVyX2Jsb2NrOwogc3RydWN0IG1lbV9zZWN0aW9uOwogCkBAIC03NiwxNCArODksMjggQEAKIHsKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworfQorc3RhdGljIGlubGluZSBpbnQgbWVtb3J5X2lzb2xhdGVfbm90aWZ5KHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQoreworCXJldHVybiAwOworfQogI2Vsc2UKIGV4dGVybiBpbnQgcmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IHJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfbmV3X21lbW9yeShpbnQsIHN0cnVjdCBtZW1fc2VjdGlvbiAqKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9tZW1vcnlfc2VjdGlvbihzdHJ1Y3QgbWVtX3NlY3Rpb24gKik7CiBleHRlcm4gaW50IG1lbW9yeV9kZXZfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgcmVtb3ZlX21lbW9yeV9ibG9jayh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgbWVtX3NlY3Rpb24gKiwgaW50KTsKIGV4dGVybiBpbnQgbWVtb3J5X25vdGlmeSh1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdik7CitleHRlcm4gaW50IG1lbW9yeV9pc29sYXRlX25vdGlmeSh1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdik7CiBleHRlcm4gc3RydWN0IG1lbW9yeV9ibG9jayAqZmluZF9tZW1vcnlfYmxvY2soc3RydWN0IG1lbV9zZWN0aW9uICopOwogI2RlZmluZSBDT05GSUdfTUVNX0JMT0NLX1NJWkUJKFBBR0VTX1BFUl9TRUNUSU9OPDxQQUdFX1NISUZUKQogZW51bSBtZW1fYWRkX2NvbnRleHQgeyBCT09ULCBIT1RQTFVHIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggODRhNTI0YS4uODRkMDIwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMTIzLDYgKzEyMyw4IEBACiAJc3RydWN0IGZpbGUJKnZtX2ZpbGU7CS8qIHRoZSBiYWNraW5nIGZpbGUgb3IgTlVMTCAqLwogCiAJYXRvbWljX3QJdm1fdXNhZ2U7CS8qIHJlZ2lvbiB1c2FnZSBjb3VudCAqLworCWJvb2wJCXZtX2ljYWNoZV9mbHVzaGVkIDogMTsgLyogdHJ1ZSBpZiB0aGUgaWNhY2hlIGhhcyBiZWVuIGZsdXNoZWQgZm9yCisJCQkJCQkqIHRoaXMgcmVnaW9uICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCmluZGV4IDAyODk0NjcuLjA1YjQ0MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmFtZWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKQEAgLTcyLDggKzcyLDYgQEAKIAogZXh0ZXJuIHN0cnVjdCBmaWxlICpsb29rdXBfaW5zdGFudGlhdGVfZmlscChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQlpbnQgKCpvcGVuKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikpOwotZXh0ZXJuIHN0cnVjdCBmaWxlICpuYW1laWRhdGFfdG9fZmlscChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IGZsYWdzKTsKLWV4dGVybiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqKTsKIAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vbmVfbGVuKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCBiZjFlNjcwLi4xNzRlNTM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTI0Myw2ICsyNDMsNyBAQAogCXVuc2lnbmVkIGludAlkMl9zdXBwb3J0OjE7CS8qIExvdyBwb3dlciBzdGF0ZSBEMiBpcyBzdXBwb3J0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJbm9fZDFkMjoxOwkvKiBPbmx5IGFsbG93IEQwIGFuZCBEMyAqLwogCXVuc2lnbmVkIGludAl3YWtldXBfcHJlcGFyZWQ6MTsKKwl1bnNpZ25lZCBpbnQJZDNfZGVsYXk7CS8qIEQzLT5EMCB0cmFuc2l0aW9uIHRpbWUgaW4gbXMgKi8KIAogI2lmZGVmIENPTkZJR19QQ0lFQVNQTQogCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUJKmxpbmtfc3RhdGU7CS8qIEFTUE0gbGluayBzdGF0ZS4gKi8KQEAgLTU2Niw2ICs1NjcsOSBAQAogCQkJCXJlc291cmNlX3NpemVfdCk7CiB2b2lkIHBjaWJpb3NfdXBkYXRlX2lycShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgaXJxKTsKIAorLyogV2VhayBidXQgY2FuIGJlIG92ZXJyaWRlbiBieSBhcmNoICovCit2b2lkIHBjaV9maXh1cF9jYXJkYnVzKHN0cnVjdCBwY2lfYnVzICopOworCiAvKiBHZW5lcmljIFBDSSBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5ICovCiAKIGV4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2ZpbmRfYnVzKGludCBkb21haW4sIGludCBidXNucik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNmYjI1Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQ0ICswLDAgQEAKLS8qCi0gKiAgTk9URTogdGhpcyBmaWxlIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZSwgaXQgaXMKLSAqICBwcm92aWRlZCBhcyBhIGNvdXJ0ZXN5IGNvcHkgb2YgdXNlci1zcGFjZSBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoZQotICogIG9sZCAocHJlLXJlbmFtZSkgc3ltYm9scyBhbmQgY29uc3RhbnRzLgotICoKLSAqICBQZXJmb3JtYW5jZSBldmVudHM6Ci0gKgotICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgotICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKLSAqCi0gKiAgRGF0YSB0eXBlIGRlZmluaXRpb25zLCBkZWNsYXJhdGlvbnMsIHByb3RvdHlwZXMuCi0gKgotICogICAgU3RhcnRlZCBieTogVGhvbWFzIEdsZWl4bmVyIGFuZCBJbmdvIE1vbG5hcgotICoKLSAqICBGb3IgbGljZW5jaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKLSAqLwotI2lmbmRlZiBfTElOVVhfUEVSRl9DT1VOVEVSX0gKLSNkZWZpbmUgX0xJTlVYX1BFUkZfQ09VTlRFUl9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCi0vKgotICogVXNlci1zcGFjZSBBQkkgYml0czoKLSAqLwotCi0vKgotICogYXR0ci50eXBlCi0gKi8KLWVudW0gcGVyZl90eXBlX2lkIHsKLQlQRVJGX1RZUEVfSEFSRFdBUkUJCQk9IDAsCi0JUEVSRl9UWVBFX1NPRlRXQVJFCQkJPSAxLAotCVBFUkZfVFlQRV9UUkFDRVBPSU5UCQkJPSAyLAotCVBFUkZfVFlQRV9IV19DQUNIRQkJCT0gMywKLQlQRVJGX1RZUEVfUkFXCQkJCT0gNCwKLQotCVBFUkZfVFlQRV9NQVgsCQkJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLS8qCi0gKiBHZW5lcmFsaXplZCBwZXJmb3JtYW5jZSBjb3VudGVyIGV2ZW50IHR5cGVzLCB1c2VkIGJ5IHRoZQotICogYXR0ci5ldmVudF9pZCBwYXJhbWV0ZXIgb2YgdGhlIHN5c19wZXJmX2NvdW50ZXJfb3BlbigpCi0gKiBzeXNjYWxsOgotICovCi1lbnVtIHBlcmZfaHdfaWQgewotCS8qCi0JICogQ29tbW9uIGhhcmR3YXJlIGV2ZW50cywgZ2VuZXJhbGl6ZWQgYnkgdGhlIGtlcm5lbDoKLQkgKi8KLQlQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMJCT0gMCwKLQlQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUwkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUwkJPSAyLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTCQk9IDMsCi0JUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TCT0gNCwKLQlQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVMJCT0gNSwKLQlQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVMJCT0gNiwKLQotCVBFUkZfQ09VTlRfSFdfTUFYLAkJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLS8qCi0gKiBHZW5lcmFsaXplZCBoYXJkd2FyZSBjYWNoZSBjb3VudGVyczoKLSAqCi0gKiAgICAgICB7IEwxLUQsIEwxLUksIExMQywgSVRMQiwgRFRMQiwgQlBVIH0geAotICogICAgICAgeyByZWFkLCB3cml0ZSwgcHJlZmV0Y2ggfSB4Ci0gKiAgICAgICB7IGFjY2Vzc2VzLCBtaXNzZXMgfQotICovCi1lbnVtIHBlcmZfaHdfY2FjaGVfaWQgewotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFECQkJPSAwLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFJCQkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTEwJCQk9IDIsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9EVExCCQk9IDMsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9JVExCCQk9IDQsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9CUFUJCQk9IDUsCi0KLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCwJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLWVudW0gcGVyZl9od19jYWNoZV9vcF9pZCB7Ci0JUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFECQk9IDAsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9XUklURQkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUFJFRkVUQ0gJCT0gMiwKLQotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYLAkJLyogbm9uLUFCSSAqLwotfTsKLQotZW51bSBwZXJmX2h3X2NhY2hlX29wX3Jlc3VsdF9pZCB7Ci0JUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCT0gMCwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTCQk9IDEsCi0KLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVgsCQkvKiBub24tQUJJICovCi19OwotCi0vKgotICogU3BlY2lhbCAic29mdHdhcmUiIGNvdW50ZXJzIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwsIGV2ZW4gaWYgdGhlIGhhcmR3YXJlCi0gKiBkb2VzIG5vdCBzdXBwb3J0IHBlcmZvcm1hbmNlIGNvdW50ZXJzLiBUaGVzZSBjb3VudGVycyBtZWFzdXJlIHZhcmlvdXMKLSAqIHBoeXNpY2FsIGFuZCBzdyBldmVudHMgb2YgdGhlIGtlcm5lbCAoYW5kIGFsbG93IHRoZSBwcm9maWxpbmcgb2YgdGhlbSBhcwotICogd2VsbCk6Ci0gKi8KLWVudW0gcGVyZl9zd19pZHMgewotCVBFUkZfQ09VTlRfU1dfQ1BVX0NMT0NLCQkJPSAwLAotCVBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwkJPSAxLAotCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMJCT0gMiwKLQlQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMJCT0gMywKLQlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCQk9IDQsCi0JUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4JCT0gNSwKLQlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSgkJPSA2LAotCVBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUwkJPSA3LAotCVBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUwkJPSA4LAotCi0JUEVSRl9DT1VOVF9TV19NQVgsCQkJLyogbm9uLUFCSSAqLwotfTsKLQotLyoKLSAqIEJpdHMgdGhhdCBjYW4gYmUgc2V0IGluIGF0dHIuc2FtcGxlX3R5cGUgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbgotICogaW4gdGhlIG92ZXJmbG93IHBhY2tldHMuCi0gKi8KLWVudW0gcGVyZl9jb3VudGVyX3NhbXBsZV9mb3JtYXQgewotCVBFUkZfU0FNUExFX0lQCQkJCT0gMVUgPDwgMCwKLQlQRVJGX1NBTVBMRV9USUQJCQkJPSAxVSA8PCAxLAotCVBFUkZfU0FNUExFX1RJTUUJCQk9IDFVIDw8IDIsCi0JUEVSRl9TQU1QTEVfQUREUgkJCT0gMVUgPDwgMywKLQlQRVJGX1NBTVBMRV9SRUFECQkJPSAxVSA8PCA0LAotCVBFUkZfU0FNUExFX0NBTExDSEFJTgkJCT0gMVUgPDwgNSwKLQlQRVJGX1NBTVBMRV9JRAkJCQk9IDFVIDw8IDYsCi0JUEVSRl9TQU1QTEVfQ1BVCQkJCT0gMVUgPDwgNywKLQlQRVJGX1NBTVBMRV9QRVJJT0QJCQk9IDFVIDw8IDgsCi0JUEVSRl9TQU1QTEVfU1RSRUFNX0lECQkJPSAxVSA8PCA5LAotCVBFUkZfU0FNUExFX1JBVwkJCQk9IDFVIDw8IDEwLAotCi0JUEVSRl9TQU1QTEVfTUFYID0gMVUgPDwgMTEsCQkvKiBub24tQUJJICovCi19OwotCi0vKgotICogVGhlIGZvcm1hdCBvZiB0aGUgZGF0YSByZXR1cm5lZCBieSByZWFkKCkgb24gYSBwZXJmIGNvdW50ZXIgZmQsCi0gKiBhcyBzcGVjaWZpZWQgYnkgYXR0ci5yZWFkX2Zvcm1hdDoKLSAqCi0gKiBzdHJ1Y3QgcmVhZF9mb3JtYXQgewotICoJeyB1NjQJCXZhbHVlOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCi0gKgkgIHsgdTY0CQlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKLSAqCX0gJiYgIVBFUkZfRk9STUFUX0dST1VQCi0gKgotICoJeyB1NjQJCW5yOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCi0gKgkgIHsgdTY0CQl2YWx1ZTsKLSAqCSAgICB7IHU2NAlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKLSAqCSAgfQkJY250cltucl07Ci0gKgl9ICYmIFBFUkZfRk9STUFUX0dST1VQCi0gKiB9OwotICovCi1lbnVtIHBlcmZfY291bnRlcl9yZWFkX2Zvcm1hdCB7Ci0JUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECQk9IDFVIDw8IDAsCi0JUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCQk9IDFVIDw8IDEsCi0JUEVSRl9GT1JNQVRfSUQJCQkJPSAxVSA8PCAyLAotCVBFUkZfRk9STUFUX0dST1VQCQkJPSAxVSA8PCAzLAotCi0JUEVSRl9GT1JNQVRfTUFYID0gMVUgPDwgNCwgCQkvKiBub24tQUJJICovCi19OwotCi0jZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjAJNjQJLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi8KLQotLyoKLSAqIEhhcmR3YXJlIGV2ZW50IHRvIG1vbml0b3IgdmlhIGEgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBjb3VudGVyOgotICovCi1zdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgewotCi0JLyoKLQkgKiBNYWpvciB0eXBlOiBoYXJkd2FyZS9zb2Z0d2FyZS90cmFjZXBvaW50L2V0Yy4KLQkgKi8KLQlfX3UzMgkJCXR5cGU7Ci0KLQkvKgotCSAqIFNpemUgb2YgdGhlIGF0dHIgc3RydWN0dXJlLCBmb3IgZndkL2J3ZCBjb21wYXQuCi0JICovCi0JX191MzIJCQlzaXplOwotCi0JLyoKLQkgKiBUeXBlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0JICovCi0JX191NjQJCQljb25maWc7Ci0KLQl1bmlvbiB7Ci0JCV9fdTY0CQlzYW1wbGVfcGVyaW9kOwotCQlfX3U2NAkJc2FtcGxlX2ZyZXE7Ci0JfTsKLQotCV9fdTY0CQkJc2FtcGxlX3R5cGU7Ci0JX191NjQJCQlyZWFkX2Zvcm1hdDsKLQotCV9fdTY0CQkJZGlzYWJsZWQgICAgICAgOiAgMSwgLyogb2ZmIGJ5IGRlZmF1bHQgICAgICAgICovCi0JCQkJaW5oZXJpdAkgICAgICAgOiAgMSwgLyogY2hpbGRyZW4gaW5oZXJpdCBpdCAgICovCi0JCQkJcGlubmVkCSAgICAgICA6ICAxLCAvKiBtdXN0IGFsd2F5cyBiZSBvbiBQTVUgKi8KLQkJCQlleGNsdXNpdmUgICAgICA6ICAxLCAvKiBvbmx5IGdyb3VwIG9uIFBNVSAgICAgKi8KLQkJCQlleGNsdWRlX3VzZXIgICA6ICAxLCAvKiBkb24ndCBjb3VudCB1c2VyICAgICAgKi8KLQkJCQlleGNsdWRlX2tlcm5lbCA6ICAxLCAvKiBkaXR0byBrZXJuZWwgICAgICAgICAgKi8KLQkJCQlleGNsdWRlX2h2ICAgICA6ICAxLCAvKiBkaXR0byBoeXBlcnZpc29yICAgICAgKi8KLQkJCQlleGNsdWRlX2lkbGUgICA6ICAxLCAvKiBkb24ndCBjb3VudCB3aGVuIGlkbGUgKi8KLQkJCQltbWFwICAgICAgICAgICA6ICAxLCAvKiBpbmNsdWRlIG1tYXAgZGF0YSAgICAgKi8KLQkJCQljb21tCSAgICAgICA6ICAxLCAvKiBpbmNsdWRlIGNvbW0gZGF0YSAgICAgKi8KLQkJCQlmcmVxICAgICAgICAgICA6ICAxLCAvKiB1c2UgZnJlcSwgbm90IHBlcmlvZCAgKi8KLQkJCQlpbmhlcml0X3N0YXQgICA6ICAxLCAvKiBwZXIgdGFzayBjb3VudHMgICAgICAgKi8KLQkJCQllbmFibGVfb25fZXhlYyA6ICAxLCAvKiBuZXh0IGV4ZWMgZW5hYmxlcyAgICAgKi8KLQkJCQl0YXNrICAgICAgICAgICA6ICAxLCAvKiB0cmFjZSBmb3JrL2V4aXQgICAgICAgKi8KLQkJCQl3YXRlcm1hcmsgICAgICA6ICAxLCAvKiB3YWtldXBfd2F0ZXJtYXJrICAgICAgKi8KLQotCQkJCV9fcmVzZXJ2ZWRfMSAgIDogNDk7Ci0KLQl1bmlvbiB7Ci0JCV9fdTMyCQl3YWtldXBfZXZlbnRzOwkgIC8qIHdha2V1cCBldmVyeSBuIGV2ZW50cyAqLwotCQlfX3UzMgkJd2FrZXVwX3dhdGVybWFyazsgLyogYnl0ZXMgYmVmb3JlIHdha2V1cCAgICovCi0JfTsKLQlfX3UzMgkJCV9fcmVzZXJ2ZWRfMjsKLQotCV9fdTY0CQkJX19yZXNlcnZlZF8zOwotfTsKLQotLyoKLSAqIElvY3RscyB0aGF0IGNhbiBiZSBkb25lIG9uIGEgcGVyZiBjb3VudGVyIGZkOgotICovCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfRU5BQkxFCQlfSU8gKCckJywgMCkKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19ESVNBQkxFCV9JTyAoJyQnLCAxKQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1JFRlJFU0gJX0lPICgnJCcsIDIpCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfUkVTRVQJCV9JTyAoJyQnLCAzKQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1BFUklPRAkJX0lPVygnJCcsIDQsIHU2NCkKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19TRVRfT1VUUFVUCV9JTyAoJyQnLCA1KQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1NFVF9GSUxURVIJX0lPVygnJCcsIDYsIGNoYXIgKikKLQotZW51bSBwZXJmX2NvdW50ZXJfaW9jX2ZsYWdzIHsKLQlQRVJGX0lPQ19GTEFHX0dST1VQCQk9IDFVIDw8IDAsCi19OwotCi0vKgotICogU3RydWN0dXJlIG9mIHRoZSBwYWdlIHRoYXQgY2FuIGJlIG1hcHBlZCB2aWEgbW1hcAotICovCi1zdHJ1Y3QgcGVyZl9jb3VudGVyX21tYXBfcGFnZSB7Ci0JX191MzIJdmVyc2lvbjsJCS8qIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgc3RydWN0dXJlICovCi0JX191MzIJY29tcGF0X3ZlcnNpb247CQkvKiBsb3dlc3QgdmVyc2lvbiB0aGlzIGlzIGNvbXBhdCB3aXRoICovCi0KLQkvKgotCSAqIEJpdHMgbmVlZGVkIHRvIHJlYWQgdGhlIGh3IGNvdW50ZXJzIGluIHVzZXItc3BhY2UuCi0JICoKLQkgKiAgIHUzMiBzZXE7Ci0JICogICBzNjQgY291bnQ7Ci0JICoKLQkgKiAgIGRvIHsKLQkgKiAgICAgc2VxID0gcGMtPmxvY2s7Ci0JICoKLQkgKiAgICAgYmFycmllcigpCi0JICogICAgIGlmIChwYy0+aW5kZXgpIHsKLQkgKiAgICAgICBjb3VudCA9IHBtY19yZWFkKHBjLT5pbmRleCAtIDEpOwotCSAqICAgICAgIGNvdW50ICs9IHBjLT5vZmZzZXQ7Ci0JICogICAgIH0gZWxzZQotCSAqICAgICAgIGdvdG8gcmVndWxhcl9yZWFkOwotCSAqCi0JICogICAgIGJhcnJpZXIoKTsKLQkgKiAgIH0gd2hpbGUgKHBjLT5sb2NrICE9IHNlcSk7Ci0JICoKLQkgKiBOT1RFOiBmb3Igb2J2aW91cyByZWFzb24gdGhpcyBvbmx5IHdvcmtzIG9uIHNlbGYtbW9uaXRvcmluZwotCSAqICAgICAgIHByb2Nlc3Nlcy4KLQkgKi8KLQlfX3UzMglsb2NrOwkJCS8qIHNlcWxvY2sgZm9yIHN5bmNocm9uaXphdGlvbiAqLwotCV9fdTMyCWluZGV4OwkJCS8qIGhhcmR3YXJlIGNvdW50ZXIgaWRlbnRpZmllciAqLwotCV9fczY0CW9mZnNldDsJCQkvKiBhZGQgdG8gaGFyZHdhcmUgY291bnRlciB2YWx1ZSAqLwotCV9fdTY0CXRpbWVfZW5hYmxlZDsJCS8qIHRpbWUgY291bnRlciBhY3RpdmUgKi8KLQlfX3U2NAl0aW1lX3J1bm5pbmc7CQkvKiB0aW1lIGNvdW50ZXIgb24gY3B1ICovCi0KLQkJLyoKLQkJICogSG9sZSBmb3IgZXh0ZW5zaW9uIG9mIHRoZSBzZWxmIG1vbml0b3IgY2FwYWJpbGl0aWVzCi0JCSAqLwotCi0JX191NjQJX19yZXNlcnZlZFsxMjNdOwkvKiBhbGlnbiB0byAxayAqLwotCi0JLyoKLQkgKiBDb250cm9sIGRhdGEgZm9yIHRoZSBtbWFwKCkgZGF0YSBidWZmZXIuCi0JICoKLQkgKiBVc2VyLXNwYWNlIHJlYWRpbmcgdGhlIEBkYXRhX2hlYWQgdmFsdWUgc2hvdWxkIGlzc3VlIGFuIHJtYigpLCBvbgotCSAqIFNNUCBjYXBhYmxlIHBsYXRmb3JtcywgYWZ0ZXIgcmVhZGluZyB0aGlzIHZhbHVlIC0tIHNlZQotCSAqIHBlcmZfY291bnRlcl93YWtldXAoKS4KLQkgKgotCSAqIFdoZW4gdGhlIG1hcHBpbmcgaXMgUFJPVF9XUklURSB0aGUgQGRhdGFfdGFpbCB2YWx1ZSBzaG91bGQgYmUKLQkgKiB3cml0dGVuIGJ5IHVzZXJzcGFjZSB0byByZWZsZWN0IHRoZSBsYXN0IHJlYWQgZGF0YS4gSW4gdGhpcyBjYXNlCi0JICogdGhlIGtlcm5lbCB3aWxsIG5vdCBvdmVyLXdyaXRlIHVucmVhZCBkYXRhLgotCSAqLwotCV9fdTY0ICAgZGF0YV9oZWFkOwkJLyogaGVhZCBpbiB0aGUgZGF0YSBzZWN0aW9uICovCi0JX191NjQJZGF0YV90YWlsOwkJLyogdXNlci1zcGFjZSB3cml0dGVuIHRhaWwgKi8KLX07Ci0KLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0NQVU1PREVfTUFTSwkJKDMgPDwgMCkKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0NQVU1PREVfVU5LTk9XTgkJKDAgPDwgMCkKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0tFUk5FTAkJCSgxIDw8IDApCi0jZGVmaW5lIFBFUkZfRVZFTlRfTUlTQ19VU0VSCQkJKDIgPDwgMCkKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX0hZUEVSVklTT1IJCSgzIDw8IDApCi0KLXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciB7Ci0JX191MzIJdHlwZTsKLQlfX3UxNgltaXNjOwotCV9fdTE2CXNpemU7Ci19OwotCi1lbnVtIHBlcmZfZXZlbnRfdHlwZSB7Ci0KLQkvKgotCSAqIFRoZSBNTUFQIGV2ZW50cyByZWNvcmQgdGhlIFBST1RfRVhFQyBtYXBwaW5ncyBzbyB0aGF0IHdlIGNhbgotCSAqIGNvcnJlbGF0ZSB1c2Vyc3BhY2UgSVBzIHRvIGNvZGUuIFRoZXkgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKLQkgKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgotCSAqCXUzMgkJCQlwaWQsIHRpZDsKLQkgKgl1NjQJCQkJYWRkcjsKLQkgKgl1NjQJCQkJbGVuOwotCSAqCXU2NAkJCQlwZ29mZjsKLQkgKgljaGFyCQkJCWZpbGVuYW1lW107Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX01NQVAJCQk9IDEsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgl1NjQJCQkJaWQ7Ci0JICoJdTY0CQkJCWxvc3Q7Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX0xPU1QJCQk9IDIsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgotCSAqCXUzMgkJCQlwaWQsIHRpZDsKLQkgKgljaGFyCQkJCWNvbW1bXTsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfQ09NTQkJCT0gMywKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCXUzMgkJCQlwaWQsIHBwaWQ7Ci0JICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl1NjQJCQkJdGltZTsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfRVhJVAkJCT0gNCwKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCXU2NAkJCQl0aW1lOwotCSAqCXU2NAkJCQlpZDsKLQkgKgl1NjQJCQkJc3RyZWFtX2lkOwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9USFJPVFRMRQkJPSA1LAotCVBFUkZfRVZFTlRfVU5USFJPVFRMRQkJPSA2LAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoJdTMyCQkJCXBpZCwgcHBpZDsKLQkgKgl1MzIJCQkJdGlkLCBwdGlkOwotCSAqCXU2NAkJCQl0aW1lOwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9GT1JLCQkJPSA3LAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoJdTMyCQkJCXBpZCwgdGlkOwotCSAqCi0JICoJc3RydWN0IHJlYWRfZm9ybWF0CQl2YWx1ZXM7Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX1JFQUQJCQk9IDgsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgotCSAqCXsgdTY0CQkJaXA7CSAgfSAmJiBQRVJGX1NBTVBMRV9JUAotCSAqCXsgdTMyCQkJcGlkLCB0aWQ7IH0gJiYgUEVSRl9TQU1QTEVfVElECi0JICoJeyB1NjQJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCi0JICoJeyB1NjQJCQlhZGRyOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9BRERSCi0JICoJeyB1NjQJCQlpZDsJICB9ICYmIFBFUkZfU0FNUExFX0lECi0JICoJeyB1NjQJCQlzdHJlYW1faWQ7fSAmJiBQRVJGX1NBTVBMRV9TVFJFQU1fSUQKLQkgKgl7IHUzMgkJCWNwdSwgcmVzOyB9ICYmIFBFUkZfU0FNUExFX0NQVQotCSAqCXsgdTY0CQkJcGVyaW9kOyAgIH0gJiYgUEVSRl9TQU1QTEVfUEVSSU9ECi0JICoKLQkgKgl7IHN0cnVjdCByZWFkX2Zvcm1hdAl2YWx1ZXM7CSAgfSAmJiBQRVJGX1NBTVBMRV9SRUFECi0JICoKLQkgKgl7IHU2NAkJCW5yLAotCSAqCSAgdTY0CQkJaXBzW25yXTsgIH0gJiYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOCi0JICoKLQkgKgkjCi0JICoJIyBUaGUgUkFXIHJlY29yZCBiZWxvdyBpcyBvcGFxdWUgZGF0YSB3cnQgdGhlIEFCSQotCSAqCSMKLQkgKgkjIFRoYXQgaXMsIHRoZSBBQkkgZG9lc24ndCBtYWtlIGFueSBwcm9taXNlcyB3cnQgdG8KLQkgKgkjIHRoZSBzdGFiaWxpdHkgb2YgaXRzIGNvbnRlbnQsIGl0IG1heSB2YXJ5IGRlcGVuZGluZwotCSAqCSMgb24gZXZlbnQsIGhhcmR3YXJlLCBrZXJuZWwgdmVyc2lvbiBhbmQgcGhhc2Ugb2YKLQkgKgkjIHRoZSBtb29uLgotCSAqCSMKLQkgKgkjIEluIG90aGVyIHdvcmRzLCBQRVJGX1NBTVBMRV9SQVcgY29udGVudHMgYXJlIG5vdCBhbiBBQkkuCi0JICoJIwotCSAqCi0JICoJeyB1MzIJCQlzaXplOwotCSAqCSAgY2hhciAgICAgICAgICAgICAgICAgIGRhdGFbc2l6ZV07fSYmIFBFUkZfU0FNUExFX1JBVwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9TQU1QTEUJCT0gOSwKLQotCVBFUkZfRVZFTlRfTUFYLAkJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLWVudW0gcGVyZl9jYWxsY2hhaW5fY29udGV4dCB7Ci0JUEVSRl9DT05URVhUX0hWCQkJPSAoX191NjQpLTMyLAotCVBFUkZfQ09OVEVYVF9LRVJORUwJCT0gKF9fdTY0KS0xMjgsCi0JUEVSRl9DT05URVhUX1VTRVIJCT0gKF9fdTY0KS01MTIsCi0KLQlQRVJGX0NPTlRFWFRfR1VFU1QJCT0gKF9fdTY0KS0yMDQ4LAotCVBFUkZfQ09OVEVYVF9HVUVTVF9LRVJORUwJPSAoX191NjQpLTIxNzYsCi0JUEVSRl9DT05URVhUX0dVRVNUX1VTRVIJCT0gKF9fdTY0KS0yNTYwLAotCi0JUEVSRl9DT05URVhUX01BWAkJPSAoX191NjQpLTQwOTUsCi19OwotCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUAkJKDFVIDw8IDApCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQJCSgxVSA8PCAxKQotCi0vKgotICogSW4gY2FzZSBzb21lIGFwcCBzdGlsbCByZWZlcmVuY2VzIHRoZSBvbGQgc3ltYm9sczoKLSAqLwotCi0jZGVmaW5lIF9fTlJfcGVyZl9jb3VudGVyX29wZW4JCV9fTlJfcGVyZl9ldmVudF9vcGVuCi0KLSNkZWZpbmUgUFJfVEFTS19QRVJGX0NPVU5URVJTX0RJU0FCTEUJUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCi0jZGVmaW5lIFBSX1RBU0tfUEVSRl9DT1VOVEVSU19FTkFCTEUJUFJfVEFTS19QRVJGX0VWRU5UU19FTkFCTEUKLQotI2VuZGlmIC8qIF9MSU5VWF9QRVJGX0NPVU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IGU3MGU2MjEuLmE2ODYxZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTMxNSw4ICszMTUsOSBAQAogCWludCAoKmNsYWltX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOwogCS8qIHJlbGVhc2UgcnN2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KIAl2b2lkICgqcmVsZWFzZV9yc3YpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7Ci0JLyogZ2V0IHJlc2VydmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCi0JcXNpemVfdCAoKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwkvKiBnZXQgcmVzZXJ2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MsIHZhbHVlIHJldHVybmVkIGlzIG1hbmFnZWQgYnkKKwkgKiBxdW90YSBjb2RlIG9ubHkgKi8KKwlxc2l6ZV90ICooKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKIH07CiAKIC8qIE9wZXJhdGlvbnMgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKaW5kZXggYzRiYTlhNy4uOTZjYzMwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKQEAgLTEwMSw0ICsxMDEsOSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIGludCByY3VfcHJlZW1wdF9kZXB0aCh2b2lkKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VUSU5ZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggYzkzZWVlNS4uODA0NGIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTQ1LDYgKzQ1LDEyIEBACiBleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3Uodm9pZCk7CiBleHRlcm4gdm9pZCBleGl0X3JjdSh2b2lkKTsKIAorLyoKKyAqIERlZmluZWQgYXMgbWFjcm8gYXMgaXQgaXMgYSB2ZXJ5IGxvdyBsZXZlbCBoZWFkZXIKKyAqIGluY2x1ZGVkIGZyb20gYXJlYXMgdGhhdCBkb24ndCBldmVuIGtub3cgYWJvdXQgY3VycmVudAorICovCisjZGVmaW5lIHJjdV9wcmVlbXB0X2RlcHRoKCkgKGN1cnJlbnQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZykKKwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JjdV9yZWFkX2xvY2sodm9pZCkKQEAgLTYzLDYgKzY5LDExIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9wcmVlbXB0X2RlcHRoKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfbG9ja19iaCh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IGM5NmMxODUuLjFiYTNjZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTYyLDYgKzYyLDEyIEBACiBpbnQgcmVpc2VyZnNfd3JpdGVfbG9ja19vbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqcyk7CiB2b2lkIHJlaXNlcmZzX3dyaXRlX3VubG9ja19vbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IGxvY2tfZGVwdGgpOwogCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCit2b2lkIHJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqcyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqcykgeyB9CisjZW5kaWYKKwogLyoKICAqIFNldmVyYWwgbXV0ZXhlcyBkZXBlbmQgb24gdGhlIHdyaXRlIGxvY2suCiAgKiBIb3dldmVyIHNvbWV0aW1lcyB3ZSB3YW50IHRvIHJlbGF4IHRoZSB3cml0ZSBsb2NrIHdoaWxlIHdlIGhvbGQKQEAgLTkyLDExICs5OCwzMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX211dGV4X2xvY2tfc2FmZShzdHJ1Y3QgbXV0ZXggKm0sCiAJCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogeworCXJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHMpOwogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhzKTsKIAltdXRleF9sb2NrKG0pOwogCXJlaXNlcmZzX3dyaXRlX2xvY2socyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVpc2VyZnNfbXV0ZXhfbG9ja19uZXN0ZWRfc2FmZShzdHJ1Y3QgbXV0ZXggKm0sIHVuc2lnbmVkIGludCBzdWJjbGFzcywKKwkJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCit7CisJcmVpc2VyZnNfbG9ja19jaGVja19yZWN1cnNpdmUocyk7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHMpOworCW11dGV4X2xvY2tfbmVzdGVkKG0sIHN1YmNsYXNzKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlaXNlcmZzX2Rvd25fcmVhZF9zYWZlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCXJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHMpOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhzKTsKKwlkb3duX3JlYWQoc2VtKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKHMpOworfQorCiAvKgogICogV2hlbiB3ZSBzY2hlZHVsZSwgd2UgdXN1YWxseSB3YW50IHRvIGFsc28gcmVsZWFzZSB0aGUgd3JpdGUgbG9jaywKICAqIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXMgYmtsIGJhc2VkIGxvY2tpbmcgc2NoZW1lIG9mIHJlaXNlcmZzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oCmluZGV4IDQwZmM3ZTYuLmYxZTkxNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgKQEAgLTMsOCArMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQogLyoKICAqIFJlc291cmNlIGNvbnRyb2wvYWNjb3VudGluZyBoZWFkZXIgZmlsZSBmb3IgbGludXgKICAqLwpAQCAtNzAsNiArNjgsMTIgQEAKICAqLwogI2luY2x1ZGUgPGFzbS9yZXNvdXJjZS5oPgogCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKIGludCBnZXRydXNhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2hvLCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqcnUpOwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCBlODk4NTc4Li44ZDQ5OTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xOTIsNiArMTkyLDEyIEBACiAjZGVmaW5lIFRBU0tfREVBRAkJNjQKICNkZWZpbmUgVEFTS19XQUtFS0lMTAkJMTI4CiAjZGVmaW5lIFRBU0tfV0FLSU5HCQkyNTYKKyNkZWZpbmUgVEFTS19TVEFURV9NQVgJCTUxMgorCisjZGVmaW5lIFRBU0tfU1RBVEVfVE9fQ0hBUl9TVFIgIlJTRFR0Wlh4S1ciCisKK2V4dGVybiBjaGFyIF9fX2Fzc2VydF90YXNrX3N0YXRlWzEgLSAyKiEhKAorCQlzaXplb2YoVEFTS19TVEFURV9UT19DSEFSX1NUUiktMSAhPSBpbG9nMihUQVNLX1NUQVRFX01BWCkrMSldOwogCiAvKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIHRoZSBzYWtlIG9mIHNldF90YXNrX3N0YXRlICovCiAjZGVmaW5lIFRBU0tfS0lMTEFCTEUJCShUQVNLX1dBS0VLSUxMIHwgVEFTS19VTklOVEVSUlVQVElCTEUpCkBAIC0xMDkxLDcgKzEwOTcsOCBAQAogCQkJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpOwogCXZvaWQgKCpwcmVfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAJdm9pZCAoKnBvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwotCXZvaWQgKCp0YXNrX3dha2VfdXApIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisJdm9pZCAoKnRhc2tfd2FraW5nKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCXZvaWQgKCp0YXNrX3dva2VuKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCiAJdm9pZCAoKnNldF9jcHVzX2FsbG93ZWQpKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld21hc2spOwpAQCAtMTExNSw3ICsxMTIyLDcgQEAKIAkJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotCXZvaWQgKCptb3ZlZF9ncm91cCkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisJdm9pZCAoKm1vdmVkX2dyb3VwKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgb25fcnEpOwogI2VuZGlmCiB9OwogCkBAIC0yNTk0LDcgKzI2MDEsMjcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTU1fT1dORVIgKi8KIAotI2RlZmluZSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSICJSU0RUdFpYIgorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRhc2tfcmxpbWl0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQl1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJcmV0dXJuIEFDQ0VTU19PTkNFKHRzay0+c2lnbmFsLT5ybGltW2xpbWl0XS5ybGltX2N1cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YXNrX3JsaW1pdF9tYXgoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCXVuc2lnbmVkIGludCBsaW1pdCkKK3sKKwlyZXR1cm4gQUNDRVNTX09OQ0UodHNrLT5zaWduYWwtPnJsaW1bbGltaXRdLnJsaW1fbWF4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJsaW1pdCh1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJcmV0dXJuIHRhc2tfcmxpbWl0KGN1cnJlbnQsIGxpbWl0KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJsaW1pdF9tYXgodW5zaWduZWQgaW50IGxpbWl0KQoreworCXJldHVybiB0YXNrX3JsaW1pdF9tYXgoY3VycmVudCwgbGltaXQpOworfQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oIGIvaW5jbHVkZS9saW51eC9zb255cGkuaAppbmRleCAzNGM0NDc1Li40Zjk1YzFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ueXBpLmgKQEAgLTExMSw2ICsxMTEsNyBAQAogI2RlZmluZSBTT05ZUElfRVZFTlRfVk9MVU1FX0lOQ19QUkVTU0VECQk2OQogI2RlZmluZSBTT05ZUElfRVZFTlRfVk9MVU1FX0RFQ19QUkVTU0VECQk3MAogI2RlZmluZSBTT05ZUElfRVZFTlRfQlJJR0hUTkVTU19QUkVTU0VECQk3MQorI2RlZmluZSBTT05ZUElfRVZFTlRfTUVESUFfUFJFU1NFRAkJNzIKIAogLyogZ2V0L3NldCBicmlnaHRuZXNzICovCiAjZGVmaW5lIFNPTllQSV9JT0NHQlJUCQlfSU9SKCd2JywgMCwgX191OCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA2NTc5M2U5Li4yMDc0NjZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC0xOTUsNyArMTk1LDcgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQlcCiAJICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJXAogCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAotCSAgX19zeXNjYWxsX21ldGFfIyNzbmFtZSA9IHsJCQkJXAorCSAgX19zeXNjYWxsX21ldGFfXyMjc25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgCQk9ICJzeXNfIiNzbmFtZSwJCQlcCiAJCS5uYl9hcmdzIAk9IDAsCQkJCVwKIAkJLmVudGVyX2V2ZW50CT0gJmV2ZW50X2VudGVyX18jI3NuYW1lLAlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCA4NzdiYTAzLi5iZDI3ZmJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTQ4Miw2ICs0ODIsNyBAQAogCU5FVF9JUFY0X0NPTkZfQVJQX0FDQ0VQVD0yMSwKIAlORVRfSVBWNF9DT05GX0FSUF9OT1RJRlk9MjIsCiAJTkVUX0lQVjRfQ09ORl9BQ0NFUFRfTE9DQUw9MjMsCisJTkVUX0lQVjRfQ09ORl9TUkNfVk1BUks9MjQsCiAJX19ORVRfSVBWNF9DT05GX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDlkNjhmZWQuLmNmYTgzMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTk5LDggKzk5LDkgQEAKIHZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIpOwogCiBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwotdm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwordm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CiAKIGludCBfX211c3RfY2hlY2sgc3lzZnNfY3JlYXRlX2xpbmsoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqZWN0ICp0YXJnZXQsCiAJCQkJICAgY29uc3QgY2hhciAqbmFtZSk7CkBAIC0xNzUsMTMgKzE3NiwxMyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQorCQkJCQljb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkJIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQorCQkJCQkgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggYWNmNmU0NS4uMTgxOTM5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAKICNkZWZpbmUgU0VSSUFMX1RUWV9NQUpPUgkxODgJLyogTmljZSBsZWdhbCBudW1iZXIgbm93ICovCiAjZGVmaW5lIFNFUklBTF9UVFlfTUlOT1JTCTI1NAkvKiBsb2FkcyBvZiBkZXZpY2VzIDopICovCkBAIC05NCw3ICs5NSw3IEBACiAJdW5zaWduZWQgY2hhcgkJKmJ1bGtfb3V0X2J1ZmZlcjsKIAlpbnQJCQlidWxrX291dF9zaXplOwogCXN0cnVjdCB1cmIJCSp3cml0ZV91cmI7Ci0Jc3RydWN0IGtmaWZvCQkqd3JpdGVfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8JCXdyaXRlX2ZpZm87CiAJaW50CQkJd3JpdGVfdXJiX2J1c3k7CiAJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaCBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKaW5kZXggYzE4YzAwOC4uNzZlODkwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC03MCw2ICs3MCw3IEBACiBzdHJ1Y3QgYmRpX3dyaXRlYmFjazsKIGludCBpbm9kZV93YWl0KHZvaWQgKik7CiB2b2lkIHdyaXRlYmFja19pbm9kZXNfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICopOworaW50IHdyaXRlYmFja19pbm9kZXNfc2JfaWZfaWRsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiB2b2lkIHN5bmNfaW5vZGVzX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHZvaWQgd3JpdGViYWNrX2lub2Rlc193YmMoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogbG9uZyB3Yl9kb193cml0ZWJhY2soc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCBpbnQgZm9yY2Vfd2FpdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCAyYWZmNDkwLi4wYmYzNjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTU0Nyw3ICs1NDcsNiBAQAogICoJdW5zcGVjaWZpZWQgZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgZmxhZ3MKICAqCUBJRUVFODAyMTFfSFdfU0lHTkFMXyoKICAqIEBub2lzZTogbm9pc2Ugd2hlbiByZWNlaXZpbmcgdGhpcyBmcmFtZSwgaW4gZEJtLgotICogQHF1YWw6IG92ZXJhbGwgc2lnbmFsIHF1YWxpdHkgaW5kaWNhdGlvbiwgaW4gcGVyY2VudCAoMC0xMDApLgogICogQGFudGVubmE6IGFudGVubmEgdXNlZAogICogQHJhdGVfaWR4OiBpbmRleCBvZiBkYXRhIHJhdGUgaW50byBiYW5kJ3Mgc3VwcG9ydGVkIHJhdGVzIG9yIE1DUyBpbmRleCBpZgogICoJSFQgcmF0ZXMgYXJlIHVzZSAoUlhfRkxBR19IVCkKQEAgLTU1OSw3ICs1NTgsNiBAQAogCWludCBmcmVxOwogCWludCBzaWduYWw7CiAJaW50IG5vaXNlOwotCWludCBfX2RlcHJlY2F0ZWQgcXVhbDsKIAlpbnQgYW50ZW5uYTsKIAlpbnQgcmF0ZV9pZHg7CiAJaW50IGZsYWc7CkBAIC0xNzM3LDYgKzE3MzUsMTIgQEAKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAorLyoKKyAqIFRoZSBUWCBoZWFkcm9vbSByZXNlcnZlZCBieSBtYWM4MDIxMSBmb3IgaXRzIG93biB0eF9zdGF0dXMgZnVuY3Rpb25zLgorICogVGhpcyBpcyBlbm91Z2ggZm9yIHRoZSByYWRpb3RhcCBoZWFkZXIuCisgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1RYX1NUQVRVU19IRUFEUk9PTQkxMworCiAvKioKICAqIGllZWU4MDIxMV90eF9zdGF0dXMgLSB0cmFuc21pdCBzdGF0dXMgY2FsbGJhY2sKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDczOTRlM2IuLmZmOTJiNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8c2NzaS9pc2NzaV9wcm90by5oPgogI2luY2x1ZGUgPHNjc2kvaXNjc2lfaWYuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CkBAIC0yMzEsNyArMjMyLDcgQEAKIH07CiAKIHN0cnVjdCBpc2NzaV9wb29sIHsKLQlzdHJ1Y3Qga2ZpZm8JCSpxdWV1ZTsJCS8qIEZJRk8gUXVldWUgKi8KKwlzdHJ1Y3Qga2ZpZm8JCXF1ZXVlOwkJLyogRklGTyBRdWV1ZSAqLwogCXZvaWQJCQkqKnBvb2w7CQkvKiBQb29sIG9mIGVsZW1lbnRzICovCiAJaW50CQkJbWF4OwkJLyogTWF4IG51bWJlciBvZiBlbGVtZW50cyAqLwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaAppbmRleCA5ZTMxODJlLi43NDFhZTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2lfdGNwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpX3RjcC5oCkBAIC04MCw3ICs4MCw3IEBACiAJaW50CQkJZGF0YV9vZmZzZXQ7CiAJc3RydWN0IGlzY3NpX3IydF9pbmZvCSpyMnQ7CQkvKiBpbiBwcm9ncmVzcyBzb2xpY3QgUjJUICovCiAJc3RydWN0IGlzY3NpX3Bvb2wJcjJ0cG9vbDsKLQlzdHJ1Y3Qga2ZpZm8JCSpyMnRxdWV1ZTsKKwlzdHJ1Y3Qga2ZpZm8JCXIydHF1ZXVlOwogCXZvaWQJCQkqZGRfZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJzcnAuaCBiL2luY2x1ZGUvc2NzaS9saWJzcnAuaAppbmRleCBiYTYxNWU0Li5mNDEwNWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGlic3JwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYnNycC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0xJQlNSUF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3NycC5oPgpAQCAtMjEsNyArMjIsNyBAQAogc3RydWN0IHNycF9xdWV1ZSB7CiAJdm9pZCAqcG9vbDsKIAl2b2lkICppdGVtczsKLQlzdHJ1Y3Qga2ZpZm8gKnF1ZXVlOworCXN0cnVjdCBrZmlmbyBxdWV1ZTsKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCA3MzUyMzE1MS4uYzZmZTAzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCkBAIC00MTQsNyArNDE0LDggQEAKIAlCVUlMRF9CVUdfT04obGVuID4gTUFYX0ZJTFRFUl9TVFJfVkFMKTsJCQkJXAogCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSAiWyIgI2xlbiAiXSIsICNpdGVtLAlcCiAJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAotCQkJCSBzaXplb2YoZmllbGQuaXRlbSksIDAsIEZJTFRFUl9PVEhFUik7CVwKKwkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLAkJCVwKKwkJCQkgaXNfc2lnbmVkX3R5cGUodHlwZSksIEZJTFRFUl9PVEhFUik7CVwKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldHVybiByZXQ7CiAKQEAgLTQyMiw4ICs0MjMsOCBAQAogI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkgICAgICAgXAogCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAiX19kYXRhX2xvYyAiICN0eXBlICJbXSIsICNpdGVtLCAgXAogCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBfX2RhdGFfbG9jXyMjaXRlbSksICAgXAotCQkJCSBzaXplb2YoZmllbGQuX19kYXRhX2xvY18jI2l0ZW0pLCAwLAkgICAgICAgXAotCQkJCSBGSUxURVJfT1RIRVIpOworCQkJCSBzaXplb2YoZmllbGQuX19kYXRhX2xvY18jI2l0ZW0pLAkgICAgICAgXAorCQkJCSBpc19zaWduZWRfdHlwZSh0eXBlKSwgRklMVEVSX09USEVSKTsKIAogI3VuZGVmIF9fc3RyaW5nCiAjZGVmaW5lIF9fc3RyaW5nKGl0ZW0sIHNyYykgX19keW5hbWljX2FycmF5KGNoYXIsIGl0ZW0sIC0xKQpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCBjM2RiNGE5Li5kYWM0NGE5IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMzY5LDEyICszNjksNiBAQAogewogCXVuc2lnbmVkIGludCBjcHU7CiAKLQkvKgotCSAqIFNldCB1cCB0aGUgY3VycmVudCBDUFUgYXMgcG9zc2libGUgdG8gbWlncmF0ZSB0by4KLQkgKiBUaGUgb3RoZXIgb25lcyB3aWxsIGJlIGRvbmUgYnkgY3B1X3VwL2NwdV9kb3duKCkKLQkgKi8KLQlzZXRfY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCksIHRydWUpOwotCiAJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdXNlcnNwYWNlIC0tUlIgKi8KIAlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKIAkJaWYgKG51bV9vbmxpbmVfY3B1cygpID49IHNldHVwX21heF9jcHVzKQpAQCAtNDg2LDYgKzQ4MCw3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkvKiBNYXJrIHRoZSBib290IGNwdSAicHJlc2VudCIsICJvbmxpbmUiIGV0YyBmb3IgU01QIGFuZCBVUCBjYXNlICovCiAJc2V0X2NwdV9vbmxpbmUoY3B1LCB0cnVlKTsKKwlzZXRfY3B1X2FjdGl2ZShjcHUsIHRydWUpOwogCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOwogCXNldF9jcHVfcG9zc2libGUoY3B1LCB0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdF90cmVlLmMgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCmluZGV4IDI0NTFkYzYuLjRiMDViZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdF90cmVlLmMKKysrIGIva2VybmVsL2F1ZGl0X3RyZWUuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCW93bmVyLT5yb290ID0gTlVMTDsKIAl9CiAKLQlmb3IgKGkgPSBqID0gMDsgaSA8IHNpemU7IGkrKywgaisrKSB7CisJZm9yIChpID0gaiA9IDA7IGogPD0gc2l6ZTsgaSsrLCBqKyspIHsKIAkJc3RydWN0IGF1ZGl0X3RyZWUgKnM7CiAJCWlmICgmY2h1bmstPm93bmVyc1tqXSA9PSBwKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZwLT5saXN0KTsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlpZiAoIXMpIC8qIHJlc3VsdCBvZiBlYXJsaWVyIGZhbGxiYWNrICovCiAJCQljb250aW51ZTsKIAkJZ2V0X3RyZWUocyk7Ci0JCWxpc3RfcmVwbGFjZV9pbml0KCZjaHVuay0+b3duZXJzW2ldLmxpc3QsICZuZXctPm93bmVyc1tqXS5saXN0KTsKKwkJbGlzdF9yZXBsYWNlX2luaXQoJmNodW5rLT5vd25lcnNbal0ubGlzdCwgJm5ldy0+b3duZXJzW2ldLmxpc3QpOwogCX0KIAogCWxpc3RfcmVwbGFjZV9yY3UoJmNodW5rLT5oYXNoLCAmbmV3LT5oYXNoKTsKQEAgLTM3MywxNSArMzczLDE3IEBACiAJZm9yIChuID0gMDsgbiA8IG9sZC0+Y291bnQ7IG4rKykgewogCQlpZiAob2xkLT5vd25lcnNbbl0ub3duZXIgPT0gdHJlZSkgewogCQkJc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JCQlwdXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7CisJCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAogCWNodW5rID0gYWxsb2NfY2h1bmsob2xkLT5jb3VudCArIDEpOwotCWlmICghY2h1bmspCisJaWYgKCFjaHVuaykgeworCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKIAlpZiAoaW5vdGlmeV9jbG9uZV93YXRjaCgmb2xkLT53YXRjaCwgJmNodW5rLT53YXRjaCkgPCAwKSB7CkBAIC00MjUsNyArNDI3LDggQEAKIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAlpbm90aWZ5X2V2aWN0X3dhdGNoKCZvbGQtPndhdGNoKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CisJcHV0X2lub3RpZnlfd2F0Y2goJm9sZC0+d2F0Y2gpOyAvKiBwYWlyIHRvIGlub3RpZnlfZmluZF93YXRjaCAqLworCXB1dF9pbm90aWZ5X3dhdGNoKCZvbGQtPndhdGNoKTsgLyogYW5kIGtpbGwgaXQgKi8KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggMjY3ZTQ4NC4uZmMwZjkyOCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0yNTAsNyArMjUwLDYgQEAKICNlbmRpZgogfTsKIAotI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDRcMDAyXDAwNlwwMDYiWyh4KSZPX0FDQ01PREVdKQogc3RhdGljIGlubGluZSBpbnQgb3Blbl9hcmcoaW50IGZsYWdzLCBpbnQgbWFzaykKIHsKIAlpbnQgbiA9IEFDQ19NT0RFKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCAyOTFhYzU4Li4xYzhkZGQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC0yMDksNiArMjA5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljcHVfaG90cGx1Z19iZWdpbigpOworCXNldF9jcHVfYWN0aXZlKGNwdSwgZmFsc2UpOwogCWVyciA9IF9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RPV05fUFJFUEFSRSB8IG1vZCwKIAkJCQkJaGNwdSwgLTEsICZucl9jYWxscyk7CiAJaWYgKGVyciA9PSBOT1RJRllfQkFEKSB7CkBAIC0yODAsMTggKzI4MSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNldF9jcHVfYWN0aXZlKGNwdSwgZmFsc2UpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIGFsbCBjcHVzIGRpZCB0aGUgcmVzY2hlZHVsZSBhbmQgYXJlIG5vdAotCSAqIHVzaW5nIHN0YWxlIHZlcnNpb24gb2YgdGhlIGNwdV9hY3RpdmVfbWFzay4KLQkgKiBUaGlzIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgYmVjdWFzZSBzdG9wX21hY2hpbmUoKQotCSAqIHRoYXQgd2UgcnVuIGRvd24gdGhlIGxpbmUgYWxyZWFkeSBwcm92aWRlcyB0aGUgcmVxdWlyZWQKLQkgKiBzeW5jaHJvbml6YXRpb24uIEJ1dCBpdCdzIHJlYWxseSBhIHNpZGUgZWZmZWN0IGFuZCB3ZSBkbyBub3QKLQkgKiB3YW50IHRvIGRlcGVuZCBvbiB0aGUgaW5uYXJkcyBvZiB0aGUgc3RvcF9tYWNoaW5lIGhlcmUuCi0JICovCi0Jc3luY2hyb25pemVfc2NoZWQoKTsKLQogCWVyciA9IF9jcHVfZG93bihjcHUsIDApOwogCiBvdXQ6CkBAIC0zODIsMTkgKzM3MSwxMiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJY3B1X21hcHNfdXBkYXRlX2JlZ2luKCk7CiAJZmlyc3RfY3B1ID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spOwotCS8qIFdlIHRha2UgZG93biBhbGwgb2YgdGhlIG5vbi1ib290IENQVXMgaW4gb25lIHNob3QgdG8gYXZvaWQgcmFjZXMKKwkvKgorCSAqIFdlIHRha2UgZG93biBhbGwgb2YgdGhlIG5vbi1ib290IENQVXMgaW4gb25lIHNob3QgdG8gYXZvaWQgcmFjZXMKIAkgKiB3aXRoIHRoZSB1c2Vyc3BhY2UgdHJ5aW5nIHRvIHVzZSB0aGUgQ1BVIGhvdHBsdWcgYXQgdGhlIHNhbWUgdGltZQogCSAqLwogCWNwdW1hc2tfY2xlYXIoZnJvemVuX2NwdXMpOwogCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSBmaXJzdF9jcHUpCi0JCQljb250aW51ZTsKLQkJc2V0X2NwdV9hY3RpdmUoY3B1LCBmYWxzZSk7Ci0JfQotCi0Jc3luY2hyb25pemVfc2NoZWQoKTsKLQogCXByaW50aygiRGlzYWJsaW5nIG5vbi1ib290IENQVXMgLi4uXG4iKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGZpcnN0X2NwdSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9od19icmVha3BvaW50LmMgYi9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGRiY2JmNmEuLjUwZGJkNTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgpAQCAtMzg4LDcgKzM4OSw4IEBACiAJaWYgKCFjcHVfZXZlbnRzKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwlnZXRfb25saW5lX2NwdXMoKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlwZXZlbnQgPSBwZXJfY3B1X3B0cihjcHVfZXZlbnRzLCBjcHUpOwogCQlicCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKGF0dHIsIGNwdSwgLTEsIHRyaWdnZXJlZCk7CiAKQEAgLTM5OSwxOCArNDAxLDIwIEBACiAJCQlnb3RvIGZhaWw7CiAJCX0KIAl9CisJcHV0X29ubGluZV9jcHVzKCk7CiAKIAlyZXR1cm4gY3B1X2V2ZW50czsKIAogZmFpbDoKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJcGV2ZW50ID0gcGVyX2NwdV9wdHIoY3B1X2V2ZW50cywgY3B1KTsKIAkJaWYgKElTX0VSUigqcGV2ZW50KSkKIAkJCWJyZWFrOwogCQl1bnJlZ2lzdGVyX2h3X2JyZWFrcG9pbnQoKnBldmVudCk7CiAJfQorCXB1dF9vbmxpbmVfY3B1cygpOworCiAJZnJlZV9wZXJjcHUoY3B1X2V2ZW50cyk7Ci0JLyogcmV0dXJuIHRoZSBlcnJvciBpZiBhbnkgKi8KIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZmlmby5jIGIva2VybmVsL2tmaWZvLmMKaW5kZXggMzc2NWZmMy4uZTkyZDUxOSAxMDA2NDQKLS0tIGEva2VybmVsL2tmaWZvLmMKKysrIGIva2VybmVsL2tmaWZvLmMKQEAgLTEsNiArMSw3IEBACiAvKgotICogQSBzaW1wbGUga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24uCisgKiBBIGdlbmVyaWMga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24uCiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZWZhbmkgU2VpYm9sZCA8c3RlZmFuaUBzZWlib2xkLm5ldD4KICAqIENvcHlyaWdodCAoQykgMjAwNCBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNSw1MCArMjYsNDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKK3N0YXRpYyB2b2lkIF9rZmlmb19pbml0KHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQl1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlmaWZvLT5idWZmZXIgPSBidWZmZXI7CisJZmlmby0+c2l6ZSA9IHNpemU7CisKKwlrZmlmb19yZXNldChmaWZvKTsKK30KIAogLyoqCi0gKiBrZmlmb19pbml0IC0gYWxsb2NhdGVzIGEgbmV3IEZJRk8gdXNpbmcgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyCisgKiBrZmlmb19pbml0IC0gaW5pdGlhbGl6ZSBhIEZJRk8gdXNpbmcgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYXNzaWduIHRoZSBidWZmZXIKICAqIEBidWZmZXI6IHRoZSBwcmVhbGxvY2F0ZWQgYnVmZmVyIHRvIGJlIHVzZWQuCiAgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlciwgdGhpcyBoYXZlIHRvIGJlIGEgcG93ZXIgb2YgMi4KLSAqIEBnZnBfbWFzazogZ2V0X2ZyZWVfcGFnZXMgbWFzaywgcGFzc2VkIHRvIGttYWxsb2MoKQotICogQGxvY2s6IHRoZSBsb2NrIHRvIGJlIHVzZWQgdG8gcHJvdGVjdCB0aGUgZmlmbyBidWZmZXIKICAqCi0gKiBEbyBOT1QgcGFzcyB0aGUga2ZpZm8gdG8ga2ZpZm9fZnJlZSgpIGFmdGVyIHVzZSEgU2ltcGx5IGZyZWUgdGhlCi0gKiAmc3RydWN0IGtmaWZvIHdpdGgga2ZyZWUoKS4KICAqLwotc3RydWN0IGtmaWZvICprZmlmb19pbml0KHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUsCi0JCQkgZ2ZwX3QgZ2ZwX21hc2ssIHNwaW5sb2NrX3QgKmxvY2spCit2b2lkIGtmaWZvX2luaXQoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQogewotCXN0cnVjdCBrZmlmbyAqZmlmbzsKLQogCS8qIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KIAlCVUdfT04oIWlzX3Bvd2VyX29mXzIoc2l6ZSkpOwogCi0JZmlmbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZmlmbyksIGdmcF9tYXNrKTsKLQlpZiAoIWZpZm8pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JZmlmby0+YnVmZmVyID0gYnVmZmVyOwotCWZpZm8tPnNpemUgPSBzaXplOwotCWZpZm8tPmluID0gZmlmby0+b3V0ID0gMDsKLQlmaWZvLT5sb2NrID0gbG9jazsKLQotCXJldHVybiBmaWZvOworCV9rZmlmb19pbml0KGZpZm8sIGJ1ZmZlciwgc2l6ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmaWZvX2luaXQpOwogCiAvKioKLSAqIGtmaWZvX2FsbG9jIC0gYWxsb2NhdGVzIGEgbmV3IEZJRk8gYW5kIGl0cyBpbnRlcm5hbCBidWZmZXIKLSAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGJlIGFsbG9jYXRlZC4KKyAqIGtmaWZvX2FsbG9jIC0gYWxsb2NhdGVzIGEgbmV3IEZJRk8gaW50ZXJuYWwgYnVmZmVyCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYXNzaWduIHRoZW4gbmV3IGJ1ZmZlcgorICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgYWxsb2NhdGVkLCB0aGlzIGhhdmUgdG8gYmUgYSBwb3dlciBvZiAyLgogICogQGdmcF9tYXNrOiBnZXRfZnJlZV9wYWdlcyBtYXNrLCBwYXNzZWQgdG8ga21hbGxvYygpCi0gKiBAbG9jazogdGhlIGxvY2sgdG8gYmUgdXNlZCB0byBwcm90ZWN0IHRoZSBmaWZvIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgbmV3IGZpZm8gaW50ZXJuYWwgYnVmZmVyCiAgKgogICogVGhlIHNpemUgd2lsbCBiZSByb3VuZGVkLXVwIHRvIGEgcG93ZXIgb2YgMi4KKyAqIFRoZSBidWZmZXIgd2lsbCBiZSByZWxlYXNlIHdpdGgga2ZpZm9fZnJlZSgpLgorICogUmV0dXJuIDAgaWYgbm8gZXJyb3IsIG90aGVyd2lzZSB0aGUgYW4gZXJyb3IgY29kZQogICovCi1zdHJ1Y3Qga2ZpZm8gKmtmaWZvX2FsbG9jKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzaywgc3BpbmxvY2tfdCAqbG9jaykKK2ludCBrZmlmb19hbGxvYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzaykKIHsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0Jc3RydWN0IGtmaWZvICpyZXQ7CiAKIAkvKgogCSAqIHJvdW5kIHVwIHRvIHRoZSBuZXh0IHBvd2VyIG9mIDIsIHNpbmNlIG91ciAnbGV0IHRoZSBpbmRpY2VzCkBAIC04MCw0OSArNzksNDcgQEAKIAl9CiAKIAlidWZmZXIgPSBrbWFsbG9jKHNpemUsIGdmcF9tYXNrKTsKLQlpZiAoIWJ1ZmZlcikKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKCFidWZmZXIpIHsKKwkJX2tmaWZvX2luaXQoZmlmbywgMCwgMCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotCXJldCA9IGtmaWZvX2luaXQoYnVmZmVyLCBzaXplLCBnZnBfbWFzaywgbG9jayk7CisJX2tmaWZvX2luaXQoZmlmbywgYnVmZmVyLCBzaXplKTsKIAotCWlmIChJU19FUlIocmV0KSkKLQkJa2ZyZWUoYnVmZmVyKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGtmaWZvX2FsbG9jKTsKIAogLyoqCi0gKiBrZmlmb19mcmVlIC0gZnJlZXMgdGhlIEZJRk8KKyAqIGtmaWZvX2ZyZWUgLSBmcmVlcyB0aGUgRklGTyBpbnRlcm5hbCBidWZmZXIKICAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBmcmVlZC4KICAqLwogdm9pZCBrZmlmb19mcmVlKHN0cnVjdCBrZmlmbyAqZmlmbykKIHsKIAlrZnJlZShmaWZvLT5idWZmZXIpOwotCWtmcmVlKGZpZm8pOwogfQogRVhQT1JUX1NZTUJPTChrZmlmb19mcmVlKTsKIAogLyoqCi0gKiBfX2tmaWZvX3B1dCAtIHB1dHMgc29tZSBkYXRhIGludG8gdGhlIEZJRk8sIG5vIGxvY2tpbmcgdmVyc2lvbgorICoga2ZpZm9fc2tpcCAtIHNraXAgb3V0cHV0IGRhdGEKICAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQGJ1ZmZlcjogdGhlIGRhdGEgdG8gYmUgYWRkZWQuCi0gKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAYnVmZmVyIGludG8KLSAqIHRoZSBGSUZPIGRlcGVuZGluZyBvbiB0aGUgZnJlZSBzcGFjZSwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgotICogYnl0ZXMgY29waWVkLgotICoKLSAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAotICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcAogICovCi11bnNpZ25lZCBpbnQgX19rZmlmb19wdXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCBrZmlmb19za2lwKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuIDwga2ZpZm9fbGVuKGZpZm8pKSB7CisJCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsZW4pOworCQlyZXR1cm47CisJfQorCWtmaWZvX3Jlc2V0X291dChmaWZvKTsKK30KK0VYUE9SVF9TWU1CT0woa2ZpZm9fc2tpcCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX2luX2RhdGEoc3RydWN0IGtmaWZvICpmaWZvLAorCQljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQogewogCXVuc2lnbmVkIGludCBsOwogCi0JbGVuID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIGZpZm8tPmluICsgZmlmby0+b3V0KTsKLQogCS8qCiAJICogRW5zdXJlIHRoYXQgd2Ugc2FtcGxlIHRoZSBmaWZvLT5vdXQgaW5kZXggLWJlZm9yZS0gd2UKIAkgKiBzdGFydCBwdXR0aW5nIGJ5dGVzIGludG8gdGhlIGtmaWZvLgpAQCAtMTMwLDQ1ICsxMjcsMjEgQEAKIAogCXNtcF9tYigpOwogCisJb2ZmID0gX19rZmlmb19vZmYoZmlmbywgZmlmby0+aW4gKyBvZmYpOworCiAJLyogZmlyc3QgcHV0IHRoZSBkYXRhIHN0YXJ0aW5nIGZyb20gZmlmby0+aW4gdG8gYnVmZmVyIGVuZCAqLwotCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gKGZpZm8tPmluICYgKGZpZm8tPnNpemUgLSAxKSkpOwotCW1lbWNweShmaWZvLT5idWZmZXIgKyAoZmlmby0+aW4gJiAoZmlmby0+c2l6ZSAtIDEpKSwgYnVmZmVyLCBsKTsKKwlsID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIG9mZik7CisJbWVtY3B5KGZpZm8tPmJ1ZmZlciArIG9mZiwgZnJvbSwgbCk7CiAKIAkvKiB0aGVuIHB1dCB0aGUgcmVzdCAoaWYgYW55KSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLQltZW1jcHkoZmlmby0+YnVmZmVyLCBidWZmZXIgKyBsLCBsZW4gLSBsKTsKLQotCS8qCi0JICogRW5zdXJlIHRoYXQgd2UgYWRkIHRoZSBieXRlcyB0byB0aGUga2ZpZm8gLWJlZm9yZS0KLQkgKiB3ZSB1cGRhdGUgdGhlIGZpZm8tPmluIGluZGV4LgotCSAqLwotCi0Jc21wX3dtYigpOwotCi0JZmlmby0+aW4gKz0gbGVuOwotCi0JcmV0dXJuIGxlbjsKKwltZW1jcHkoZmlmby0+YnVmZmVyLCBmcm9tICsgbCwgbGVuIC0gbCk7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fa2ZpZm9fcHV0KTsKIAotLyoqCi0gKiBfX2tmaWZvX2dldCAtIGdldHMgc29tZSBkYXRhIGZyb20gdGhlIEZJRk8sIG5vIGxvY2tpbmcgdmVyc2lvbgotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAYnVmZmVyOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KLSAqIEBsZW46IHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEZJRk8gaW50byB0aGUKLSAqIEBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCi0gKgotICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50Ci0gKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KLSAqLwotdW5zaWduZWQgaW50IF9fa2ZpZm9fZ2V0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19vdXRfZGF0YShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQogewogCXVuc2lnbmVkIGludCBsOwogCi0JbGVuID0gbWluKGxlbiwgZmlmby0+aW4gLSBmaWZvLT5vdXQpOwotCiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPmluIGluZGV4IC1iZWZvcmUtIHdlCiAJICogc3RhcnQgcmVtb3ZpbmcgYnl0ZXMgZnJvbSB0aGUga2ZpZm8uCkBAIC0xNzYsMjIgKzE0OSwyNTIgQEAKIAogCXNtcF9ybWIoKTsKIAorCW9mZiA9IF9fa2ZpZm9fb2ZmKGZpZm8sIGZpZm8tPm91dCArIG9mZik7CisKIAkvKiBmaXJzdCBnZXQgdGhlIGRhdGEgZnJvbSBmaWZvLT5vdXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICovCi0JbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSAoZmlmby0+b3V0ICYgKGZpZm8tPnNpemUgLSAxKSkpOwotCW1lbWNweShidWZmZXIsIGZpZm8tPmJ1ZmZlciArIChmaWZvLT5vdXQgJiAoZmlmby0+c2l6ZSAtIDEpKSwgbCk7CisJbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSBvZmYpOworCW1lbWNweSh0bywgZmlmby0+YnVmZmVyICsgb2ZmLCBsKTsKIAogCS8qIHRoZW4gZ2V0IHRoZSByZXN0IChpZiBhbnkpIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCi0JbWVtY3B5KGJ1ZmZlciArIGwsIGZpZm8tPmJ1ZmZlciwgbGVuIC0gbCk7CisJbWVtY3B5KHRvICsgbCwgZmlmby0+YnVmZmVyLCBsZW4gLSBsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfZGF0YShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXVuc2lnbmVkIGludCBsOworCWludCByZXQ7CiAKIAkvKgotCSAqIEVuc3VyZSB0aGF0IHdlIHJlbW92ZSB0aGUgYnl0ZXMgZnJvbSB0aGUga2ZpZm8gLWJlZm9yZS0KLQkgKiB3ZSB1cGRhdGUgdGhlIGZpZm8tPm91dCBpbmRleC4KKwkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPm91dCBpbmRleCAtYmVmb3JlLSB3ZQorCSAqIHN0YXJ0IHB1dHRpbmcgYnl0ZXMgaW50byB0aGUga2ZpZm8uCiAJICovCiAKIAlzbXBfbWIoKTsKIAotCWZpZm8tPm91dCArPSBsZW47CisJb2ZmID0gX19rZmlmb19vZmYoZmlmbywgZmlmby0+aW4gKyBvZmYpOworCisJLyogZmlyc3QgcHV0IHRoZSBkYXRhIHN0YXJ0aW5nIGZyb20gZmlmby0+aW4gdG8gYnVmZmVyIGVuZCAqLworCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gb2ZmKTsKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihmaWZvLT5idWZmZXIgKyBvZmYsIGZyb20sIGwpOworCisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQgKyBsZW4gLSBsOworCisJLyogdGhlbiBwdXQgdGhlIHJlc3QgKGlmIGFueSkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCisJcmV0dXJuIGNvcHlfZnJvbV91c2VyKGZpZm8tPmJ1ZmZlciwgZnJvbSArIGwsIGxlbiAtIGwpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfZGF0YShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZikKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPmluIGluZGV4IC1iZWZvcmUtIHdlCisJICogc3RhcnQgcmVtb3ZpbmcgYnl0ZXMgZnJvbSB0aGUga2ZpZm8uCisJICovCisKKwlzbXBfcm1iKCk7CisKKwlvZmYgPSBfX2tmaWZvX29mZihmaWZvLCBmaWZvLT5vdXQgKyBvZmYpOworCisJLyogZmlyc3QgZ2V0IHRoZSBkYXRhIGZyb20gZmlmby0+b3V0IHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLworCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gb2ZmKTsKKwlyZXQgPSBjb3B5X3RvX3VzZXIodG8sIGZpZm8tPmJ1ZmZlciArIG9mZiwgbCk7CisKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcmV0dXJuIHJldCArIGxlbiAtIGw7CisKKwkvKiB0aGVuIGdldCB0aGUgcmVzdCAoaWYgYW55KSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLworCXJldHVybiBjb3B5X3RvX3VzZXIodG8gKyBsLCBmaWZvLT5idWZmZXIsIGxlbiAtIGwpOworfQorCit1bnNpZ25lZCBpbnQgX19rZmlmb19pbl9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoa2ZpZm9fYXZhaWwoZmlmbykgPCBsZW4gKyByZWNzaXplKQorCQlyZXR1cm4gbGVuICsgMTsKKworCV9fa2ZpZm9faW5fZGF0YShmaWZvLCBmcm9tLCBsZW4sIHJlY3NpemUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX2luX24pOworCisvKioKKyAqIGtmaWZvX2luIC0gcHV0cyBzb21lIGRhdGEgaW50byB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZnJvbTogdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAZnJvbSBidWZmZXIgaW50bworICogdGhlIEZJRk8gZGVwZW5kaW5nIG9uIHRoZSBmcmVlIHNwYWNlLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgKiBieXRlcyBjb3BpZWQuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLwordW5zaWduZWQgaW50IGtmaWZvX2luKHN0cnVjdCBrZmlmbyAqZmlmbywgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwKKwkJCQl1bnNpZ25lZCBpbnQgbGVuKQoreworCWxlbiA9IG1pbihrZmlmb19hdmFpbChmaWZvKSwgbGVuKTsKKworCV9fa2ZpZm9faW5fZGF0YShmaWZvLCBmcm9tLCBsZW4sIDApOworCV9fa2ZpZm9fYWRkX2luKGZpZm8sIGxlbik7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woa2ZpZm9faW4pOworCit1bnNpZ25lZCBpbnQgX19rZmlmb19pbl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlyZXR1cm4gX19rZmlmb19pbl9yZWMoZmlmbywgZnJvbSwgbGVuLCByZWNzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19pbl9nZW5lcmljKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X24oc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoa2ZpZm9fbGVuKGZpZm8pIDwgbGVuICsgcmVjc2l6ZSkKKwkJcmV0dXJuIGxlbjsKKworCV9fa2ZpZm9fb3V0X2RhdGEoZmlmbywgdG8sIGxlbiwgcmVjc2l6ZSk7CisJX19rZmlmb19hZGRfb3V0KGZpZm8sIGxlbiArIHJlY3NpemUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX291dF9uKTsKKworLyoqCisgKiBrZmlmb19vdXQgLSBnZXRzIHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbGVuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBGSUZPIGludG8gdGhlCisgKiBAdG8gYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3Vuc2lnbmVkIGludCBrZmlmb19vdXQoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBjaGFyICp0bywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlsZW4gPSBtaW4oa2ZpZm9fbGVuKGZpZm8pLCBsZW4pOworCisJX19rZmlmb19vdXRfZGF0YShmaWZvLCB0bywgbGVuLCAwKTsKKwlfX2tmaWZvX2FkZF9vdXQoZmlmbywgbGVuKTsKIAogCXJldHVybiBsZW47CiB9Ci1FWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZ2V0KTsKK0VYUE9SVF9TWU1CT0woa2ZpZm9fb3V0KTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKKwl1bnNpZ25lZCBpbnQgKnRvdGFsKQoreworCXJldHVybiBfX2tmaWZvX291dF9yZWMoZmlmbywgdG8sIGxlbiwgcmVjc2l6ZSwgdG90YWwpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX291dF9nZW5lcmljKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX24oc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoa2ZpZm9fYXZhaWwoZmlmbykgPCBsZW4gKyByZWNzaXplKQorCQlyZXR1cm4gbGVuICsgMTsKKworCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9kYXRhKGZpZm8sIGZyb20sIGxlbiwgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZnJvbV91c2VyX24pOworCisvKioKKyAqIGtmaWZvX2Zyb21fdXNlciAtIHB1dHMgc29tZSBkYXRhIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEBmcm9tOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gaW50byB0aGUKKyAqIEZJRk8gZGVwZW5kaW5nIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3Vuc2lnbmVkIGludCBrZmlmb19mcm9tX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWxlbiA9IG1pbihrZmlmb19hdmFpbChmaWZvKSwgbGVuKTsKKwlsZW4gLT0gX19rZmlmb19mcm9tX3VzZXJfZGF0YShmaWZvLCBmcm9tLCBsZW4sIDApOworCV9fa2ZpZm9fYWRkX2luKGZpZm8sIGxlbik7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woa2ZpZm9fZnJvbV91c2VyKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlyZXR1cm4gX19rZmlmb19mcm9tX3VzZXJfcmVjKGZpZm8sIGZyb20sIGxlbiwgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZnJvbV91c2VyX2dlbmVyaWMpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX24oc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY2xlbiwKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJaWYgKGtmaWZvX2xlbihmaWZvKSA8IHJlY2xlbiArIHJlY3NpemUpCisJCXJldHVybiBsZW47CisKKwlyZXQgPSBfX2tmaWZvX3RvX3VzZXJfZGF0YShmaWZvLCB0bywgcmVjbGVuLCByZWNzaXplKTsKKworCWlmIChsaWtlbHkocmV0ID09IDApKQorCQlfX2tmaWZvX2FkZF9vdXQoZmlmbywgcmVjbGVuICsgcmVjc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX3RvX3VzZXJfbik7CisKKy8qKgorICoga2ZpZm9fdG9fdXNlciAtIGdldHMgZGF0YSBmcm9tIHRoZSBGSUZPIGFuZCB3cml0ZSBpdCB0byB1c2VyIHNwYWNlCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbGVuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBGSUZPIGludG8gdGhlCisgKiBAdG8gYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3Vuc2lnbmVkIGludCBrZmlmb190b191c2VyKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBsZW4pCit7CisJbGVuID0gbWluKGtmaWZvX2xlbihmaWZvKSwgbGVuKTsKKwlsZW4gLT0gX19rZmlmb190b191c2VyX2RhdGEoZmlmbywgdG8sIGxlbiwgMCk7CisJX19rZmlmb19hZGRfb3V0KGZpZm8sIGxlbik7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woa2ZpZm9fdG9fdXNlcik7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKKwl1bnNpZ25lZCBpbnQgKnRvdGFsKQoreworCXJldHVybiBfX2tmaWZvX3RvX3VzZXJfcmVjKGZpZm8sIHRvLCBsZW4sIHJlY3NpemUsIHRvdGFsKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb190b191c2VyX2dlbmVyaWMpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb19wZWVrX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAocmVjc2l6ZSA9PSAwKQorCQlyZXR1cm4ga2ZpZm9fYXZhaWwoZmlmbyk7CisKKwlyZXR1cm4gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fcGVla19nZW5lcmljKTsKKwordm9pZCBfX2tmaWZvX3NraXBfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCV9fa2ZpZm9fc2tpcF9yZWMoZmlmbywgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fc2tpcF9nZW5lcmljKTsKKwpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZTUzNDJhMy4uYjdkZjMwMiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMDM1LDcgKzEwMzUsNyBAQAogCS8qIFByZS1hbGxvY2F0ZSBtZW1vcnkgZm9yIG1heCBrcmV0cHJvYmUgaW5zdGFuY2VzICovCiAJaWYgKHJwLT5tYXhhY3RpdmUgPD0gMCkgewogI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JCXJwLT5tYXhhY3RpdmUgPSBtYXgoMTAsIDIgKiBudW1fcG9zc2libGVfY3B1cygpKTsKKwkJcnAtPm1heGFjdGl2ZSA9IG1heF90KHVuc2lnbmVkIGludCwgMTAsIDIqbnVtX3Bvc3NpYmxlX2NwdXMoKSk7CiAjZWxzZQogCQlycC0+bWF4YWN0aXZlID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggYWI3YWU1Ny4uZmJiNjIyMiAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0xNTAsNiArMTUwLDI5IEBACiBFWFBPUlRfU1lNQk9MKGt0aHJlYWRfY3JlYXRlKTsKIAogLyoqCisgKiBrdGhyZWFkX2JpbmQgLSBiaW5kIGEganVzdC1jcmVhdGVkIGt0aHJlYWQgdG8gYSBjcHUuCisgKiBAcDogdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KKyAqIEBjcHU6IGNwdSAobWlnaHQgbm90IGJlIG9ubGluZSwgbXVzdCBiZSBwb3NzaWJsZSkgZm9yIEBrIHRvIHJ1biBvbi4KKyAqCisgKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldF9jcHVzX2FsbG93ZWQoKSwKKyAqIGV4Y2VwdCB0aGF0IEBjcHUgZG9lc24ndCBuZWVkIHRvIGJlIG9ubGluZSwgYW5kIHRoZSB0aHJlYWQgbXVzdCBiZQorICogc3RvcHBlZCAoaS5lLiwganVzdCByZXR1cm5lZCBmcm9tIGt0aHJlYWRfY3JlYXRlKCkpLgorICovCit2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpCit7CisJLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLworCWlmICghd2FpdF90YXNrX2luYWN0aXZlKHAsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJcC0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwlwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOworCXAtPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKK30KK0VYUE9SVF9TWU1CT0woa3RocmVhZF9iaW5kKTsKKworLyoqCiAgKiBrdGhyZWFkX3N0b3AgLSBzdG9wIGEgdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KICAqIEBrOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCBlOTZiOGVkLi5mODIzODZiIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0xMDEwLDYgKzEwMTAsMTIgQEAKICAqIEouIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykgJiYgZGVmaW5lZChDT05GSUdfU1lTRlMpCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZWN0X2VtcHR5KGNvbnN0IEVsZl9TaGRyICpzZWN0KQoreworCXJldHVybiAhKHNlY3QtPnNoX2ZsYWdzICYgU0hGX0FMTE9DKSB8fCBzZWN0LT5zaF9zaXplID09IDA7Cit9CisKIHN0cnVjdCBtb2R1bGVfc2VjdF9hdHRyCiB7CiAJc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbWF0dHI7CkBAIC0xMDUxLDggKzEwNTcsNyBAQAogCiAJLyogQ291bnQgbG9hZGVkIHNlY3Rpb25zIGFuZCBhbGxvY2F0ZSBzdHJ1Y3R1cmVzICovCiAJZm9yIChpID0gMDsgaSA8IG5zZWN0OyBpKyspCi0JCWlmIChzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DCi0JCSAgICAmJiBzZWNoZHJzW2ldLnNoX3NpemUpCisJCWlmICghc2VjdF9lbXB0eSgmc2VjaGRyc1tpXSkpCiAJCQlubG9hZGVkKys7CiAJc2l6ZVswXSA9IEFMSUdOKHNpemVvZigqc2VjdF9hdHRycykKIAkJCSsgbmxvYWRlZCAqIHNpemVvZihzZWN0X2F0dHJzLT5hdHRyc1swXSksCkBAIC0xMDcwLDkgKzEwNzUsNyBAQAogCXNhdHRyID0gJnNlY3RfYXR0cnMtPmF0dHJzWzBdOwogCWdhdHRyID0gJnNlY3RfYXR0cnMtPmdycC5hdHRyc1swXTsKIAlmb3IgKGkgPSAwOyBpIDwgbnNlY3Q7IGkrKykgewotCQlpZiAoISAoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCi0JCQljb250aW51ZTsKLQkJaWYgKCFzZWNoZHJzW2ldLnNoX3NpemUpCisJCWlmIChzZWN0X2VtcHR5KCZzZWNoZHJzW2ldKSkKIAkJCWNvbnRpbnVlOwogCQlzYXR0ci0+YWRkcmVzcyA9IHNlY2hkcnNbaV0uc2hfYWRkcjsKIAkJc2F0dHItPm5hbWUgPSBrc3RyZHVwKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsCkBAIC0xMTU2LDcgKzExNTksNyBAQAogCS8qIENvdW50IG5vdGVzIHNlY3Rpb25zIGFuZCBhbGxvY2F0ZSBzdHJ1Y3R1cmVzLiAgKi8KIAlub3RlcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG5zZWN0OyBpKyspCi0JCWlmICgoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykgJiYKKwkJaWYgKCFzZWN0X2VtcHR5KCZzZWNoZHJzW2ldKSAmJgogCQkgICAgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfTk9URSkpCiAJCQkrK25vdGVzOwogCkBAIC0xMTcyLDcgKzExNzUsNyBAQAogCW5vdGVzX2F0dHJzLT5ub3RlcyA9IG5vdGVzOwogCW5hdHRyID0gJm5vdGVzX2F0dHJzLT5hdHRyc1swXTsKIAlmb3IgKGxvYWRlZCA9IGkgPSAwOyBpIDwgbnNlY3Q7ICsraSkgewotCQlpZiAoIShzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSkKKwkJaWYgKHNlY3RfZW1wdHkoJnNlY2hkcnNbaV0pKQogCQkJY29udGludWU7CiAJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX05PVEUpIHsKIAkJCW5hdHRyLT5hdHRyLm5hbWUgPSBtb2QtPnNlY3RfYXR0cnMtPmF0dHJzW2xvYWRlZF0ubmFtZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDk3ZDFhM2QuLjYwM2MwZDhiIDEwMDY0NAotLS0gYS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTEzODEsNiArMTM4MSw5IEBACiAJCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCiAJCQljb250aW51ZTsKIAorCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCWNvbnRpbnVlOworCiAJCWh3YyA9ICZldmVudC0+aHc7CiAKIAkJaW50ZXJydXB0cyA9IGh3Yy0+aW50ZXJydXB0czsKQEAgLTMyNjUsNiArMzI2OCw5IEBACiAKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF90YXNrX21hdGNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZXZlbnQtPmF0dHIuY29tbSB8fCBldmVudC0+YXR0ci5tbWFwIHx8IGV2ZW50LT5hdHRyLnRhc2spCiAJCXJldHVybiAxOwogCkBAIC0zMjkwLDEyICszMjk2LDExIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlwZXJmX2V2ZW50X3Rhc2tfY3R4KCZjcHVjdHgtPmN0eCwgdGFza19ldmVudCk7Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0KIAlpZiAoIWN0eCkKIAkJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKHRhc2tfZXZlbnQtPnRhc2stPnBlcmZfZXZlbnRfY3R4cCk7CiAJaWYgKGN0eCkKIAkJcGVyZl9ldmVudF90YXNrX2N0eChjdHgsIHRhc2tfZXZlbnQpOworCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC0zMzcyLDYgKzMzNzcsOSBAQAogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CisJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXJldHVybiAwOworCiAJaWYgKGV2ZW50LT5hdHRyLmNvbW0pCiAJCXJldHVybiAxOwogCkBAIC0zNDA4LDE1ICszNDE2LDEwIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlwZXJmX2V2ZW50X2NvbW1fY3R4KCZjcHVjdHgtPmN0eCwgY29tbV9ldmVudCk7Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0KLQkvKgotCSAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvZiB0aGUgY2hpbGQgY29udGV4dHMgdGhlCi0JICogZXZlbnRzIGVuZHMgdXAgaW4uCi0JICovCiAJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfZXZlbnRfY3R4cCk7CiAJaWYgKGN0eCkKIAkJcGVyZl9ldmVudF9jb21tX2N0eChjdHgsIGNvbW1fZXZlbnQpOworCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC0zNDkxLDYgKzM0OTQsOSBAQAogc3RhdGljIGludCBwZXJmX2V2ZW50X21tYXBfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCSAgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCiB7CisJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXJldHVybiAwOworCiAJaWYgKGV2ZW50LT5hdHRyLm1tYXApCiAJCXJldHVybiAxOwogCkBAIC0zNTY0LDE1ICszNTcwLDEwIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlwZXJmX2V2ZW50X21tYXBfY3R4KCZjcHVjdHgtPmN0eCwgbW1hcF9ldmVudCk7Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0KLQkvKgotCSAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvZiB0aGUgY2hpbGQgY29udGV4dHMgdGhlCi0JICogZXZlbnRzIGVuZHMgdXAgaW4uCi0JICovCiAJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfZXZlbnRfY3R4cCk7CiAJaWYgKGN0eCkKIAkJcGVyZl9ldmVudF9tbWFwX2N0eChjdHgsIG1tYXBfZXZlbnQpOworCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJa2ZyZWUoYnVmKTsKQEAgLTM4NjMsNiArMzg2NCw5IEBACiAJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCiAJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXJldHVybiAwOworCiAJaWYgKCFwZXJmX3N3ZXZlbnRfaXNfY291bnRpbmcoZXZlbnQpKQogCQlyZXR1cm4gMDsKIApAQCAtNDcyMCw3ICs0NzI0LDcgQEAKIAlpZiAoSVNfRVJSKGV2ZW50KSkKIAkJZ290byBlcnJfcHV0X2NvbnRleHQ7CiAKLQllcnIgPSBhbm9uX2lub2RlX2dldGZkKCJbcGVyZl9ldmVudF0iLCAmcGVyZl9mb3BzLCBldmVudCwgMCk7CisJZXJyID0gYW5vbl9pbm9kZV9nZXRmZCgiW3BlcmZfZXZlbnRdIiwgJnBlcmZfZm9wcywgZXZlbnQsIE9fUkRXUik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX2ZyZWVfcHV0X2NvbnRleHQ7CiAKQEAgLTUxNDQsNyArNTE0OCw3IEBACiAJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAkJCWlmICghY2hpbGRfY3R4KSB7CiAJCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIGV4aXQ7CisJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7CkBAIC01MTYwLDcgKzUxNjQsNyBAQAogCQl9CiAJfQogCi0JaWYgKGluaGVyaXRlZF9hbGwpIHsKKwlpZiAoY2hpbGRfY3R4ICYmIGluaGVyaXRlZF9hbGwpIHsKIAkJLyoKIAkJICogTWFyayB0aGUgY2hpbGQgY29udGV4dCBhcyBhIGNsb25lIG9mIHRoZSBwYXJlbnQKIAkJICogY29udGV4dCwgb3Igb2Ygd2hhdGV2ZXIgdGhlIHBhcmVudCBpcyBhIGNsb25lIG9mLgpAQCAtNTE4MCw3ICs1MTg0LDYgQEAKIAkJZ2V0X2N0eChjaGlsZF9jdHgtPnBhcmVudF9jdHgpOwogCX0KIAotZXhpdDoKIAltdXRleF91bmxvY2soJnBhcmVudF9jdHgtPm11dGV4KTsKIAogCXBlcmZfdW5waW5fY29udGV4dChwYXJlbnRfY3R4KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggZGMxNTY4Ni4uYWY5NmMxZSAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTMwOCwzNyArMzA4LDM3IEBACiAJCQkgdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJc3RydWN0IHJlc291cmNlICp0aGlzID0gcm9vdC0+Y2hpbGQ7Ci0JcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBlbmQ7CisJc3RydWN0IHJlc291cmNlIHRtcCA9ICpuZXc7CiAKLQlzdGFydCA9IHJvb3QtPnN0YXJ0OworCXRtcC5zdGFydCA9IHJvb3QtPnN0YXJ0OwogCS8qCiAJICogU2tpcCBwYXN0IGFuIGFsbG9jYXRlZCByZXNvdXJjZSB0aGF0IHN0YXJ0cyBhdCAwLCBzaW5jZSB0aGUgYXNzaWdubWVudAotCSAqIG9mIHRoaXMtPnN0YXJ0IC0gMSB0byBuZXctPmVuZCBiZWxvdyB3b3VsZCBjYXVzZSBhbiB1bmRlcmZsb3cuCisJICogb2YgdGhpcy0+c3RhcnQgLSAxIHRvIHRtcC0+ZW5kIGJlbG93IHdvdWxkIGNhdXNlIGFuIHVuZGVyZmxvdy4KIAkgKi8KIAlpZiAodGhpcyAmJiB0aGlzLT5zdGFydCA9PSAwKSB7Ci0JCXN0YXJ0ID0gdGhpcy0+ZW5kICsgMTsKKwkJdG1wLnN0YXJ0ID0gdGhpcy0+ZW5kICsgMTsKIAkJdGhpcyA9IHRoaXMtPnNpYmxpbmc7CiAJfQogCWZvcig7OykgewogCQlpZiAodGhpcykKLQkJCWVuZCA9IHRoaXMtPnN0YXJ0IC0gMTsKKwkJCXRtcC5lbmQgPSB0aGlzLT5zdGFydCAtIDE7CiAJCWVsc2UKLQkJCWVuZCA9IHJvb3QtPmVuZDsKLQkJaWYgKHN0YXJ0IDwgbWluKQotCQkJc3RhcnQgPSBtaW47Ci0JCWlmIChlbmQgPiBtYXgpCi0JCQllbmQgPSBtYXg7Ci0JCXN0YXJ0ID0gQUxJR04oc3RhcnQsIGFsaWduKTsKKwkJCXRtcC5lbmQgPSByb290LT5lbmQ7CisJCWlmICh0bXAuc3RhcnQgPCBtaW4pCisJCQl0bXAuc3RhcnQgPSBtaW47CisJCWlmICh0bXAuZW5kID4gbWF4KQorCQkJdG1wLmVuZCA9IG1heDsKKwkJdG1wLnN0YXJ0ID0gQUxJR04odG1wLnN0YXJ0LCBhbGlnbik7CiAJCWlmIChhbGlnbmYpCi0JCQlhbGlnbmYoYWxpZ25mX2RhdGEsIG5ldywgc2l6ZSwgYWxpZ24pOwotCQlpZiAoc3RhcnQgPCBlbmQgJiYgZW5kIC0gc3RhcnQgPj0gc2l6ZSAtIDEpIHsKLQkJCW5ldy0+c3RhcnQgPSBzdGFydDsKLQkJCW5ldy0+ZW5kID0gc3RhcnQgKyBzaXplIC0gMTsKKwkJCWFsaWduZihhbGlnbmZfZGF0YSwgJnRtcCwgc2l6ZSwgYWxpZ24pOworCQlpZiAodG1wLnN0YXJ0IDwgdG1wLmVuZCAmJiB0bXAuZW5kIC0gdG1wLnN0YXJ0ID49IHNpemUgLSAxKSB7CisJCQluZXctPnN0YXJ0ID0gdG1wLnN0YXJ0OworCQkJbmV3LT5lbmQgPSB0bXAuc3RhcnQgKyBzaXplIC0gMTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmICghdGhpcykKIAkJCWJyZWFrOwotCQlzdGFydCA9IHRoaXMtPmVuZCArIDE7CisJCXRtcC5zdGFydCA9IHRoaXMtPmVuZCArIDE7CiAJCXRoaXMgPSB0aGlzLT5zaWJsaW5nOwogCX0KIAlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCAxOGNjZWVlLi5jNTM1Y2M0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMjAwMiwzOSArMjAwMiw2IEBACiAJCXAtPnNjaGVkX2NsYXNzLT5wcmlvX2NoYW5nZWQocnEsIHAsIG9sZHByaW8sIHJ1bm5pbmcpOwogfQogCi0vKioKLSAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KLSAqIEBwOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgotICogQGNwdTogY3B1IChtaWdodCBub3QgYmUgb25saW5lLCBtdXN0IGJlIHBvc3NpYmxlKSBmb3IgQGsgdG8gcnVuIG9uLgotICoKLSAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0X2NwdXNfYWxsb3dlZCgpLAotICogZXhjZXB0IHRoYXQgQGNwdSBkb2Vzbid0IG5lZWQgdG8gYmUgb25saW5lLCBhbmQgdGhlIHRocmVhZCBtdXN0IGJlCi0gKiBzdG9wcGVkIChpLmUuLCBqdXN0IHJldHVybmVkIGZyb20ga3RocmVhZF9jcmVhdGUoKSkuCi0gKgotICogRnVuY3Rpb24gbGl2ZXMgaGVyZSBpbnN0ZWFkIG9mIGt0aHJlYWQuYyBiZWNhdXNlIGl0IG1lc3NlcyB3aXRoCi0gKiBzY2hlZHVsZXIgaW50ZXJuYWxzIHdoaWNoIHJlcXVpcmUgbG9ja2luZy4KLSAqLwotdm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KQotewotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLwotCWlmICghd2FpdF90YXNrX2luYWN0aXZlKHAsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47Ci0JfQotCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwotCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0Jc2V0X3Rhc2tfY3B1KHAsIGNwdSk7Ci0JcC0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKLQlwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOwotCXAtPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woa3RocmVhZF9iaW5kKTsKLQogI2lmZGVmIENPTkZJR19TTVAKIC8qCiAgKiBJcyB0aGlzIHRhc2sgbGlrZWx5IGNhY2hlLWhvdDoKQEAgLTIwNDQsNiArMjAxMSw5IEBACiB7CiAJczY0IGRlbHRhOwogCisJaWYgKHAtPnNjaGVkX2NsYXNzICE9ICZmYWlyX3NjaGVkX2NsYXNzKQorCQlyZXR1cm4gMDsKKwogCS8qCiAJICogQnVkZHkgY2FuZGlkYXRlcyBhcmUgY2FjaGUgaG90OgogCSAqLwpAQCAtMjA1Miw5ICsyMDIyLDYgQEAKIAkJCSAmcC0+c2UgPT0gY2ZzX3JxX29mKCZwLT5zZSktPmxhc3QpKQogCQlyZXR1cm4gMTsKIAotCWlmIChwLT5zY2hlZF9jbGFzcyAhPSAmZmFpcl9zY2hlZF9jbGFzcykKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0ID09IC0xKQogCQlyZXR1cm4gMTsKIAlpZiAoc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0ID09IDApCkBAIC0yMDY1LDIyICsyMDMyLDIzIEBACiAJcmV0dXJuIGRlbHRhIDwgKHM2NClzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3Q7CiB9CiAKLQogdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSkKIHsKLQlpbnQgb2xkX2NwdSA9IHRhc2tfY3B1KHApOwotCXN0cnVjdCBjZnNfcnEgKm9sZF9jZnNycSA9IHRhc2tfY2ZzX3JxKHApLAotCQkgICAgICAqbmV3X2Nmc3JxID0gY3B1X2Nmc19ycShvbGRfY2ZzcnEsIG5ld19jcHUpOworI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworCS8qCisJICogV2Ugc2hvdWxkIG5ldmVyIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2VkIHRhc2ssCisJICogdHR3dSgpIHdpbGwgc29ydCBvdXQgdGhlIHBsYWNlbWVudC4KKwkgKi8KKwlXQVJOX09OX09OQ0UocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HICYmIHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HICYmCisJCQkhKHRhc2tfdGhyZWFkX2luZm8ocCktPnByZWVtcHRfY291bnQgJiBQUkVFTVBUX0FDVElWRSkpOworI2VuZGlmCiAKIAl0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7CiAKLQlpZiAob2xkX2NwdSAhPSBuZXdfY3B1KSB7CisJaWYgKHRhc2tfY3B1KHApICE9IG5ld19jcHUpIHsKIAkJcC0+c2UubnJfbWlncmF0aW9ucysrOwotCQlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMsCi0JCQkJICAgICAxLCAxLCBOVUxMLCAwKTsKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TLCAxLCAxLCBOVUxMLCAwKTsKIAl9Ci0JcC0+c2UudnJ1bnRpbWUgLT0gb2xkX2Nmc3JxLT5taW5fdnJ1bnRpbWUgLQotCQkJCQkgbmV3X2Nmc3JxLT5taW5fdnJ1bnRpbWU7CiAKIAlfX3NldF90YXNrX2NwdShwLCBuZXdfY3B1KTsKIH0KQEAgLTIxMDUsMTMgKzIwNzMsMTAgQEAKIAogCS8qCiAJICogSWYgdGhlIHRhc2sgaXMgbm90IG9uIGEgcnVucXVldWUgKGFuZCBub3QgcnVubmluZyksIHRoZW4KLQkgKiBpdCBpcyBzdWZmaWNpZW50IHRvIHNpbXBseSB1cGRhdGUgdGhlIHRhc2sncyBjcHUgZmllbGQuCisJICogdGhlIG5leHQgd2FrZS11cCB3aWxsIHByb3Blcmx5IHBsYWNlIHRoZSB0YXNrLgogCSAqLwotCWlmICghcC0+c2Uub25fcnEgJiYgIXRhc2tfcnVubmluZyhycSwgcCkpIHsKLQkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQkJc2V0X3Rhc2tfY3B1KHAsIGRlc3RfY3B1KTsKKwlpZiAoIXAtPnNlLm9uX3JxICYmICF0YXNrX3J1bm5pbmcocnEsIHApKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlpbml0X2NvbXBsZXRpb24oJnJlcS0+ZG9uZSk7CiAJcmVxLT50YXNrID0gcDsKQEAgLTIzMTcsMTAgKzIyODIsNzMgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgc2VsZWN0X2ZhbGxiYWNrX3JxKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpbnQgZGVzdF9jcHU7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5vZGVtYXNrID0gY3B1bWFza19vZl9ub2RlKGNwdV90b19ub2RlKGNwdSkpOworCisJLyogTG9vayBmb3IgYWxsb3dlZCwgb25saW5lIENQVSBpbiBzYW1lIG5vZGUuICovCisJZm9yX2VhY2hfY3B1X2FuZChkZXN0X2NwdSwgbm9kZW1hc2ssIGNwdV9hY3RpdmVfbWFzaykKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoZGVzdF9jcHUsICZwLT5jcHVzX2FsbG93ZWQpKQorCQkJcmV0dXJuIGRlc3RfY3B1OworCisJLyogQW55IGFsbG93ZWQsIG9ubGluZSBDUFU/ICovCisJZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoJnAtPmNwdXNfYWxsb3dlZCwgY3B1X2FjdGl2ZV9tYXNrKTsKKwlpZiAoZGVzdF9jcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gZGVzdF9jcHU7CisKKwkvKiBObyBtb3JlIE1yLiBOaWNlIEd1eS4gKi8KKwlpZiAoZGVzdF9jcHUgPj0gbnJfY3B1X2lkcykgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHAsICZwLT5jcHVzX2FsbG93ZWQpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoY3B1X2FjdGl2ZV9tYXNrLCAmcC0+Y3B1c19hbGxvd2VkKTsKKworCQkvKgorCQkgKiBEb24ndCB0ZWxsIHRoZW0gYWJvdXQgbW92aW5nIGV4aXRpbmcgdGFza3Mgb3IKKwkJICoga2VybmVsIHRocmVhZHMgKGJvdGggbW0gTlVMTCksIHNpbmNlIHRoZXkgbmV2ZXIKKwkJICogbGVhdmUga2VybmVsLgorCQkgKi8KKwkJaWYgKHAtPm1tICYmIHByaW50a19yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAicHJvY2VzcyAlZCAoJXMpIG5vICIKKwkJCSAgICAgICAibG9uZ2VyIGFmZmluZSB0byBjcHUlZFxuIiwKKwkJCSAgICAgICB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgY3B1KTsKKwkJfQorCX0KKworCXJldHVybiBkZXN0X2NwdTsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tOgorICoKKyAqICAtIGZvcmssIEBwIGlzIHN0YWJsZSBiZWNhdXNlIGl0IGlzbid0IG9uIHRoZSB0YXNrbGlzdCB5ZXQKKyAqCisgKiAgLSBleGVjLCBAcCBpcyB1bnN0YWJsZSwgcmV0cnkgbG9vcAorICoKKyAqICAtIHdha2UtdXAsIHdlIHNlcmlhbGl6ZSAtPmNwdXNfYWxsb3dlZCBhZ2FpbnN0IFRBU0tfV0FLSU5HIHNvCisgKiAgICAgICAgICAgICB3ZSBzaG91bGQgYmUgZ29vZC4KKyAqLwogc3RhdGljIGlubGluZQogaW50IHNlbGVjdF90YXNrX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWdzLCBpbnQgd2FrZV9mbGFncykKIHsKLQlyZXR1cm4gcC0+c2NoZWRfY2xhc3MtPnNlbGVjdF90YXNrX3JxKHAsIHNkX2ZsYWdzLCB3YWtlX2ZsYWdzKTsKKwlpbnQgY3B1ID0gcC0+c2NoZWRfY2xhc3MtPnNlbGVjdF90YXNrX3JxKHAsIHNkX2ZsYWdzLCB3YWtlX2ZsYWdzKTsKKworCS8qCisJICogSW4gb3JkZXIgbm90IHRvIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2luZyB0YXNrIHdlIG5lZWQKKwkgKiB0byByZWx5IG9uIHR0d3UoKSB0byBwbGFjZSB0aGUgdGFzayBvbiBhIHZhbGlkIC0+Y3B1c19hbGxvd2VkCisJICogY3B1LgorCSAqCisJICogU2luY2UgdGhpcyBpcyBjb21tb24gdG8gYWxsIHBsYWNlbWVudCBzdHJhdGVnaWVzLCB0aGlzIGxpdmVzIGhlcmUuCisJICoKKwkgKiBbIHRoaXMgYWxsb3dzIC0+c2VsZWN0X3Rhc2soKSB0byBzaW1wbHkgcmV0dXJuIHRhc2tfY3B1KHApIGFuZAorCSAqICAgbm90IHdvcnJ5IGFib3V0IHRoaXMgZ2VuZXJpYyBjb25zdHJhaW50IF0KKwkgKi8KKwlpZiAodW5saWtlbHkoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSB8fAorCQkgICAgICFjcHVfb25saW5lKGNwdSkpKQorCQljcHUgPSBzZWxlY3RfZmFsbGJhY2tfcnEodGFza19jcHUocCksIHApOworCisJcmV0dXJuIGNwdTsKIH0KICNlbmRpZgogCkBAIC0yMzc1LDYgKzI0MDMsMTAgQEAKIAlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQogCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07CiAJcC0+c3RhdGUgPSBUQVNLX1dBS0lORzsKKworCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193YWtpbmcpCisJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2luZyhycSwgcCk7CisKIAlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKIAogCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7CkBAIC0yNDM4LDggKzI0NzAsOCBAQAogCiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKQotCQlwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKHJxLCBwKTsKKwlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4pCisJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dva2VuKHJxLCBwKTsKIAogCWlmICh1bmxpa2VseShycS0+aWRsZV9zdGFtcCkpIHsKIAkJdTY0IGRlbHRhID0gcnEtPmNsb2NrIC0gcnEtPmlkbGVfc3RhbXA7CkBAIC0yNTM4LDE0ICsyNTcwLDYgQEAKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlMKIAlJTklUX0hMSVNUX0hFQUQoJnAtPnByZWVtcHRfbm90aWZpZXJzKTsKICNlbmRpZgotCi0JLyoKLQkgKiBXZSBtYXJrIHRoZSBwcm9jZXNzIGFzIHJ1bm5pbmcgaGVyZSwgYnV0IGhhdmUgbm90IGFjdHVhbGx5Ci0JICogaW5zZXJ0ZWQgaXQgb250byB0aGUgcnVucXVldWUgeWV0LiBUaGlzIGd1YXJhbnRlZXMgdGhhdAotCSAqIG5vYm9keSB3aWxsIGFjdHVhbGx5IHJ1biBpdCwgYW5kIGEgc2lnbmFsIG9yIG90aGVyIGV4dGVybmFsCi0JICogZXZlbnQgY2Fubm90IHdha2UgaXQgdXAgYW5kIGluc2VydCBpdCBvbiB0aGUgcnVucXVldWUgZWl0aGVyLgotCSAqLwotCXAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogfQogCiAvKgpAQCAtMjU1Niw2ICsyNTgwLDEyIEBACiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAogCV9fc2NoZWRfZm9yayhwKTsKKwkvKgorCSAqIFdlIG1hcmsgdGhlIHByb2Nlc3MgYXMgd2FraW5nIGhlcmUuIFRoaXMgZ3VhcmFudGVlcyB0aGF0CisJICogbm9ib2R5IHdpbGwgYWN0dWFsbHkgcnVuIGl0LCBhbmQgYSBzaWduYWwgb3Igb3RoZXIgZXh0ZXJuYWwKKwkgKiBldmVudCBjYW5ub3Qgd2FrZSBpdCB1cCBhbmQgaW5zZXJ0IGl0IG9uIHRoZSBydW5xdWV1ZSBlaXRoZXIuCisJICovCisJcC0+c3RhdGUgPSBUQVNLX1dBS0lORzsKIAogCS8qCiAJICogUmV2ZXJ0IHRvIGRlZmF1bHQgcHJpb3JpdHkvcG9saWN5IG9uIGZvcmsgaWYgcmVxdWVzdGVkLgpAQCAtMjYyNCwxNCArMjY1NCwxNSBAQAogCXN0cnVjdCBycSAqcnE7CiAKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwotCUJVR19PTihwLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpOworCUJVR19PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7CisJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAlhY3RpdmF0ZV90YXNrKHJxLCBwLCAwKTsKIAl0cmFjZV9zY2hlZF93YWtldXBfbmV3KHJxLCBwLCAxKTsKIAljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIFdGX0ZPUkspOwogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FrZV91cCkKLQkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FrZV91cChycSwgcCk7CisJaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX3dva2VuKQorCQlwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbihycSwgcCk7CiAjZW5kaWYKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIH0KQEAgLTMxMDEsMjEgKzMxMzIsMzYgQEAKIH0KIAogLyoKLSAqIElmIGRlc3RfY3B1IGlzIGFsbG93ZWQgZm9yIHRoaXMgcHJvY2VzcywgbWlncmF0ZSB0aGUgdGFzayB0byBpdC4KLSAqIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGZvcmNpbmcgdGhlIGNwdV9hbGxvd2VkIG1hc2sgdG8gb25seQotICogYWxsb3cgZGVzdF9jcHUsIHdoaWNoIHdpbGwgZm9yY2UgdGhlIGNwdSBvbnRvIGRlc3RfY3B1LiBUaGVuCi0gKiB0aGUgY3B1X2FsbG93ZWQgbWFzayBpcyByZXN0b3JlZC4KKyAqIHNjaGVkX2V4ZWMgLSBleGVjdmUoKSBpcyBhIHZhbHVhYmxlIGJhbGFuY2luZyBvcHBvcnR1bml0eSwgYmVjYXVzZSBhdAorICogdGhpcyBwb2ludCB0aGUgdGFzayBoYXMgdGhlIHNtYWxsZXN0IGVmZmVjdGl2ZSBtZW1vcnkgYW5kIGNhY2hlIGZvb3RwcmludC4KICAqLwotc3RhdGljIHZvaWQgc2NoZWRfbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGRlc3RfY3B1KQordm9pZCBzY2hlZF9leGVjKHZvaWQpCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKIAlzdHJ1Y3QgbWlncmF0aW9uX3JlcSByZXE7CisJaW50IGRlc3RfY3B1LCB0aGlzX2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBycSAqcnE7CiAKK2FnYWluOgorCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOworCWRlc3RfY3B1ID0gc2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9FWEVDLCAwKTsKKwlpZiAoZGVzdF9jcHUgPT0gdGhpc19jcHUpIHsKKwkJcHV0X2NwdSgpOworCQlyZXR1cm47CisJfQorCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKwlwdXRfY3B1KCk7CisKKwkvKgorCSAqIHNlbGVjdF90YXNrX3JxKCkgY2FuIHJhY2UgYWdhaW5zdCAtPmNwdXNfYWxsb3dlZAorCSAqLwogCWlmICghY3B1bWFza190ZXN0X2NwdShkZXN0X2NwdSwgJnAtPmNwdXNfYWxsb3dlZCkKLQkgICAgfHwgdW5saWtlbHkoIWNwdV9hY3RpdmUoZGVzdF9jcHUpKSkKLQkJZ290byBvdXQ7CisJICAgIHx8IHVubGlrZWx5KCFjcHVfYWN0aXZlKGRlc3RfY3B1KSkpIHsKKwkJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CisJCWdvdG8gYWdhaW47CisJfQogCiAJLyogZm9yY2UgdGhlIHByb2Nlc3Mgb250byB0aGUgc3BlY2lmaWVkIENQVSAqLwogCWlmIChtaWdyYXRlX3Rhc2socCwgZGVzdF9jcHUsICZyZXEpKSB7CkBAIC0zMTMwLDI0ICszMTc2LDEwIEBACiAKIAkJcmV0dXJuOwogCX0KLW91dDoKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIH0KIAogLyoKLSAqIHNjaGVkX2V4ZWMgLSBleGVjdmUoKSBpcyBhIHZhbHVhYmxlIGJhbGFuY2luZyBvcHBvcnR1bml0eSwgYmVjYXVzZSBhdAotICogdGhpcyBwb2ludCB0aGUgdGFzayBoYXMgdGhlIHNtYWxsZXN0IGVmZmVjdGl2ZSBtZW1vcnkgYW5kIGNhY2hlIGZvb3RwcmludC4KLSAqLwotdm9pZCBzY2hlZF9leGVjKHZvaWQpCi17Ci0JaW50IG5ld19jcHUsIHRoaXNfY3B1ID0gZ2V0X2NwdSgpOwotCW5ld19jcHUgPSBzZWxlY3RfdGFza19ycShjdXJyZW50LCBTRF9CQUxBTkNFX0VYRUMsIDApOwotCXB1dF9jcHUoKTsKLQlpZiAobmV3X2NwdSAhPSB0aGlzX2NwdSkKLQkJc2NoZWRfbWlncmF0ZV90YXNrKGN1cnJlbnQsIG5ld19jcHUpOwotfQotCi0vKgogICogcHVsbF90YXNrIC0gbW92ZSBhIHRhc2sgZnJvbSBhIHJlbW90ZSBydW5xdWV1ZSB0byB0aGUgbG9jYWwgcnVucXVldWUuCiAgKiBCb3RoIHJ1bnF1ZXVlcyBtdXN0IGJlIGxvY2tlZC4KICAqLwpAQCAtNTkxMSwxNCArNTk0MywxNSBAQAogICovCiBib29sIHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICp4KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDE7CiAKLQlzcGluX2xvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsKIAlpZiAoIXgtPmRvbmUpCiAJCXJldCA9IDA7CiAJZWxzZQogCQl4LT5kb25lLS07Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJngtPndhaXQubG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKTsKQEAgLTU5MzMsMTIgKzU5NjYsMTMgQEAKICAqLwogYm9vbCBjb21wbGV0aW9uX2RvbmUoc3RydWN0IGNvbXBsZXRpb24gKngpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMTsKIAotCXNwaW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJngtPndhaXQubG9jaywgZmxhZ3MpOwogCWlmICgheC0+ZG9uZSkKIAkJcmV0ID0gMDsKLQlzcGluX3VubG9ja19pcnEoJngtPndhaXQubG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeC0+d2FpdC5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY29tcGxldGlvbl9kb25lKTsKQEAgLTY0NTcsNyArNjQ5MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dmFsID0gLUVTUkNIOwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CiAJaWYgKHApIHsKIAkJcmV0dmFsID0gc2VjdXJpdHlfdGFza19nZXRzY2hlZHVsZXIocCk7CkBAIC02NDY1LDcgKzY0OTksNyBAQAogCQkJcmV0dmFsID0gcC0+cG9saWN5CiAJCQkJfCAocC0+c2NoZWRfcmVzZXRfb25fZm9yayA/IFNDSEVEX1JFU0VUX09OX0ZPUksgOiAwKTsKIAl9Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY0ODMsNyArNjUxNyw3IEBACiAJaWYgKCFwYXJhbSB8fCBwaWQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CiAJcmV0dmFsID0gLUVTUkNIOwogCWlmICghcCkKQEAgLTY0OTQsNyArNjUyOCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWxwLnNjaGVkX3ByaW9yaXR5ID0gcC0+cnRfcHJpb3JpdHk7Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKIAkgKiBUaGlzIG9uZSBtaWdodCBzbGVlcCwgd2UgY2Fubm90IGRvIGl0IHdpdGggYSBzcGlubG9jayBoZWxkIC4uLgpAQCAtNjUwNCw3ICs2NTM4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogCiBvdXRfdW5sb2NrOgotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02NTE1LDIyICs2NTQ5LDE4IEBACiAJaW50IHJldHZhbDsKIAogCWdldF9vbmxpbmVfY3B1cygpOwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlpZiAoIXApIHsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcHV0X29ubGluZV9jcHVzKCk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQogCi0JLyoKLQkgKiBJdCBpcyBub3Qgc2FmZSB0byBjYWxsIHNldF9jcHVzX2FsbG93ZWQgd2l0aCB0aGUKLQkgKiB0YXNrbGlzdF9sb2NrIGhlbGQuIFdlIHdpbGwgYnVtcCB0aGUgdGFza19zdHJ1Y3QncwotCSAqIHVzYWdlIGNvdW50IGFuZCB0aGVuIGRyb3AgdGFza2xpc3RfbG9jay4KLQkgKi8KKwkvKiBQcmV2ZW50IHAgZ29pbmcgYXdheSAqLwogCWdldF90YXNrX3N0cnVjdChwKTsKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVzX2FsbG93ZWQsIEdGUF9LRVJORUwpKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CkBAIC02NjE2LDcgKzY2NDYsNyBAQAogCWludCByZXR2YWw7CiAKIAlnZXRfb25saW5lX2NwdXMoKTsKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAogCXJldHZhbCA9IC1FU1JDSDsKIAlwID0gZmluZF9wcm9jZXNzX2J5X3BpZChwaWQpOwpAQCAtNjYzMiw3ICs2NjYyLDcgQEAKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAogb3V0X3VubG9jazoKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcHV0X29ubGluZV9jcHVzKCk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNjg3Niw3ICs2OTA2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR2YWwgPSAtRVNSQ0g7Ci0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlpZiAoIXApCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTY4ODksMTMgKzY5MTksMTMgQEAKIAl0aW1lX3NsaWNlID0gcC0+c2NoZWRfY2xhc3MtPmdldF9ycl9pbnRlcnZhbChycSwgcCk7CiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJamlmZmllc190b190aW1lc3BlYyh0aW1lX3NsaWNlLCAmdCk7CiAJcmV0dmFsID0gY29weV90b191c2VyKGludGVydmFsLCAmdCwgc2l6ZW9mKHQpKSA/IC1FRkFVTFQgOiAwOwogCXJldHVybiByZXR2YWw7CiAKIG91dF91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY5ODYsNiArNzAxNiw3IEBACiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwogCiAJX19zY2hlZF9mb3JrKGlkbGUpOworCWlkbGUtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogCWlkbGUtPnNlLmV4ZWNfc3RhcnQgPSBzY2hlZF9jbG9jaygpOwogCiAJY3B1bWFza19jb3B5KCZpZGxlLT5jcHVzX2FsbG93ZWQsIGNwdW1hc2tfb2YoY3B1KSk7CkBAIC03MTAwLDcgKzcxMzEsMjMgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCWludCByZXQgPSAwOwogCisJLyoKKwkgKiBTaW5jZSB3ZSByZWx5IG9uIHdha2UtdXBzIHRvIG1pZ3JhdGUgc2xlZXBpbmcgdGFza3MsIGRvbid0IGNoYW5nZQorCSAqIHRoZSAtPmNwdXNfYWxsb3dlZCBtYXNrIGZyb20gdW5kZXIgd2FraW5nIHRhc2tzLCB3aGljaCB3b3VsZCBiZQorCSAqIHBvc3NpYmxlIHdoZW4gd2UgY2hhbmdlIHJxLT5sb2NrIGluIHR0d3UoKSwgc28gc3luY2hyb25pemUgYWdhaW5zdAorCSAqIFRBU0tfV0FLSU5HIHRvIGF2b2lkIHRoYXQuCisJICovCithZ2FpbjoKKwl3aGlsZSAocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpCisJCWNwdV9yZWxheCgpOworCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKworCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORykgeworCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhuZXdfbWFzaywgY3B1X2FjdGl2ZV9tYXNrKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTcxNTYsNyArNzIwMyw3IEBACiBzdGF0aWMgaW50IF9fbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNyY19jcHUsIGludCBkZXN0X2NwdSkKIHsKIAlzdHJ1Y3QgcnEgKnJxX2Rlc3QsICpycV9zcmM7Ci0JaW50IHJldCA9IDAsIG9uX3JxOworCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KCFjcHVfYWN0aXZlKGRlc3RfY3B1KSkpCiAJCXJldHVybiByZXQ7CkBAIC03MTcyLDEyICs3MjE5LDEzIEBACiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGRlc3RfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSkKIAkJZ290byBmYWlsOwogCi0Jb25fcnEgPSBwLT5zZS5vbl9ycTsKLQlpZiAob25fcnEpCisJLyoKKwkgKiBJZiB3ZSdyZSBub3Qgb24gYSBycSwgdGhlIG5leHQgd2FrZS11cCB3aWxsIGVuc3VyZSB3ZSdyZQorCSAqIHBsYWNlZCBwcm9wZXJseS4KKwkgKi8KKwlpZiAocC0+c2Uub25fcnEpIHsKIAkJZGVhY3RpdmF0ZV90YXNrKHJxX3NyYywgcCwgMCk7Ci0KLQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOwotCWlmIChvbl9ycSkgeworCQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOwogCQlhY3RpdmF0ZV90YXNrKHJxX2Rlc3QsIHAsIDApOwogCQljaGVja19wcmVlbXB0X2N1cnIocnFfZGVzdCwgcCwgMCk7CiAJfQpAQCAtNzI3MywzNyArNzMyMSwxMCBAQAogc3RhdGljIHZvaWQgbW92ZV90YXNrX29mZl9kZWFkX2NwdShpbnQgZGVhZF9jcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlpbnQgZGVzdF9jcHU7Ci0JY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5vZGVtYXNrID0gY3B1bWFza19vZl9ub2RlKGNwdV90b19ub2RlKGRlYWRfY3B1KSk7CiAKIGFnYWluOgotCS8qIExvb2sgZm9yIGFsbG93ZWQsIG9ubGluZSBDUFUgaW4gc2FtZSBub2RlLiAqLwotCWZvcl9lYWNoX2NwdV9hbmQoZGVzdF9jcHUsIG5vZGVtYXNrLCBjcHVfYWN0aXZlX21hc2spCi0JCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGRlc3RfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSkKLQkJCWdvdG8gbW92ZTsKKwlkZXN0X2NwdSA9IHNlbGVjdF9mYWxsYmFja19ycShkZWFkX2NwdSwgcCk7CiAKLQkvKiBBbnkgYWxsb3dlZCwgb25saW5lIENQVT8gKi8KLQlkZXN0X2NwdSA9IGNwdW1hc2tfYW55X2FuZCgmcC0+Y3B1c19hbGxvd2VkLCBjcHVfYWN0aXZlX21hc2spOwotCWlmIChkZXN0X2NwdSA8IG5yX2NwdV9pZHMpCi0JCWdvdG8gbW92ZTsKLQotCS8qIE5vIG1vcmUgTXIuIE5pY2UgR3V5LiAqLwotCWlmIChkZXN0X2NwdSA+PSBucl9jcHVfaWRzKSB7Ci0JCWNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHAsICZwLT5jcHVzX2FsbG93ZWQpOwotCQlkZXN0X2NwdSA9IGNwdW1hc2tfYW55X2FuZChjcHVfYWN0aXZlX21hc2ssICZwLT5jcHVzX2FsbG93ZWQpOwotCi0JCS8qCi0JCSAqIERvbid0IHRlbGwgdGhlbSBhYm91dCBtb3ZpbmcgZXhpdGluZyB0YXNrcyBvcgotCQkgKiBrZXJuZWwgdGhyZWFkcyAoYm90aCBtbSBOVUxMKSwgc2luY2UgdGhleSBuZXZlcgotCQkgKiBsZWF2ZSBrZXJuZWwuCi0JCSAqLwotCQlpZiAocC0+bW0gJiYgcHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJwcm9jZXNzICVkICglcykgbm8gIgotCQkJICAgICAgICJsb25nZXIgYWZmaW5lIHRvIGNwdSVkXG4iLAotCQkJICAgICAgIHRhc2tfcGlkX25yKHApLCBwLT5jb21tLCBkZWFkX2NwdSk7Ci0JCX0KLQl9Ci0KLW1vdmU6CiAJLyogSXQgY2FuIGhhdmUgYWZmaW5pdHkgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGNob29zaW5nLiAqLwogCWlmICh1bmxpa2VseSghX19taWdyYXRlX3Rhc2tfaXJxKHAsIGRlYWRfY3B1LCBkZXN0X2NwdSkpKQogCQlnb3RvIGFnYWluOwpAQCAtOTY2OCw3ICs5Njg5LDcgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAKIHN0YXRpYyBpbmxpbmUgaW50IHByZWVtcHRfY291bnRfZXF1YWxzKGludCBwcmVlbXB0X29mZnNldCkKIHsKLQlpbnQgbmVzdGVkID0gcHJlZW1wdF9jb3VudCgpICYgflBSRUVNUFRfQUNUSVZFOworCWludCBuZXN0ZWQgPSAocHJlZW1wdF9jb3VudCgpICYgflBSRUVNUFRfQUNUSVZFKSArIHJjdV9wcmVlbXB0X2RlcHRoKCk7CiAKIAlyZXR1cm4gKG5lc3RlZCA9PSBQUkVFTVBUX0lOQVRPTUlDX0JBU0UgKyBwcmVlbXB0X29mZnNldCk7CiB9CkBAIC0xMDA4Myw3ICsxMDEwNCw3IEBACiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCWlmICh0c2stPnNjaGVkX2NsYXNzLT5tb3ZlZF9ncm91cCkKLQkJdHNrLT5zY2hlZF9jbGFzcy0+bW92ZWRfZ3JvdXAodHNrKTsKKwkJdHNrLT5zY2hlZF9jbGFzcy0+bW92ZWRfZ3JvdXAodHNrLCBvbl9ycSk7CiAjZW5kaWYKIAogCWlmICh1bmxpa2VseShydW5uaW5nKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggNDc5Y2U1Ni4uNWI0OTYxMyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTIzNiw2ICsyMzYsMTggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjaGVkX2Nsb2NrX2lkbGVfd2FrZXVwX2V2ZW50KTsKIAordW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBjbG9jazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNsb2NrID0gc2NoZWRfY2xvY2tfY3B1KGNwdSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIGNsb2NrOworfQorCiAjZWxzZSAvKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyAqLwogCiB2b2lkIHNjaGVkX2Nsb2NrX2luaXQodm9pZCkKQEAgLTI1MSwxNyArMjYzLDEyIEBACiAJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyAqLwogCiB1bnNpZ25lZCBsb25nIGxvbmcgY3B1X2Nsb2NrKGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGNsb2NrOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1KTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gY2xvY2s7CisJcmV0dXJuIHNjaGVkX2Nsb2NrX2NwdShjcHUpOwogfQorCisjZW5kaWYgLyogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgKi8KKwogRVhQT1JUX1NZTUJPTF9HUEwoY3B1X2Nsb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDViZWRmNmUuLjQyYWMzYzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNTEwLDYgKzUxMCw3IEBACiAJY3Vyci0+c3VtX2V4ZWNfcnVudGltZSArPSBkZWx0YV9leGVjOwogCXNjaGVkc3RhdF9hZGQoY2ZzX3JxLCBleGVjX2Nsb2NrLCBkZWx0YV9leGVjKTsKIAlkZWx0YV9leGVjX3dlaWdodGVkID0gY2FsY19kZWx0YV9mYWlyKGRlbHRhX2V4ZWMsIGN1cnIpOworCiAJY3Vyci0+dnJ1bnRpbWUgKz0gZGVsdGFfZXhlY193ZWlnaHRlZDsKIAl1cGRhdGVfbWluX3ZydW50aW1lKGNmc19ycSk7CiB9CkBAIC03NjUsMTYgKzc2NiwyNiBAQAogCXNlLT52cnVudGltZSA9IHZydW50aW1lOwogfQogCisjZGVmaW5lIEVOUVVFVUVfV0FLRVVQCTEKKyNkZWZpbmUgRU5RVUVVRV9NSUdSQVRFIDIKKwogc3RhdGljIHZvaWQKLWVucXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCB3YWtldXApCitlbnF1ZXVlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpCiB7CiAJLyoKKwkgKiBVcGRhdGUgdGhlIG5vcm1hbGl6ZWQgdnJ1bnRpbWUgYmVmb3JlIHVwZGF0aW5nIG1pbl92cnVudGltZQorCSAqIHRocm91Z2ggY2FsbGlnIHVwZGF0ZV9jdXJyKCkuCisJICovCisJaWYgKCEoZmxhZ3MgJiBFTlFVRVVFX1dBS0VVUCkgfHwgKGZsYWdzICYgRU5RVUVVRV9NSUdSQVRFKSkKKwkJc2UtPnZydW50aW1lICs9IGNmc19ycS0+bWluX3ZydW50aW1lOworCisJLyoKIAkgKiBVcGRhdGUgcnVuLXRpbWUgc3RhdGlzdGljcyBvZiB0aGUgJ2N1cnJlbnQnLgogCSAqLwogCXVwZGF0ZV9jdXJyKGNmc19ycSk7CiAJYWNjb3VudF9lbnRpdHlfZW5xdWV1ZShjZnNfcnEsIHNlKTsKIAotCWlmICh3YWtldXApIHsKKwlpZiAoZmxhZ3MgJiBFTlFVRVVFX1dBS0VVUCkgewogCQlwbGFjZV9lbnRpdHkoY2ZzX3JxLCBzZSwgMCk7CiAJCWVucXVldWVfc2xlZXBlcihjZnNfcnEsIHNlKTsKIAl9CkBAIC04MjgsNiArODM5LDE0IEBACiAJCV9fZGVxdWV1ZV9lbnRpdHkoY2ZzX3JxLCBzZSk7CiAJYWNjb3VudF9lbnRpdHlfZGVxdWV1ZShjZnNfcnEsIHNlKTsKIAl1cGRhdGVfbWluX3ZydW50aW1lKGNmc19ycSk7CisKKwkvKgorCSAqIE5vcm1hbGl6ZSB0aGUgZW50aXR5IGFmdGVyIHVwZGF0aW5nIHRoZSBtaW5fdnJ1bnRpbWUgYmVjYXVzZSB0aGUKKwkgKiB1cGRhdGUgY2FuIHJlZmVyIHRvIHRoZSAtPmN1cnIgaXRlbSBhbmQgd2UgbmVlZCB0byByZWZsZWN0IHRoaXMKKwkgKiBtb3ZlbWVudCBpbiBvdXIgbm9ybWFsaXplZCBwb3NpdGlvbi4KKwkgKi8KKwlpZiAoIXNsZWVwKQorCQlzZS0+dnJ1bnRpbWUgLT0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7CiB9CiAKIC8qCkBAIC0xMDM4LDEzICsxMDU3LDE5IEBACiB7CiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxOwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOworCWludCBmbGFncyA9IDA7CisKKwlpZiAod2FrZXVwKQorCQlmbGFncyB8PSBFTlFVRVVFX1dBS0VVUDsKKwlpZiAocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpCisJCWZsYWdzIHw9IEVOUVVFVUVfTUlHUkFURTsKIAogCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkgewogCQlpZiAoc2UtPm9uX3JxKQogCQkJYnJlYWs7CiAJCWNmc19ycSA9IGNmc19ycV9vZihzZSk7Ci0JCWVucXVldWVfZW50aXR5KGNmc19ycSwgc2UsIHdha2V1cCk7Ci0JCXdha2V1cCA9IDE7CisJCWVucXVldWVfZW50aXR5KGNmc19ycSwgc2UsIGZsYWdzKTsKKwkJZmxhZ3MgPSBFTlFVRVVFX1dBS0VVUDsKIAl9CiAKIAlocnRpY2tfdXBkYXRlKHJxKTsKQEAgLTExMjAsNiArMTE0NSwxNCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCitzdGF0aWMgdm9pZCB0YXNrX3dha2luZ19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZwLT5zZTsKKwlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSBjZnNfcnFfb2Yoc2UpOworCisJc2UtPnZydW50aW1lIC09IGNmc19ycS0+bWluX3ZydW50aW1lOworfQorCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIC8qCiAgKiBlZmZlY3RpdmVfbG9hZCgpIGNhbGN1bGF0ZXMgdGhlIGxvYWQgY2hhbmdlIGFzIHNlZW4gZnJvbSB0aGUgcm9vdF90YXNrX2dyb3VwCkBAIC0xNDI5LDYgKzE0NjIsOSBAQAogCX0KIAogCWZvcl9lYWNoX2RvbWFpbihjcHUsIHRtcCkgeworCQlpZiAoISh0bXAtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKKwkJCWNvbnRpbnVlOworCiAJCS8qCiAJCSAqIElmIHBvd2VyIHNhdmluZ3MgbG9naWMgaXMgZW5hYmxlZCBmb3IgYSBkb21haW4sIHNlZSBpZiB3ZQogCQkgKiBhcmUgbm90IG92ZXJsb2FkZWQsIGlmIHNvLCBkb24ndCBiYWxhbmNlIHdpZGVyLgpAQCAtMTk3NSw2ICsyMDExLDggQEAKIAkJcmVzY2hlZF90YXNrKHJxLT5jdXJyKTsKIAl9CiAKKwlzZS0+dnJ1bnRpbWUgLT0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7CisKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMjAyOCwxMiArMjA2NiwxMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLXN0YXRpYyB2b2lkIG1vdmVkX2dyb3VwX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIHZvaWQgbW92ZWRfZ3JvdXBfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBvbl9ycSkKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSB0YXNrX2Nmc19ycShwKTsKIAogCXVwZGF0ZV9jdXJyKGNmc19ycSk7Ci0JcGxhY2VfZW50aXR5KGNmc19ycSwgJnAtPnNlLCAxKTsKKwlpZiAoIW9uX3JxKQorCQlwbGFjZV9lbnRpdHkoY2ZzX3JxLCAmcC0+c2UsIDEpOwogfQogI2VuZGlmCiAKQEAgLTIwNzMsNiArMjExMiw4IEBACiAJLm1vdmVfb25lX3Rhc2sJCT0gbW92ZV9vbmVfdGFza19mYWlyLAogCS5ycV9vbmxpbmUJCT0gcnFfb25saW5lX2ZhaXIsCiAJLnJxX29mZmxpbmUJCT0gcnFfb2ZmbGluZV9mYWlyLAorCisJLnRhc2tfd2FraW5nCQk9IHRhc2tfd2FraW5nX2ZhaXIsCiAjZW5kaWYKIAogCS5zZXRfY3Vycl90YXNrICAgICAgICAgID0gc2V0X2N1cnJfdGFza19mYWlyLApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBkMmVhMjgyLi5mNDgzMjhhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAKICAqIElmIHdlIGFyZSBub3QgcnVubmluZyBhbmQgd2UgYXJlIG5vdCBnb2luZyB0byByZXNjaGVkdWxlIHNvb24sIHdlIHNob3VsZAogICogdHJ5IHRvIHB1c2ggdGFza3MgYXdheSBub3cKICAqLwotc3RhdGljIHZvaWQgdGFza193YWtlX3VwX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3N0YXRpYyB2b2lkIHRhc2tfd29rZW5fcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCWlmICghdGFza19ydW5uaW5nKHJxLCBwKSAmJgogCSAgICAhdGVzdF90c2tfbmVlZF9yZXNjaGVkKHJxLT5jdXJyKSAmJgpAQCAtMTc1Myw3ICsxNzUzLDcgQEAKIAkucnFfb2ZmbGluZSAgICAgICAgICAgICA9IHJxX29mZmxpbmVfcnQsCiAJLnByZV9zY2hlZHVsZQkJPSBwcmVfc2NoZWR1bGVfcnQsCiAJLnBvc3Rfc2NoZWR1bGUJCT0gcG9zdF9zY2hlZHVsZV9ydCwKLQkudGFza193YWtlX3VwCQk9IHRhc2tfd2FrZV91cF9ydCwKKwkudGFza193b2tlbgkJPSB0YXNrX3dva2VuX3J0LAogCS5zd2l0Y2hlZF9mcm9tCQk9IHN3aXRjaGVkX2Zyb21fcnQsCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDE4MTRlNjguLmQwOTY5MmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTIxOCwxMyArMjE4LDEzIEBACiAJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwogCiAJLyoKLQkgKiBXZSB3b24ndCBnZXQgcHJvYmxlbXMgd2l0aCB0aGUgdGFyZ2V0J3MgVUlEIGNoYW5naW5nIHVuZGVyIHVzCi0JICogYmVjYXVzZSBjaGFuZ2luZyBpdCByZXF1aXJlcyBSQ1UgYmUgdXNlZCwgYW5kIGlmIHQgIT0gY3VycmVudCwgdGhlCi0JICogY2FsbGVyIG11c3QgYmUgaG9sZGluZyB0aGUgUkNVIHJlYWRsb2NrIChieSB3YXkgb2YgYSBzcGlubG9jaykgYW5kCi0JICogd2UgdXNlIFJDVSBwcm90ZWN0aW9uIGhlcmUKKwkgKiBQcm90ZWN0IGFjY2VzcyB0byBAdCBjcmVkZW50aWFscy4gVGhpcyBjYW4gZ28gYXdheSB3aGVuIGFsbAorCSAqIGNhbGxlcnMgaG9sZCByY3UgcmVhZCBsb2NrLgogCSAqLworCXJjdV9yZWFkX2xvY2soKTsKIAl1c2VyID0gZ2V0X3VpZChfX3Rhc2tfY3JlZCh0KS0+dXNlcik7CiAJYXRvbWljX2luYygmdXNlci0+c2lncGVuZGluZyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAob3ZlcnJpZGVfcmxpbWl0IHx8CiAJICAgIGF0b21pY19yZWFkKCZ1c2VyLT5zaWdwZW5kaW5nKSA8PQpAQCAtMTE3OSwxMSArMTE3OSwxMiBAQAogCWludCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqcGNyZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghdmFsaWRfc2lnbmFsKHNpZykpCiAJCXJldHVybiByZXQ7CiAKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAlwID0gcGlkX3Rhc2socGlkLCBQSURUWVBFX1BJRCk7CiAJaWYgKCFwKSB7CiAJCXJldCA9IC1FU1JDSDsKQEAgLTExOTksMTQgKzEyMDAsMTYgQEAKIAlyZXQgPSBzZWN1cml0eV90YXNrX2tpbGwocCwgaW5mbywgc2lnLCBzZWNpZCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5sb2NrOwotCWlmIChzaWcgJiYgcC0+c2lnaGFuZCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZXQgPSBfX3NlbmRfc2lnbmFsKHNpZywgaW5mbywgcCwgMSwgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKworCWlmIChzaWcpIHsKKwkJaWYgKGxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncykpIHsKKwkJCXJldCA9IF9fc2VuZF9zaWduYWwoc2lnLCBpbmZvLCBwLCAxLCAwKTsKKwkJCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtRVNSQ0g7CiAJfQogb3V0X3VubG9jazoKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtpbGxfcGlkX2luZm9fYXNfdWlkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAyMGNjZmI1Li4yNmE2YjczIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xNjIsNiArMTYyLDcgQEAKIAlpZiAobmljZXZhbCA+IDE5KQogCQluaWNldmFsID0gMTk7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlzd2l0Y2ggKHdoaWNoKSB7CiAJCWNhc2UgUFJJT19QUk9DRVNTOgpAQCAtMTk5LDYgKzIwMCw3IEBACiAJfQogb3V0X3VubG9jazoKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bF9iaW5hcnkuYyBiL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMKaW5kZXggMTEyNTMzZC4uOGY1ZDE2ZSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9iaW5hcnkuYworKysgYi9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jCkBAIC0xNDE3LDYgKzE0MTcsMzUgQEAKIAlyZXR1cm47CiB9CiAKKyNkZWZpbmUgV0FSTl9PTkNFX0hBU0hfQklUUyA4CisjZGVmaW5lIFdBUk5fT05DRV9IQVNIX1NJWkUgKDE8PFdBUk5fT05DRV9IQVNIX0JJVFMpCisKK3N0YXRpYyBERUNMQVJFX0JJVE1BUCh3YXJuX29uY2VfYml0bWFwLCBXQVJOX09OQ0VfSEFTSF9TSVpFKTsKKworI2RlZmluZSBGTlYzMl9PRkZTRVQgMjE2NjEzNjI2MVUKKyNkZWZpbmUgRk5WMzJfUFJJTUUgMHgwMTAwMDE5MworCisvKgorICogUHJpbnQgZWFjaCBsZWdhY3kgc3lzY3RsIChhcHByb3hpbWF0ZWx5KSBvbmx5IG9uY2UuCisgKiBUbyBhdm9pZCBtYWtpbmcgdGhlIHRhYmxlcyBub24tY29uc3QgdXNlIGEgZXh0ZXJuYWwKKyAqIGhhc2gtdGFibGUgaW5zdGVhZC4KKyAqIFdvcnN0IGNhc2UgaGFzaCBjb2xsaXNpb246IDYsIGJ1dCB2ZXJ5IHJhcmVseS4KKyAqIE5PVEUhIFdlIGRvbid0IHVzZSB0aGUgU01QLXNhZmUgYml0IHRlc3RzLiBXZSBzaW1wbHkKKyAqIGRvbid0IGNhcmUgZW5vdWdoLgorICovCitzdGF0aWMgdm9pZCB3YXJuX29uX2JpbnRhYmxlKGNvbnN0IGludCAqbmFtZSwgaW50IG5sZW4pCit7CisJaW50IGk7CisJdTMyIGhhc2ggPSBGTlYzMl9PRkZTRVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmxlbjsgaSsrKQorCQloYXNoID0gKGhhc2ggXiBuYW1lW2ldKSAqIEZOVjMyX1BSSU1FOworCWhhc2ggJT0gV0FSTl9PTkNFX0hBU0hfU0laRTsKKwlpZiAoX190ZXN0X2FuZF9zZXRfYml0KGhhc2gsIHdhcm5fb25jZV9iaXRtYXApKQorCQlyZXR1cm47CisJZGVwcmVjYXRlZF9zeXNjdGxfd2FybmluZyhuYW1lLCBubGVuKTsKK30KKwogc3RhdGljIHNzaXplX3QgZG9fc3lzY3RsKGludCBfX3VzZXIgKmFyZ3NfbmFtZSwgaW50IG5sZW4sCiAJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IG9sZGxlbiwgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTE0MzEsNyArMTQ2MCw3IEBACiAJCWlmIChnZXRfdXNlcihuYW1lW2ldLCBhcmdzX25hbWUgKyBpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JZGVwcmVjYXRlZF9zeXNjdGxfd2FybmluZyhuYW1lLCBubGVuKTsKKwl3YXJuX29uX2JpbnRhYmxlKG5hbWUsIG5sZW4pOwogCiAJcmV0dXJuIGJpbmFyeV9zeXNjdGwobmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW4sIG5ld3ZhbCwgbmV3bGVuKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lLmMgYi9rZXJuZWwvdGltZS5jCmluZGV4IGM2MzI0ZDkuLjgwNDc5ODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lLmMKKysrIGIva2VybmVsL3RpbWUuYwpAQCAtMTM2LDYgKzEzNiw3IEBACiAJd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwogCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyAtPSBzeXNfdHoudHpfbWludXRlc3dlc3QgKiA2MDsKIAl4dGltZS50dl9zZWMgKz0gc3lzX3R6LnR6X21pbnV0ZXN3ZXN0ICogNjA7CisJdXBkYXRlX3h0aW1lX2NhY2hlKDApOwogCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOwogCWNsb2NrX3dhc19zZXQoKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCmluZGV4IDNkNWZjMGYuLjZmNzQwZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpAQCAtMjM4LDggKzIzOCw5IEBACiAgKi8KIHZvaWQgY2xvY2tldmVudHNfbm90aWZ5KHVuc2lnbmVkIGxvbmcgcmVhc29uLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKnRtcDsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsICp0bXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY3B1OwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2V2ZW50c19sb2NrLCBmbGFncyk7CiAJY2xvY2tldmVudHNfZG9fbm90aWZ5KHJlYXNvbiwgYXJnKTsKQEAgLTI1MCw4ICsyNTEsMTkgQEAKIAkJICogVW5yZWdpc3RlciB0aGUgY2xvY2sgZXZlbnQgZGV2aWNlcyB3aGljaCB3ZXJlCiAJCSAqIHJlbGVhc2VkIGZyb20gdGhlIHVzZXJzIGluIHRoZSBub3RpZnkgY2hhaW4uCiAJCSAqLwotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgdG1wLCAmY2xvY2tldmVudHNfcmVsZWFzZWQpCi0JCQlsaXN0X2RlbChub2RlKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmY2xvY2tldmVudHNfcmVsZWFzZWQsIGxpc3QpCisJCQlsaXN0X2RlbCgmZGV2LT5saXN0KTsKKwkJLyoKKwkJICogTm93IGNoZWNrIHdoZXRoZXIgdGhlIENQVSBoYXMgbGVmdCB1bnVzZWQgcGVyIGNwdSBkZXZpY2VzCisJCSAqLworCQljcHUgPSAqKChpbnQgKilhcmcpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZjbG9ja2V2ZW50X2RldmljZXMsIGxpc3QpIHsKKwkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZGV2LT5jcHVtYXNrKSAmJgorCQkJICAgIGNwdW1hc2tfd2VpZ2h0KGRldi0+Y3B1bWFzaykgPT0gMSkgeworCQkJCUJVR19PTihkZXYtPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEKTsKKwkJCQlsaXN0X2RlbCgmZGV2LT5saXN0KTsKKwkJCX0KKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGFmNDEzNWYuLjdmYWFhMzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtMTY1LDYgKzE2NSwxMyBAQAogLyogZmxhZyBmb3IgaWYgdGltZWtlZXBpbmcgaXMgc3VzcGVuZGVkICovCiBpbnQgX19yZWFkX21vc3RseSB0aW1la2VlcGluZ19zdXNwZW5kZWQ7CiAKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgeHRpbWVfY2FjaGUgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOwordm9pZCB1cGRhdGVfeHRpbWVfY2FjaGUodTY0IG5zZWMpCit7CisJeHRpbWVfY2FjaGUgPSB4dGltZTsKKwl0aW1lc3BlY19hZGRfbnMoJnh0aW1lX2NhY2hlLCBuc2VjKTsKK30KKwogLyogbXVzdCBob2xkIHh0aW1lX2xvY2sgKi8KIHZvaWQgdGltZWtlZXBpbmdfbGVhcF9pbnNlcnQoaW50IGxlYXBzZWNvbmQpCiB7CkBAIC0zMjUsNiArMzMyLDggQEAKIAogCXh0aW1lID0gKnR2OwogCisJdXBkYXRlX3h0aW1lX2NhY2hlKDApOworCiAJdGltZWtlZXBlci5udHBfZXJyb3IgPSAwOwogCW50cF9jbGVhcigpOwogCkBAIC01NTAsNiArNTU5LDcgQEAKIAl9CiAJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAogCQkJCS1ib290LnR2X3NlYywgLWJvb3QudHZfbnNlYyk7CisJdXBkYXRlX3h0aW1lX2NhY2hlKDApOwogCXRvdGFsX3NsZWVwX3RpbWUudHZfc2VjID0gMDsKIAl0b3RhbF9zbGVlcF90aW1lLnR2X25zZWMgPSAwOwogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CkBAIC01ODMsNiArNTkzLDcgQEAKIAkJd2FsbF90b19tb25vdG9uaWMgPSB0aW1lc3BlY19zdWIod2FsbF90b19tb25vdG9uaWMsIHRzKTsKIAkJdG90YWxfc2xlZXBfdGltZSA9IHRpbWVzcGVjX2FkZF9zYWZlKHRvdGFsX3NsZWVwX3RpbWUsIHRzKTsKIAl9CisJdXBkYXRlX3h0aW1lX2NhY2hlKDApOwogCS8qIHJlLWJhc2UgdGhlIGxhc3QgY3ljbGUgdmFsdWUgKi8KIAl0aW1la2VlcGVyLmNsb2NrLT5jeWNsZV9sYXN0ID0gdGltZWtlZXBlci5jbG9jay0+cmVhZCh0aW1la2VlcGVyLmNsb2NrKTsKIAl0aW1la2VlcGVyLm50cF9lcnJvciA9IDA7CkBAIC03MjIsNiArNzMzLDcgQEAKIAkJCQl0aW1la2VlcGVyLm50cF9lcnJvcl9zaGlmdDsKIH0KIAorCiAvKioKICAqIGxvZ2FyaXRobWljX2FjY3VtdWxhdGlvbiAtIHNoaWZ0ZWQgYWNjdW11bGF0aW9uIG9mIGN5Y2xlcwogICoKQEAgLTc2NSw2ICs3NzcsNyBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKKwogLyoqCiAgKiB1cGRhdGVfd2FsbF90aW1lIC0gVXNlcyB0aGUgY3VycmVudCBjbG9ja3NvdXJjZSB0byBpbmNyZW1lbnQgdGhlIHdhbGwgdGltZQogICoKQEAgLTc3NCw2ICs3ODcsNyBAQAogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqY2xvY2s7CiAJY3ljbGVfdCBvZmZzZXQ7CisJdTY0IG5zZWNzOwogCWludCBzaGlmdCA9IDAsIG1heHNoaWZ0OwogCiAJLyogTWFrZSBzdXJlIHdlJ3JlIGZ1bGx5IHJlc3VtZWQ6ICovCkBAIC04MzksNiArODUzLDkgQEAKIAl0aW1la2VlcGVyLm50cF9lcnJvciArPQl0aW1la2VlcGVyLnh0aW1lX25zZWMgPDwKIAkJCQl0aW1la2VlcGVyLm50cF9lcnJvcl9zaGlmdDsKIAorCW5zZWNzID0gY2xvY2tzb3VyY2VfY3ljMm5zKG9mZnNldCwgdGltZWtlZXBlci5tdWx0LCB0aW1la2VlcGVyLnNoaWZ0KTsKKwl1cGRhdGVfeHRpbWVfY2FjaGUobnNlY3MpOworCiAJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbmV3IGNsb2Nrc291cmNlIHRvIHVzZSAqLwogCXVwZGF0ZV92c3lzY2FsbCgmeHRpbWUsIHRpbWVrZWVwZXIuY2xvY2ssIHRpbWVrZWVwZXIubXVsdCk7CiB9CkBAIC04NzUsMTMgKzg5MiwxMyBAQAogCiB1bnNpZ25lZCBsb25nIGdldF9zZWNvbmRzKHZvaWQpCiB7Ci0JcmV0dXJuIHh0aW1lLnR2X3NlYzsKKwlyZXR1cm4geHRpbWVfY2FjaGUudHZfc2VjOwogfQogRVhQT1JUX1NZTUJPTChnZXRfc2Vjb25kcyk7CiAKIHN0cnVjdCB0aW1lc3BlYyBfX2N1cnJlbnRfa2VybmVsX3RpbWUodm9pZCkKIHsKLQlyZXR1cm4geHRpbWU7CisJcmV0dXJuIHh0aW1lX2NhY2hlOwogfQogCiBzdHJ1Y3QgdGltZXNwZWMgY3VycmVudF9rZXJuZWxfdGltZSh2b2lkKQpAQCAtODkxLDcgKzkwOCw4IEBACiAKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwotCQlub3cgPSB4dGltZTsKKworCQlub3cgPSB4dGltZV9jYWNoZTsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKIAogCXJldHVybiBub3c7CkBAIC05MDUsNyArOTIzLDggQEAKIAogCWRvIHsKIAkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7Ci0JCW5vdyA9IHh0aW1lOworCisJCW5vdyA9IHh0aW1lX2NhY2hlOwogCQltb25vID0gd2FsbF90b19tb25vdG9uaWM7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggNWRiNWE4ZC4uMTU1MzNiNyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTY1Niw4ICs2NTYsNiBAQAogCiAJZGVidWdfYWN0aXZhdGUodGltZXIsIGV4cGlyZXMpOwogCi0JbmV3X2Jhc2UgPSBfX2dldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOwotCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTk9fSFopICYmIGRlZmluZWQoQ09ORklHX1NNUCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggZDAwNjU1NC4uNmMyMmQ4YSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTEyLDE3ICsxMiwxNyBAQAogY29uZmlnIEhBVkVfRlRSQUNFX05NSV9FTlRFUgogCWJvb2wKIAloZWxwCi0JICBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtaW1wbGVtZW50YXRpb24udHh0CisJICBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAogCiBjb25maWcgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlib29sCiAJaGVscAotCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWltcGxlbWVudGF0aW9uLnR4dAorCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKIAogY29uZmlnIEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJYm9vbAogCWhlbHAKLQkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1pbXBsZW1lbnRhdGlvbi50eHQKKwkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CiAKIGNvbmZpZyBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZQX1RFU1QKIAlib29sCkBAIC0zNCwxNyArMzQsMTcgQEAKIGNvbmZpZyBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJYm9vbAogCWhlbHAKLQkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1pbXBsZW1lbnRhdGlvbi50eHQKKwkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CiAKIGNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJYm9vbAogCWhlbHAKLQkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1pbXBsZW1lbnRhdGlvbi50eHQKKwkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CiAKIGNvbmZpZyBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJYm9vbAogCWhlbHAKLQkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1pbXBsZW1lbnRhdGlvbi50eHQKKwkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CiAKIGNvbmZpZyBIQVZFX0hXX0JSQU5DSF9UUkFDRVIKIAlib29sCkBAIC01Miw3ICs1Miw3IEBACiBjb25maWcgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCiAJYm9vbAogCWhlbHAKLQkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1pbXBsZW1lbnRhdGlvbi50eHQKKwkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CiAKIGNvbmZpZyBUUkFDRVJfTUFYX1RSQUNFCiAJYm9vbApAQCAtODMsNyArODMsNyBAQAogIyBUaGlzIGFsbG93cyB0aG9zZSBvcHRpb25zIHRvIGFwcGVhciB3aGVuIG5vIG90aGVyIHRyYWNlciBpcyBzZWxlY3RlZC4gQnV0IHRoZQogIyBvcHRpb25zIGRvIG5vdCBhcHBlYXIgd2hlbiBzb21ldGhpbmcgZWxzZSBzZWxlY3RzIGl0LiBXZSBuZWVkIHRoZSB0d28gb3B0aW9ucwogIyBHRU5FUklDX1RSQUNFUiBhbmQgVFJBQ0lORyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgdG8gYWNjb21wbGlzaCB0aGUKLSMgaGlkZGluZyBvZiB0aGUgYXV0b21hdGljIG9wdGlvbnMuCisjIGhpZGluZyBvZiB0aGUgYXV0b21hdGljIG9wdGlvbnMuCiAKIGNvbmZpZyBUUkFDSU5HCiAJYm9vbApAQCAtMTE5LDcgKzExOSw3IEBACiAJYm9vbCAiVHJhY2VycyIKIAlkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMCiAJaGVscAotCSBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLgorCSAgRW5hYmxlIHRoZSBrZXJuZWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4KIAogaWYgRlRSQUNFCiAKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWhlbHAKIAkgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbi4gVGhpcyBpcyBkb25lCiAJICBieSB1c2luZyBhIGNvbXBpbGVyIGZlYXR1cmUgdG8gaW5zZXJ0IGEgc21hbGwsIDUtYnl0ZSBOby1PcGVyYXRpb24KLQkgIGluc3RydWN0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkga2VybmVsIGZ1bmN0aW9uLCB3aGljaCBOT1AKKwkgIGluc3RydWN0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkga2VybmVsIGZ1bmN0aW9uLCB3aGljaCBOT1AKIAkgIHNlcXVlbmNlIGlzIHRoZW4gZHluYW1pY2FsbHkgcGF0Y2hlZCBpbnRvIGEgdHJhY2VyIGNhbGwgd2hlbgogCSAgdHJhY2luZyBpcyBlbmFibGVkIGJ5IHRoZSBhZG1pbmlzdHJhdG9yLiBJZiBpdCdzIHJ1bnRpbWUgZGlzYWJsZWQKIAkgICh0aGUgYm9vdHVwIGRlZmF1bHQpLCB0aGVuIHRoZSBvdmVyaGVhZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGlzIHZlcnkKQEAgLTE1MCw3ICsxNTAsNyBAQAogCSAgYW5kIGl0cyBlbnRyeS4KIAkgIEl0cyBmaXJzdCBwdXJwb3NlIGlzIHRvIHRyYWNlIHRoZSBkdXJhdGlvbiBvZiBmdW5jdGlvbnMgYW5kCiAJICBkcmF3IGEgY2FsbCBncmFwaCBmb3IgZWFjaCB0aHJlYWQgd2l0aCBzb21lIGluZm9ybWF0aW9uIGxpa2UKLQkgIHRoZSByZXR1cm4gdmFsdWUuIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50IHJldHVybiAKKwkgIHRoZSByZXR1cm4gdmFsdWUuIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50IHJldHVybgogCSAgYWRkcmVzcyBvbiB0aGUgY3VycmVudCB0YXNrIHN0cnVjdHVyZSBpbnRvIGEgc3RhY2sgb2YgY2FsbHMuCiAKIApAQCAtMTczLDcgKzE3Myw3IEBACiAKIAkgICAgICBlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfbWF4X2xhdGVuY3kKIAotCSAgKE5vdGUgdGhhdCBrZXJuZWwgc2l6ZSBhbmQgb3ZlcmhlYWQgaW5jcmVhc2VzIHdpdGggdGhpcyBvcHRpb24KKwkgIChOb3RlIHRoYXQga2VybmVsIHNpemUgYW5kIG92ZXJoZWFkIGluY3JlYXNlIHdpdGggdGhpcyBvcHRpb24KIAkgIGVuYWJsZWQuIFRoaXMgb3B0aW9uIGFuZCB0aGUgcHJlZW1wdC1vZmYgdGltaW5nIG9wdGlvbiBjYW4gYmUKIAkgIHVzZWQgdG9nZXRoZXIgb3Igc2VwYXJhdGVseS4pCiAKQEAgLTE4Niw3ICsxODYsNyBAQAogCXNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFCiAJc2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVAKIAloZWxwCi0JICBUaGlzIG9wdGlvbiBtZWFzdXJlcyB0aGUgdGltZSBzcGVudCBpbiBwcmVlbXB0aW9uIG9mZiBjcml0aWNhbAorCSAgVGhpcyBvcHRpb24gbWVhc3VyZXMgdGhlIHRpbWUgc3BlbnQgaW4gcHJlZW1wdGlvbi1vZmYgY3JpdGljYWwKIAkgIHNlY3Rpb25zLCB3aXRoIG1pY3Jvc2Vjb25kIGFjY3VyYWN5LgogCiAJICBUaGUgZGVmYXVsdCBtZWFzdXJlbWVudCBtZXRob2QgaXMgYSBtYXhpbXVtIHNlYXJjaCwgd2hpY2ggaXMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCiAJICAgICAgZWNobyAwID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CiAKLQkgIChOb3RlIHRoYXQga2VybmVsIHNpemUgYW5kIG92ZXJoZWFkIGluY3JlYXNlcyB3aXRoIHRoaXMgb3B0aW9uCisJICAoTm90ZSB0aGF0IGtlcm5lbCBzaXplIGFuZCBvdmVyaGVhZCBpbmNyZWFzZSB3aXRoIHRoaXMgb3B0aW9uCiAJICBlbmFibGVkLiBUaGlzIG9wdGlvbiBhbmQgdGhlIGlycXMtb2ZmIHRpbWluZyBvcHRpb24gY2FuIGJlCiAJICB1c2VkIHRvZ2V0aGVyIG9yIHNlcGFyYXRlbHkuKQogCkBAIC0yMjIsNyArMjIyLDcgQEAKIAlkZXBlbmRzIG9uICFHRU5FUklDX1RSQUNFUgogCXNlbGVjdCBUUkFDSU5HCiAJaGVscAotCSAgVGhpcyB0cmFjZXIgaG9va3MgdG8gdmFyaW91cyB0cmFjZSBwb2ludHMgaW4gdGhlIGtlcm5lbAorCSAgVGhpcyB0cmFjZXIgaG9va3MgdG8gdmFyaW91cyB0cmFjZSBwb2ludHMgaW4gdGhlIGtlcm5lbCwKIAkgIGFsbG93aW5nIHRoZSB1c2VyIHRvIHBpY2sgYW5kIGNob29zZSB3aGljaCB0cmFjZSBwb2ludCB0aGV5CiAJICB3YW50IHRvIHRyYWNlLiBJdCBhbHNvIGluY2x1ZGVzIHRoZSBzY2hlZF9zd2l0Y2ggdHJhY2VyIHBsdWdpbi4KIApAQCAtMjY1LDE5ICsyNjUsMTkgQEAKIAkgVGhlIGxpa2VseS91bmxpa2VseSBwcm9maWxlciBvbmx5IGxvb2tzIGF0IHRoZSBjb25kaXRpb25zIHRoYXQKIAkgYXJlIGFubm90YXRlZCB3aXRoIGEgbGlrZWx5IG9yIHVubGlrZWx5IG1hY3JvLgogCi0JIFRoZSAiYWxsIGJyYW5jaCIgcHJvZmlsZXIgd2lsbCBwcm9maWxlIGV2ZXJ5IGlmIHN0YXRlbWVudCBpbiB0aGUKKwkgVGhlICJhbGwgYnJhbmNoIiBwcm9maWxlciB3aWxsIHByb2ZpbGUgZXZlcnkgaWYtc3RhdGVtZW50IGluIHRoZQogCSBrZXJuZWwuIFRoaXMgcHJvZmlsZXIgd2lsbCBhbHNvIGVuYWJsZSB0aGUgbGlrZWx5L3VubGlrZWx5Ci0JIHByb2ZpbGVyIGFzIHdlbGwuCisJIHByb2ZpbGVyLgogCi0JIEVpdGhlciBvZiB0aGUgYWJvdmUgcHJvZmlsZXJzIGFkZCBhIGJpdCBvZiBvdmVyaGVhZCB0byB0aGUgc3lzdGVtLgotCSBJZiB1bnN1cmUgY2hvb3NlICJObyBicmFuY2ggcHJvZmlsaW5nIi4KKwkgRWl0aGVyIG9mIHRoZSBhYm92ZSBwcm9maWxlcnMgYWRkcyBhIGJpdCBvZiBvdmVyaGVhZCB0byB0aGUgc3lzdGVtLgorCSBJZiB1bnN1cmUsIGNob29zZSAiTm8gYnJhbmNoIHByb2ZpbGluZyIuCiAKIGNvbmZpZyBCUkFOQ0hfUFJPRklMRV9OT05FCiAJYm9vbCAiTm8gYnJhbmNoIHByb2ZpbGluZyIKIAloZWxwCi0JIE5vIGJyYW5jaCBwcm9maWxpbmcuIEJyYW5jaCBwcm9maWxpbmcgYWRkcyBhIGJpdCBvZiBvdmVyaGVhZC4KLQkgT25seSBlbmFibGUgaXQgaWYgeW91IHdhbnQgdG8gYW5hbHlzZSB0aGUgYnJhbmNoaW5nIGJlaGF2aW9yLgotCSBPdGhlcndpc2Uga2VlcCBpdCBkaXNhYmxlZC4KKwkgIE5vIGJyYW5jaCBwcm9maWxpbmcuIEJyYW5jaCBwcm9maWxpbmcgYWRkcyBhIGJpdCBvZiBvdmVyaGVhZC4KKwkgIE9ubHkgZW5hYmxlIGl0IGlmIHlvdSB3YW50IHRvIGFuYWx5c2UgdGhlIGJyYW5jaGluZyBiZWhhdmlvci4KKwkgIE90aGVyd2lzZSBrZWVwIGl0IGRpc2FibGVkLgogCiBjb25maWcgUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMKIAlib29sICJUcmFjZSBsaWtlbHkvdW5saWtlbHkgcHJvZmlsZXIiCkBAIC0yODgsNyArMjg4LDcgQEAKIAogCSAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9wcm9maWxlX2Fubm90YXRlZF9icmFuY2gKIAotCSAgTm90ZTogdGhpcyB3aWxsIGFkZCBhIHNpZ25pZmljYW50IG92ZXJoZWFkLCBvbmx5IHR1cm4gdGhpcworCSAgTm90ZTogdGhpcyB3aWxsIGFkZCBhIHNpZ25pZmljYW50IG92ZXJoZWFkOyBvbmx5IHR1cm4gdGhpcwogCSAgb24gaWYgeW91IG5lZWQgdG8gcHJvZmlsZSB0aGUgc3lzdGVtJ3MgdXNlIG9mIHRoZXNlIG1hY3Jvcy4KIAogY29uZmlnIFBST0ZJTEVfQUxMX0JSQU5DSEVTCkBAIC0zMDUsNyArMzA1LDcgQEAKIAogCSAgVGhpcyBjb25maWd1cmF0aW9uLCB3aGVuIGVuYWJsZWQsIHdpbGwgaW1wb3NlIGEgZ3JlYXQgb3ZlcmhlYWQKIAkgIG9uIHRoZSBzeXN0ZW0uIFRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBzeXN0ZW0KLQkgIGlzIHRvIGJlIGFuYWx5emVkCisJICBpcyB0byBiZSBhbmFseXplZCBpbiBtdWNoIGRldGFpbC4KIGVuZGNob2ljZQogCiBjb25maWcgVFJBQ0lOR19CUkFOQ0hFUwpAQCAtMzM1LDcgKzMzNSw3IEBACiAJZGVwZW5kcyBvbiBYODYKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKIAloZWxwCi0JICBUaGlzIHRyYWNlciBoZWxwcyBkZXZlbG9wZXJzIHRvIGFuYWx5emUgYW5kIG9wdGltaXplIHRoZSBrZXJuZWxzCisJICBUaGlzIHRyYWNlciBoZWxwcyBkZXZlbG9wZXJzIHRvIGFuYWx5emUgYW5kIG9wdGltaXplIHRoZSBrZXJuZWwncwogCSAgcG93ZXIgbWFuYWdlbWVudCBkZWNpc2lvbnMsIHNwZWNpZmljYWxseSB0aGUgQy1zdGF0ZSBhbmQgUC1zdGF0ZQogCSAgYmVoYXZpb3IuCiAKQEAgLTM5MSwxNCArMzkxLDE0IEBACiAJc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCiAJaGVscAogCSAgVGhpcyB0cmFjZXIgcmVjb3JkcyBhbGwgYnJhbmNoZXMgb24gdGhlIHN5c3RlbSBpbiBhIGNpcmN1bGFyCi0JICBidWZmZXIgZ2l2aW5nIGFjY2VzcyB0byB0aGUgbGFzdCBOIGJyYW5jaGVzIGZvciBlYWNoIGNwdS4KKwkgIGJ1ZmZlciwgZ2l2aW5nIGFjY2VzcyB0byB0aGUgbGFzdCBOIGJyYW5jaGVzIGZvciBlYWNoIGNwdS4KIAogY29uZmlnIEtNRU1UUkFDRQogCWJvb2wgIlRyYWNlIFNMQUIgYWxsb2NhdGlvbnMiCiAJc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCiAJaGVscAogCSAga21lbXRyYWNlIHByb3ZpZGVzIHRyYWNpbmcgZm9yIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucywgc3VjaCBhcwotCSAga21hbGxvYywga2ZyZWUsIGttZW1fY2FjaGVfYWxsb2MsIGttZW1fY2FjaGVfZnJlZSBldGMuLiBDb2xsZWN0ZWQKKwkgIGttYWxsb2MsIGtmcmVlLCBrbWVtX2NhY2hlX2FsbG9jLCBrbWVtX2NhY2hlX2ZyZWUsIGV0Yy4gQ29sbGVjdGVkCiAJICBkYXRhIGlzIHRoZW4gZmVkIHRvIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gaW4gb3JkZXIgdG8gYW5hbHlzZQogCSAgYWxsb2NhdGlvbiBob3RzcG90cywgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBhbmQgc28gb24sIG1ha2luZyBpdAogCSAgcG9zc2libGUgdG8gc2VlIGhvdyB3ZWxsIGFuIGFsbG9jYXRvciBwZXJmb3JtcywgYXMgd2VsbCBhcyBkZWJ1ZwpAQCAtNDE3LDE1ICs0MTcsMTUgQEAKIAlib29sICJUcmFjZSB3b3JrcXVldWVzIgogCXNlbGVjdCBHRU5FUklDX1RSQUNFUgogCWhlbHAKLQkgIFRoZSB3b3JrcXVldWUgdHJhY2VyIHByb3ZpZGVzIHNvbWUgc3RhdGlzdGljYWwgaW5mb3JtYXRpb25zCisJICBUaGUgd29ya3F1ZXVlIHRyYWNlciBwcm92aWRlcyBzb21lIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uCiAgICAgICAgICAgYWJvdXQgZWFjaCBjcHUgd29ya3F1ZXVlIHRocmVhZCBzdWNoIGFzIHRoZSBudW1iZXIgb2YgdGhlCiAgICAgICAgICAgd29ya3MgaW5zZXJ0ZWQgYW5kIGV4ZWN1dGVkIHNpbmNlIHRoZWlyIGNyZWF0aW9uLiBJdCBjYW4gaGVscAotICAgICAgICAgIHRvIGV2YWx1YXRlIHRoZSBhbW91bnQgb2Ygd29yayBlYWNoIG9mIHRoZW0gaGF2ZSB0byBwZXJmb3JtLgorICAgICAgICAgIHRvIGV2YWx1YXRlIHRoZSBhbW91bnQgb2Ygd29yayBlYWNoIG9mIHRoZW0gaGFzIHRvIHBlcmZvcm0uCiAgICAgICAgICAgRm9yIGV4YW1wbGUgaXQgY2FuIGhlbHAgYSBkZXZlbG9wZXIgdG8gZGVjaWRlIHdoZXRoZXIgaGUgc2hvdWxkCi0gICAgICAgICAgY2hvb3NlIGEgcGVyIGNwdSB3b3JrcXVldWUgaW5zdGVhZCBvZiBhIHNpbmdsZXRocmVhZGVkIG9uZS4KKyAgICAgICAgICBjaG9vc2UgYSBwZXItY3B1IHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIGEgc2luZ2xldGhyZWFkZWQgb25lLgogCiBjb25maWcgQkxLX0RFVl9JT19UUkFDRQotCWJvb2wgIlN1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgaW8gYWN0aW9ucyIKKwlib29sICJTdXBwb3J0IGZvciB0cmFjaW5nIGJsb2NrIElPIGFjdGlvbnMiCiAJZGVwZW5kcyBvbiBTWVNGUwogCWRlcGVuZHMgb24gQkxPQ0sKIAlzZWxlY3QgUkVMQVkKQEAgLTQ1NiwxNSArNDU2LDE1IEBACiAJc2VsZWN0IFRSQUNJTkcKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhZGQgdHJhY2luZyBldmVudHMgKHNpbWlsYXIgdG8gdHJhY2Vwb2ludHMpIG9uIHRoZSBmbHkKLQkgIHZpYSB0aGUgZnRyYWNlIGludGVyZmFjZS4gU2VlIERvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0Ci0JICBmb3IgbW9yZSBkZXRhaWxzLgorCSAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYWRkIHRyYWNpbmcgZXZlbnRzIChzaW1pbGFyIHRvIHRyYWNlcG9pbnRzKQorCSAgb24gdGhlIGZseSB2aWEgdGhlIGZ0cmFjZSBpbnRlcmZhY2UuIFNlZQorCSAgRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQgZm9yIG1vcmUgZGV0YWlscy4KIAogCSAgVGhvc2UgZXZlbnRzIGNhbiBiZSBpbnNlcnRlZCB3aGVyZXZlciBrcHJvYmVzIGNhbiBwcm9iZSwgYW5kIHJlY29yZAogCSAgdmFyaW91cyByZWdpc3RlciBhbmQgbWVtb3J5IHZhbHVlcy4KIAotCSAgVGhpcyBvcHRpb24gaXMgYWxzbyByZXF1aXJlZCBieSBwZXJmLXByb2JlIHN1YmNvbW1hbmQgb2YgcGVyZiB0b29scy4gSWYKLQkgIHlvdSB3YW50IHRvIHVzZSBwZXJmIHRvb2xzLCB0aGlzIG9wdGlvbiBpcyBzdHJvbmdseSByZWNvbW1lbmRlZC4KKwkgIFRoaXMgb3B0aW9uIGlzIGFsc28gcmVxdWlyZWQgYnkgcGVyZi1wcm9iZSBzdWJjb21tYW5kIG9mIHBlcmYgdG9vbHMuCisJICBJZiB5b3Ugd2FudCB0byB1c2UgcGVyZiB0b29scywgdGhpcyBvcHRpb24gaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQuCiAKIGNvbmZpZyBEWU5BTUlDX0ZUUkFDRQogCWJvb2wgImVuYWJsZS9kaXNhYmxlIGZ0cmFjZSB0cmFjZXBvaW50cyBkeW5hbWljYWxseSIKQEAgLTQ3MiwzMiArNDcyLDMyIEBACiAJZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJZGVmYXVsdCB5CiAJaGVscAotICAgICAgICAgVGhpcyBvcHRpb24gd2lsbCBtb2RpZnkgYWxsIHRoZSBjYWxscyB0byBmdHJhY2UgZHluYW1pY2FsbHkKLQkgKHdpbGwgcGF0Y2ggdGhlbSBvdXQgb2YgdGhlIGJpbmFyeSBpbWFnZSBhbmQgcmVwbGFjZXMgdGhlbQotCSB3aXRoIGEgTm8tT3AgaW5zdHJ1Y3Rpb24pIGFzIHRoZXkgYXJlIGNhbGxlZC4gQSB0YWJsZSBpcwotCSBjcmVhdGVkIHRvIGR5bmFtaWNhbGx5IGVuYWJsZSB0aGVtIGFnYWluLgorICAgICAgICAgIFRoaXMgb3B0aW9uIHdpbGwgbW9kaWZ5IGFsbCB0aGUgY2FsbHMgdG8gZnRyYWNlIGR5bmFtaWNhbGx5CisJICAod2lsbCBwYXRjaCB0aGVtIG91dCBvZiB0aGUgYmluYXJ5IGltYWdlIGFuZCByZXBsYWNlIHRoZW0KKwkgIHdpdGggYSBOby1PcCBpbnN0cnVjdGlvbikgYXMgdGhleSBhcmUgY2FsbGVkLiBBIHRhYmxlIGlzCisJICBjcmVhdGVkIHRvIGR5bmFtaWNhbGx5IGVuYWJsZSB0aGVtIGFnYWluLgogCi0JIFRoaXMgd2F5IGEgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBrZXJuZWwgaXMgc2xpZ2h0bHkgbGFyZ2VyLCBidXQgb3RoZXJ3aXNlCi0JIGhhcyBuYXRpdmUgcGVyZm9ybWFuY2UgYXMgbG9uZyBhcyBubyB0cmFjaW5nIGlzIGFjdGl2ZS4KKwkgIFRoaXMgd2F5IGEgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBrZXJuZWwgaXMgc2xpZ2h0bHkgbGFyZ2VyLCBidXQKKwkgIG90aGVyd2lzZSBoYXMgbmF0aXZlIHBlcmZvcm1hbmNlIGFzIGxvbmcgYXMgbm8gdHJhY2luZyBpcyBhY3RpdmUuCiAKLQkgVGhlIGNoYW5nZXMgdG8gdGhlIGNvZGUgYXJlIGRvbmUgYnkgYSBrZXJuZWwgdGhyZWFkIHRoYXQKLQkgd2FrZXMgdXAgb25jZSBhIHNlY29uZCBhbmQgY2hlY2tzIHRvIHNlZSBpZiBhbnkgZnRyYWNlIGNhbGxzCi0JIHdlcmUgbWFkZS4gSWYgc28sIGl0IHJ1bnMgc3RvcF9tYWNoaW5lIChzdG9wcyBhbGwgQ1BVUykKLQkgYW5kIG1vZGlmaWVzIHRoZSBjb2RlIHRvIGp1bXAgb3ZlciB0aGUgY2FsbCB0byBmdHJhY2UuCisJICBUaGUgY2hhbmdlcyB0byB0aGUgY29kZSBhcmUgZG9uZSBieSBhIGtlcm5lbCB0aHJlYWQgdGhhdAorCSAgd2FrZXMgdXAgb25jZSBhIHNlY29uZCBhbmQgY2hlY2tzIHRvIHNlZSBpZiBhbnkgZnRyYWNlIGNhbGxzCisJICB3ZXJlIG1hZGUuIElmIHNvLCBpdCBydW5zIHN0b3BfbWFjaGluZSAoc3RvcHMgYWxsIENQVVMpCisJICBhbmQgbW9kaWZpZXMgdGhlIGNvZGUgdG8ganVtcCBvdmVyIHRoZSBjYWxsIHRvIGZ0cmFjZS4KIAogY29uZmlnIEZVTkNUSU9OX1BST0ZJTEVSCiAJYm9vbCAiS2VybmVsIGZ1bmN0aW9uIHByb2ZpbGVyIgogCWRlcGVuZHMgb24gRlVOQ1RJT05fVFJBQ0VSCiAJZGVmYXVsdCBuCiAJaGVscAotCSBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBrZXJuZWwgZnVuY3Rpb24gcHJvZmlsZXIuIEEgZmlsZSBpcyBjcmVhdGVkCi0JIGluIGRlYnVnZnMgY2FsbGVkIGZ1bmN0aW9uX3Byb2ZpbGVfZW5hYmxlZCB3aGljaCBkZWZhdWx0cyB0byB6ZXJvLgotCSBXaGVuIGEgMSBpcyBlY2hvZWQgaW50byB0aGlzIGZpbGUgcHJvZmlsaW5nIGJlZ2lucywgYW5kIHdoZW4gYQotCSB6ZXJvIGlzIGVudGVyZWQsIHByb2ZpbGluZyBzdG9wcy4gQSBmaWxlIGluIHRoZSB0cmFjZV9zdGF0cwotCSBkaXJlY3RvcnkgY2FsbGVkIGZ1bmN0aW9ucywgdGhhdCBzaG93IHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0Ci0JIGhhdmUgYmVlbiBoaXQgYW5kIHRoZWlyIGNvdW50ZXJzLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUga2VybmVsIGZ1bmN0aW9uIHByb2ZpbGVyLiBBIGZpbGUgaXMgY3JlYXRlZAorCSAgaW4gZGVidWdmcyBjYWxsZWQgZnVuY3Rpb25fcHJvZmlsZV9lbmFibGVkIHdoaWNoIGRlZmF1bHRzIHRvIHplcm8uCisJICBXaGVuIGEgMSBpcyBlY2hvZWQgaW50byB0aGlzIGZpbGUgcHJvZmlsaW5nIGJlZ2lucywgYW5kIHdoZW4gYQorCSAgemVybyBpcyBlbnRlcmVkLCBwcm9maWxpbmcgc3RvcHMuIEEgImZ1bmN0aW9ucyIgZmlsZSBpcyBjcmVhdGVkIGluCisJICB0aGUgdHJhY2Vfc3RhdHMgZGlyZWN0b3J5OyB0aGlzIGZpbGUgc2hvd3MgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQKKwkgIGhhdmUgYmVlbiBoaXQgYW5kIHRoZWlyIGNvdW50ZXJzLgogCi0JIElmIGluIGRvdWJ0LCBzYXkgTgorCSAgSWYgaW4gZG91YnQsIHNheSBOLgogCiBjb25maWcgRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlkZWZfYm9vbCB5CkBAIC01NTYsOCArNTU2LDggQEAKIAl0cmlzdGF0ZSAiUmluZyBidWZmZXIgYmVuY2htYXJrIHN0cmVzcyB0ZXN0ZXIiCiAJZGVwZW5kcyBvbiBSSU5HX0JVRkZFUgogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGNyZWF0ZXMgYSB0ZXN0IHRvIHN0cmVzcyB0aGUgcmluZyBidWZmZXIgYW5kIGJlbmNoIG1hcmsgaXQuCi0JICBJdCBjcmVhdGVzIGl0cyBvd24gcmluZyBidWZmZXIgc3VjaCB0aGF0IGl0IHdpbGwgbm90IGludGVyZmVyIHdpdGgKKwkgIFRoaXMgb3B0aW9uIGNyZWF0ZXMgYSB0ZXN0IHRvIHN0cmVzcyB0aGUgcmluZyBidWZmZXIgYW5kIGJlbmNobWFyayBpdC4KKwkgIEl0IGNyZWF0ZXMgaXRzIG93biByaW5nIGJ1ZmZlciBzdWNoIHRoYXQgaXQgd2lsbCBub3QgaW50ZXJmZXJlIHdpdGgKIAkgIGFueSBvdGhlciB1c2VycyBvZiB0aGUgcmluZyBidWZmZXIgKHN1Y2ggYXMgZnRyYWNlKS4gSXQgdGhlbiBjcmVhdGVzCiAJICBhIHByb2R1Y2VyIGFuZCBjb25zdW1lciB0aGF0IHdpbGwgcnVuIGZvciAxMCBzZWNvbmRzIGFuZCBzbGVlcCBmb3IKIAkgIDEwIHNlY29uZHMuIEVhY2ggaW50ZXJ2YWwgaXQgd2lsbCBwcmludCBvdXQgdGhlIG51bWJlciBvZiBldmVudHMKQEAgLTU2Niw3ICs1NjYsNyBAQAogCSAgSXQgZG9lcyBub3QgZGlzYWJsZSBpbnRlcnJ1cHRzIG9yIHJhaXNlIGl0cyBwcmlvcml0eSwgc28gaXQgbWF5IGJlCiAJICBhZmZlY3RlZCBieSBwcm9jZXNzZXMgdGhhdCBhcmUgcnVubmluZy4KIAotCSAgSWYgdW5zdXJlLCBzYXkgTgorCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogZW5kaWYgIyBGVFJBQ0UKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCA4YjlmMjBhLi4wZGYxYjBmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtMzk0OSw3ICszOTQ5LDcgQEAKIAlpZiAoISEodG9wdC0+ZmxhZ3MtPnZhbCAmIHRvcHQtPm9wdC0+Yml0KSAhPSB2YWwpIHsKIAkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJCXJldCA9IF9fc2V0X3RyYWNlcl9vcHRpb24oY3VycmVudF90cmFjZSwgdG9wdC0+ZmxhZ3MsCi0JCQkJCSAgdG9wdC0+b3B0LCB2YWwpOworCQkJCQkgIHRvcHQtPm9wdCwgIXZhbCk7CiAJCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCmluZGV4IDQ1OGU1YmYuLmQ0ZmE1ZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKQEAgLTE1OCw3ICsxNTgsOCBAQAogCUJVSUxEX0JVR19PTihsZW4gPiBNQVhfRklMVEVSX1NUUl9WQUwpOwkJCQlcCiAJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlICJbIiAjbGVuICJdIiwgI2l0ZW0sCVwKIAkJCQkgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkJIHNpemVvZihmaWVsZC5pdGVtKSwgMCwgRklMVEVSX09USEVSKTsJXAorCQkJCSBzaXplb2YoZmllbGQuaXRlbSksCQkJXAorCQkJCSBpc19zaWduZWRfdHlwZSh0eXBlKSwgRklMVEVSX09USEVSKTsJXAogCWlmIChyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIHJldDsKIApAQCAtMTY4LDggKzE2OSw4IEBACiAJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlICJbIiAjbGVuICJdIiwgI2l0ZW0sCVwKIAkJCQkgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwJCVwKIAkJCQkJICBjb250YWluZXIuaXRlbSksCQlcCi0JCQkJIHNpemVvZihmaWVsZC5jb250YWluZXIuaXRlbSksIDAsCVwKLQkJCQkgRklMVEVSX09USEVSKTsJCQkJXAorCQkJCSBzaXplb2YoZmllbGQuY29udGFpbmVyLml0ZW0pLAkJXAorCQkJCSBpc19zaWduZWRfdHlwZSh0eXBlKSwgRklMVEVSX09USEVSKTsJXAogCWlmIChyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCmluZGV4IDdlY2FiMDYuLjZlYTkwYzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKQEAgLTI4Miw2ICsyODIsMTggQEAKIHN0YXRpYyBpbnQga3JldHByb2JlX2Rpc3BhdGNoZXIoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCisvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLworc3RhdGljIGludCBjaGVja19ldmVudF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFpc2FscGhhKCpuYW1lKSAmJiAqbmFtZSAhPSAnXycpCisJCXJldHVybiAwOworCXdoaWxlICgqKytuYW1lICE9ICdcMCcpIHsKKwkJaWYgKCFpc2FscGhhKCpuYW1lKSAmJiAhaXNkaWdpdCgqbmFtZSkgJiYgKm5hbWUgIT0gJ18nKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCiAvKgogICogQWxsb2NhdGUgbmV3IHRyYWNlX3Byb2JlIGFuZCBpbml0aWFsaXplIGl0IChpbmNsdWRpbmcga3Byb2JlcykuCiAgKi8KQEAgLTI5MywxMCArMzA1LDExIEBACiAJCQkJCSAgICAgaW50IG5hcmdzLCBpbnQgaXNfcmV0dXJuKQogewogCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHA7CisJaW50IHJldCA9IC1FTk9NRU07CiAKIAl0cCA9IGt6YWxsb2MoU0laRU9GX1RSQUNFX1BST0JFKG5hcmdzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKIAlpZiAoc3ltYm9sKSB7CiAJCXRwLT5zeW1ib2wgPSBrc3RyZHVwKHN5bWJvbCwgR0ZQX0tFUk5FTCk7CkBAIC0zMTIsMTQgKzMyNSwyMCBAQAogCWVsc2UKIAkJdHAtPnJwLmtwLnByZV9oYW5kbGVyID0ga3Byb2JlX2Rpc3BhdGNoZXI7CiAKLQlpZiAoIWV2ZW50KQorCWlmICghZXZlbnQgfHwgIWNoZWNrX2V2ZW50X25hbWUoZXZlbnQpKSB7CisJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3I7CisJfQorCiAJdHAtPmNhbGwubmFtZSA9IGtzdHJkdXAoZXZlbnQsIEdGUF9LRVJORUwpOwogCWlmICghdHAtPmNhbGwubmFtZSkKIAkJZ290byBlcnJvcjsKIAotCWlmICghZ3JvdXApCisJaWYgKCFncm91cCB8fCAhY2hlY2tfZXZlbnRfbmFtZShncm91cCkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJvcjsKKwl9CisKIAl0cC0+Y2FsbC5zeXN0ZW0gPSBrc3RyZHVwKGdyb3VwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRwLT5jYWxsLnN5c3RlbSkKIAkJZ290byBlcnJvcjsKQEAgLTMzMCw3ICszNDksNyBAQAogCWtmcmVlKHRwLT5jYWxsLm5hbWUpOwogCWtmcmVlKHRwLT5zeW1ib2wpOwogCWtmcmVlKHRwKTsKLQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX3Byb2JlX2FyZyhzdHJ1Y3QgcHJvYmVfYXJnICphcmcpCkBAIC02OTUsMTAgKzcxNCwxMCBAQAogCWlmICghZXZlbnQpIHsKIAkJLyogTWFrZSBhIG5ldyBldmVudCBuYW1lICovCiAJCWlmIChzeW1ib2wpCi0JCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjQCVzJStsZCIsCisJCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjXyVzXyVsZCIsCiAJCQkJIGlzX3JldHVybiA/ICdyJyA6ICdwJywgc3ltYm9sLCBvZmZzZXQpOwogCQllbHNlCi0JCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjQDB4JXAiLAorCQkJc25wcmludGYoYnVmLCBNQVhfRVZFTlRfTkFNRV9MRU4sICIlY18weCVwIiwKIAkJCQkgaXNfcmV0dXJuID8gJ3InIDogJ3AnLCBhZGRyKTsKIAkJZXZlbnQgPSBidWY7CiAJfQpAQCAtMTE4MiwxMCArMTIwMSwxMSBAQAogI3VuZGVmIFNIT1dfRklFTEQKICNkZWZpbmUgU0hPV19GSUVMRCh0eXBlLCBpdGVtLCBuYW1lKQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDogIiAjdHlwZSAiICVzO1x0IglcCi0JCQkJIm9mZnNldDoldTtcdHNpemU6JXU7XG4iLCBuYW1lLAkJXAorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAlcztcdCIJXAorCQkJCSJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiVkO1xuIiwgbmFtZSxcCiAJCQkJKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSxcCi0JCQkJKHVuc2lnbmVkIGludClzaXplb2YodHlwZSkpOwkJXAorCQkJCSh1bnNpZ25lZCBpbnQpc2l6ZW9mKHR5cGUpLAkJXAorCQkJCWlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCiAJCWlmICghcmV0KQkJCQkJCVwKIAkJCXJldHVybiAwOwkJCQkJXAogCX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3N5bS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2tzeW0uYwppbmRleCBmYWYzN2ZhLi45NDEwM2NkIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3N5bS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMKQEAgLTI2LDEyICsyNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKLSNpbmNsdWRlICJ0cmFjZV9zdGF0LmgiCiAjaW5jbHVkZSAidHJhY2UuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KICNpbmNsdWRlIDxhc20vaHdfYnJlYWtwb2ludC5oPgogCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCiAvKgogICogRm9yIG5vdywgbGV0IHVzIHJlc3RyaWN0IHRoZSBuby4gb2Ygc3ltYm9scyB0cmFjZWQgc2ltdWx0YW5lb3VzbHkgdG8gbnVtYmVyCiAgKiBvZiBhdmFpbGFibGUgaGFyZHdhcmUgYnJlYWtwb2ludCByZWdpc3RlcnMuCkBAIC00NCw3ICs0NSw3IEBACiAJc3RydWN0IHBlcmZfZXZlbnQJKiprc3ltX2hicDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyCWF0dHI7CiAjaWZkZWYgQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIKLQl1bnNpZ25lZCBsb25nCQljb3VudGVyOworCWF0b21pYzY0X3QJCWNvdW50ZXI7CiAjZW5kaWYKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlrc3ltX2hsaXN0OwogfTsKQEAgLTY5LDkgKzcwLDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIG5vZGUsICZrc3ltX2ZpbHRlcl9oZWFkLCBrc3ltX2hsaXN0KSB7Ci0JCWlmICgoZW50cnktPmF0dHIuYnBfYWRkciA9PSBoYnBfaGl0X2FkZHIpICYmCi0JCSAgICAoZW50cnktPmNvdW50ZXIgPD0gTUFYX1VMX0lOVCkpIHsKLQkJCWVudHJ5LT5jb3VudGVyKys7CisJCWlmIChlbnRyeS0+YXR0ci5icF9hZGRyID09IGhicF9oaXRfYWRkcikgeworCQkJYXRvbWljNjRfaW5jKCZlbnRyeS0+Y291bnRlcik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE5Nyw3ICsxOTcsNiBAQAogCWVudHJ5LT5hdHRyLmJwX2FkZHIgPSBhZGRyOwogCWVudHJ5LT5hdHRyLmJwX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzQ7CiAKLQlyZXQgPSAtRUFHQUlOOwogCWVudHJ5LT5rc3ltX2hicCA9IHJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludCgmZW50cnktPmF0dHIsCiAJCQkJCWtzeW1faGJwX2hhbmRsZXIpOwogCkBAIC0zMDAsOCArMjk5LDggQEAKIAkgKiAyOiBlY2hvIDAgPiBrc3ltX3RyYWNlX2ZpbHRlcgogCSAqIDM6IGVjaG8gIio6LS0tIiA+IGtzeW1fdHJhY2VfZmlsdGVyCiAJICovCi0JaWYgKCFidWZbMF0gfHwgIXN0cmNtcChidWYsICIwIikgfHwKLQkgICAgIXN0cmNtcChidWYsICIqOi0tLSIpKSB7CisJaWYgKCFpbnB1dF9zdHJpbmdbMF0gfHwgIXN0cmNtcChpbnB1dF9zdHJpbmcsICIwIikgfHwKKwkgICAgIXN0cmNtcChpbnB1dF9zdHJpbmcsICIqOi0tLSIpKSB7CiAJCV9fa3N5bV90cmFjZV9yZXNldCgpOwogCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKQEAgLTQ0NCwxMDIgKzQ0Myw3NyBAQAogCS5wcmludF9saW5lCT0ga3N5bV90cmFjZV9vdXRwdXQKIH07CiAKLV9faW5pdCBzdGF0aWMgaW50IGluaXRfa3N5bV90cmFjZSh2b2lkKQotewotCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwotCXN0cnVjdCBkZW50cnkgKmVudHJ5OwotCi0JZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7Ci0Ja3N5bV9maWx0ZXJfZW50cnlfY291bnQgPSAwOwotCi0JZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJrc3ltX3RyYWNlX2ZpbHRlciIsIDA2NDQsIGRfdHJhY2VyLAotCQkJCSAgICBOVUxMLCAma3N5bV90cmFjaW5nX2ZvcHMpOwotCWlmICghZW50cnkpCi0JCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCi0JCQkgICAiJ2tzeW1fdHJhY2VfZmlsdGVyJyBmaWxlXG4iKTsKLQotCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJmtzeW1fdHJhY2VyKTsKLX0KLWRldmljZV9pbml0Y2FsbChpbml0X2tzeW1fdHJhY2UpOwotCi0KICNpZmRlZiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUgotc3RhdGljIGludCBrc3ltX3RyYWNlcl9zdGF0X2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICptKQorc3RhdGljIGludCBrc3ltX3Byb2ZpbGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc2VxX3B1dHMobSwgIiAgQWNjZXNzIFR5cGUgIik7Ci0Jc2VxX3B1dHMobSwgIiAgU3ltYm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlclxuIik7Ci0Jc2VxX3B1dHMobSwgIiAgLS0tLS0tLS0tLS0gIik7Ci0Jc2VxX3B1dHMobSwgIiAgLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQga3N5bV90cmFjZXJfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqc3RhdCA9IHY7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OwogCWludCBhY2Nlc3NfdHlwZSA9IDA7CiAJY2hhciBmbl9uYW1lW0tTWU1fTkFNRV9MRU5dOwogCi0JZW50cnkgPSBobGlzdF9lbnRyeShzdGF0LCBzdHJ1Y3QgdHJhY2Vfa3N5bSwga3N5bV9obGlzdCk7CisJc2VxX3B1dHMobSwgIiAgQWNjZXNzIFR5cGUgIik7CisJc2VxX3B1dHMobSwgIiAgU3ltYm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlclxuIik7CisJc2VxX3B1dHMobSwgIiAgLS0tLS0tLS0tLS0gIik7CisJc2VxX3B1dHMobSwgIiAgLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLVxuIik7CiAKLQlhY2Nlc3NfdHlwZSA9IGVudHJ5LT5hdHRyLmJwX3R5cGU7CisJcmN1X3JlYWRfbG9jaygpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgbm9kZSwgJmtzeW1fZmlsdGVyX2hlYWQsIGtzeW1faGxpc3QpIHsKIAotCXN3aXRjaCAoYWNjZXNzX3R5cGUpIHsKLQljYXNlIEhXX0JSRUFLUE9JTlRfUjoKLQkJc2VxX3B1dHMobSwgIiAgUiAgICAgICAgICAgIik7Ci0JCWJyZWFrOwotCWNhc2UgSFdfQlJFQUtQT0lOVF9XOgotCQlzZXFfcHV0cyhtLCAiICBXICAgICAgICAgICAiKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19CUkVBS1BPSU5UX1IgfCBIV19CUkVBS1BPSU5UX1c6Ci0JCXNlcV9wdXRzKG0sICIgIFJXICAgICAgICAgICIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzZXFfcHV0cyhtLCAiICBOQSAgICAgICAgICAiKTsKKwkJYWNjZXNzX3R5cGUgPSBlbnRyeS0+YXR0ci5icF90eXBlOworCisJCXN3aXRjaCAoYWNjZXNzX3R5cGUpIHsKKwkJY2FzZSBIV19CUkVBS1BPSU5UX1I6CisJCQlzZXFfcHV0cyhtLCAiICBSICAgICAgICAgICAiKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0JSRUFLUE9JTlRfVzoKKwkJCXNlcV9wdXRzKG0sICIgIFcgICAgICAgICAgICIpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfQlJFQUtQT0lOVF9SIHwgSFdfQlJFQUtQT0lOVF9XOgorCQkJc2VxX3B1dHMobSwgIiAgUlcgICAgICAgICAgIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNlcV9wdXRzKG0sICIgIE5BICAgICAgICAgICIpOworCQl9CisKKwkJaWYgKGxvb2t1cF9zeW1ib2xfbmFtZShlbnRyeS0+YXR0ci5icF9hZGRyLCBmbl9uYW1lKSA+PSAwKQorCQkJc2VxX3ByaW50ZihtLCAiICAlLTM2cyIsIGZuX25hbWUpOworCQllbHNlCisJCQlzZXFfcHJpbnRmKG0sICIgICUtMzZzIiwgIjxOQT4iKTsKKwkJc2VxX3ByaW50ZihtLCAiICUxNWxsdVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXRvbWljNjRfcmVhZCgmZW50cnktPmNvdW50ZXIpKTsKIAl9Ci0KLQlpZiAobG9va3VwX3N5bWJvbF9uYW1lKGVudHJ5LT5hdHRyLmJwX2FkZHIsIGZuX25hbWUpID49IDApCi0JCXNlcV9wcmludGYobSwgIiAgJS0zNnMiLCBmbl9uYW1lKTsKLQllbHNlCi0JCXNlcV9wcmludGYobSwgIiAgJS0zNnMiLCAiPE5BPiIpOwotCXNlcV9wcmludGYobSwgIiAlMTVsdVxuIiwgZW50cnktPmNvdW50ZXIpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkICprc3ltX3RyYWNlcl9zdGF0X3N0YXJ0KHN0cnVjdCB0cmFjZXJfc3RhdCAqdHJhY2UpCitzdGF0aWMgaW50IGtzeW1fcHJvZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIGtzeW1fZmlsdGVyX2hlYWQuZmlyc3Q7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGtzeW1fcHJvZmlsZV9zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgKgota3N5bV90cmFjZXJfc3RhdF9uZXh0KHZvaWQgKnYsIGludCBpZHgpCi17Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnN0YXQgPSB2OwotCi0JcmV0dXJuIHN0YXQtPm5leHQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VyX3N0YXQga3N5bV90cmFjZXJfc3RhdHMgPSB7Ci0JLm5hbWUgPSAia3N5bV90cmFjZXIiLAotCS5zdGF0X3N0YXJ0ID0ga3N5bV90cmFjZXJfc3RhdF9zdGFydCwKLQkuc3RhdF9uZXh0ID0ga3N5bV90cmFjZXJfc3RhdF9uZXh0LAotCS5zdGF0X2hlYWRlcnMgPSBrc3ltX3RyYWNlcl9zdGF0X2hlYWRlcnMsCi0JLnN0YXRfc2hvdyA9IGtzeW1fdHJhY2VyX3N0YXRfc2hvdworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3N5bV9wcm9maWxlX2ZvcHMgPSB7CisJLm9wZW4JCT0ga3N5bV9wcm9maWxlX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07Ci0KLV9faW5pdCBzdGF0aWMgaW50IGtzeW1fdHJhY2VyX3N0YXRfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdpc3Rlcl9zdGF0X3RyYWNlcigma3N5bV90cmFjZXJfc3RhdHMpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyICIKLQkJCQkgICAgImtzeW0gdHJhY2VyIHN0YXRzXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1mc19pbml0Y2FsbChrc3ltX3RyYWNlcl9zdGF0X2luaXQpOwogI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSICovCisKK19faW5pdCBzdGF0aWMgaW50IGluaXRfa3N5bV90cmFjZSh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOworCisJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CisKKwl0cmFjZV9jcmVhdGVfZmlsZSgia3N5bV90cmFjZV9maWx0ZXIiLCAwNjQ0LCBkX3RyYWNlciwKKwkJCSAgTlVMTCwgJmtzeW1fdHJhY2luZ19mb3BzKTsKKworI2lmZGVmIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSCisJdHJhY2VfY3JlYXRlX2ZpbGUoImtzeW1fcHJvZmlsZSIsIDA0NDQsIGRfdHJhY2VyLAorCQkJICBOVUxMLCAma3N5bV9wcm9maWxlX2ZvcHMpOworI2VuZGlmCisKKwlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZrc3ltX3RyYWNlcik7Cit9CitkZXZpY2VfaW5pdGNhbGwoaW5pdF9rc3ltX3RyYWNlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCmluZGV4IGY2NjkzOTYuLmE3OTc0YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYwpAQCAtOTMsNiArOTMsNyBAQAogCS53YXJuaW5nX3N5bWJvbAkJPSBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wsCiAJLnN0YWNrCQkJPSBiYWNrdHJhY2Vfc3RhY2ssCiAJLmFkZHJlc3MJCT0gYmFja3RyYWNlX2FkZHJlc3MsCisJLndhbGtfc3RhY2sJCT0gcHJpbnRfY29udGV4dF9zdGFjaywKIH07CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2xpYi9zdHJpbmcuYyBiL2xpYi9zdHJpbmcuYwppbmRleCBhZmNlOTZhLi45Zjc1YjRlIDEwMDY0NAotLS0gYS9saWIvc3RyaW5nLmMKKysrIGIvbGliL3N0cmluZy5jCkBAIC0zMzgsMTAgKzMzOCwxMCBAQAogI2VuZGlmCiAKIC8qKgotICogc2tpcF9zcGFjZXMgLSBSZW1vdmVzIGxlYWRpbmcgd2hpdGVzcGFjZSBmcm9tIEBzLgotICogQHM6IFRoZSBzdHJpbmcgdG8gYmUgc3RyaXBwZWQuCisgKiBza2lwX3NwYWNlcyAtIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gQHN0ci4KKyAqIEBzdHI6IFRoZSBzdHJpbmcgdG8gYmUgc3RyaXBwZWQuCiAgKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiBAcy4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gQHN0ci4KICAqLwogY2hhciAqc2tpcF9zcGFjZXMoY29uc3QgY2hhciAqc3RyKQogewpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggZWU5ZjNlMC4uMTdiODk0NyAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0yNTMsNyArMjUzLDcgQEAKIAogY29uZmlnIEhXUE9JU09OX0lOSkVDVAogCXRyaXN0YXRlICJIV1BvaXNvbiBwYWdlcyBpbmplY3RvciIKLQlkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFICYmIERFQlVHX0tFUk5FTAorCWRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgJiYgREVCVUdfS0VSTkVMICYmIFBST0NfRlMKIAlzZWxlY3QgUFJPQ19QQUdFX01PTklUT1IKIAogY29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1MKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDZhMDQ2NmUuLjE3Mjk5ZmQgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNTIsNiArNTIsOCBAQAogCiBhdG9taWNfbG9uZ190IG1jZV9iYWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19IV1BPSVNPTl9JTkpFQ1QpIHx8IGRlZmluZWQoQ09ORklHX0hXUE9JU09OX0lOSkVDVF9NT0RVTEUpCisKIHUzMiBod3BvaXNvbl9maWx0ZXJfZW5hYmxlID0gMDsKIHUzMiBod3BvaXNvbl9maWx0ZXJfZGV2X21ham9yID0gfjBVOwogdTMyIGh3cG9pc29uX2ZpbHRlcl9kZXZfbWlub3IgPSB+MFU7CkBAIC0xNjQsNiArMTY2LDEzIEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbHNlCitpbnQgaHdwb2lzb25fZmlsdGVyKHN0cnVjdCBwYWdlICpwKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKIEVYUE9SVF9TWU1CT0xfR1BMKGh3cG9pc29uX2ZpbHRlcik7CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggZDljNzdiMi4uZWUyMjk4OSAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMTA0Myw2ICsxMDQzLDQ2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRvX21tYXBfcGdvZmYpOwogCitTWVNDQUxMX0RFRklORTYobW1hcF9wZ29mZiwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgbGVuLAorCQl1bnNpZ25lZCBsb25nLCBwcm90LCB1bnNpZ25lZCBsb25nLCBmbGFncywKKwkJdW5zaWduZWQgbG9uZywgZmQsIHVuc2lnbmVkIGxvbmcsIHBnb2ZmKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHJldHZhbCA9IC1FQkFERjsKKworCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKKwkJaWYgKHVubGlrZWx5KGZsYWdzICYgTUFQX0hVR0VUTEIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZpbGUgPSBmZ2V0KGZkKTsKKwkJaWYgKCFmaWxlKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChmbGFncyAmIE1BUF9IVUdFVExCKSB7CisJCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IE5VTEw7CisJCS8qCisJCSAqIFZNX05PUkVTRVJWRSBpcyB1c2VkIGJlY2F1c2UgdGhlIHJlc2VydmF0aW9ucyB3aWxsIGJlCisJCSAqIHRha2VuIHdoZW4gdm1fb3BzLT5tbWFwKCkgaXMgY2FsbGVkCisJCSAqIEEgZHVtbXkgdXNlciB2YWx1ZSBpcyB1c2VkIGJlY2F1c2Ugd2UgYXJlIG5vdCBsb2NraW5nCisJCSAqIG1lbW9yeSBzbyBubyBhY2NvdW50aW5nIGlzIG5lY2Vzc2FyeQorCQkgKi8KKwkJbGVuID0gQUxJR04obGVuLCBodWdlX3BhZ2Vfc2l6ZSgmZGVmYXVsdF9oc3RhdGUpKTsKKwkJZmlsZSA9IGh1Z2V0bGJfZmlsZV9zZXR1cChIVUdFVExCX0FOT05fRklMRSwgbGVuLCBWTV9OT1JFU0VSVkUsCisJCQkJCQkmdXNlciwgSFVHRVRMQl9BTk9OSFVHRV9JTk9ERSk7CisJCWlmIChJU19FUlIoZmlsZSkpCisJCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKKwl9CisKKwlmbGFncyAmPSB+KE1BUF9FWEVDVVRBQkxFIHwgTUFQX0RFTllXUklURSk7CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXJldHZhbCA9IGRvX21tYXBfcGdvZmYoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYpOworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJaWYgKGZpbGUpCisJCWZwdXQoZmlsZSk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKwogLyoKICAqIFNvbWUgc2hhcmVkIG1hcHBpZ25zIHdpbGwgd2FudCB0aGUgcGFnZXMgbWFya2VkIHJlYWQtb25seQogICogdG8gdHJhY2sgd3JpdGUgZXZlbnRzLiBJZiBzbywgd2UnbGwgZG93bmdyYWRlIHZtX3BhZ2VfcHJvdApkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggODY4Nzk3My4uMTc3NzM4NiAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC00MzIsNiArNDMyLDcgQEAKIAkvKgogCSAqIE9rLCBsb29rcyBnb29kIC0gbGV0IGl0IHJpcC4KIAkgKi8KKwlmbHVzaF9pY2FjaGVfcmFuZ2UobW0tPmJyaywgYnJrKTsKIAlyZXR1cm4gbW0tPmJyayA9IGJyazsKIH0KIApAQCAtMTM1MywxMCArMTM1NCwxNCBAQAogc2hhcmU6CiAJYWRkX3ZtYV90b19tbShjdXJyZW50LT5tbSwgdm1hKTsKIAotCXVwX3dyaXRlKCZub21tdV9yZWdpb25fc2VtKTsKKwkvKiB3ZSBmbHVzaCB0aGUgcmVnaW9uIGZyb20gdGhlIGljYWNoZSBvbmx5IHdoZW4gdGhlIGZpcnN0IGV4ZWN1dGFibGUKKwkgKiBtYXBwaW5nIG9mIGl0IGlzIG1hZGUgICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDICYmICFyZWdpb24tPnZtX2ljYWNoZV9mbHVzaGVkKSB7CisJCWZsdXNoX2ljYWNoZV9yYW5nZShyZWdpb24tPnZtX3N0YXJ0LCByZWdpb24tPnZtX2VuZCk7CisJCXJlZ2lvbi0+dm1faWNhY2hlX2ZsdXNoZWQgPSB0cnVlOworCX0KIAotCWlmIChwcm90ICYgUFJPVF9FWEVDKQotCQlmbHVzaF9pY2FjaGVfcmFuZ2UocmVzdWx0LCByZXN1bHQgKyBsZW4pOworCXVwX3dyaXRlKCZub21tdV9yZWdpb25fc2VtKTsKIAogCWtsZWF2ZSgiID0gJWx4IiwgcmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTM5OCw2ICsxNDAzLDMxIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRvX21tYXBfcGdvZmYpOwogCitTWVNDQUxMX0RFRklORTYobW1hcF9wZ29mZiwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgbGVuLAorCQl1bnNpZ25lZCBsb25nLCBwcm90LCB1bnNpZ25lZCBsb25nLCBmbGFncywKKwkJdW5zaWduZWQgbG9uZywgZmQsIHVuc2lnbmVkIGxvbmcsIHBnb2ZmKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHJldHZhbCA9IC1FQkFERjsKKworCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKKwkJZmlsZSA9IGZnZXQoZmQpOworCQlpZiAoIWZpbGUpCisJCQlnb3RvIG91dDsKKwl9CisKKwlmbGFncyAmPSB+KE1BUF9FWEVDVVRBQkxFIHwgTUFQX0RFTllXUklURSk7CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXJldHZhbCA9IGRvX21tYXBfcGdvZmYoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYpOworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJaWYgKGZpbGUpCisJCWZwdXQoZmlsZSk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKwogLyoKICAqIHNwbGl0IGEgdm1hIGludG8gdHdvIHBpZWNlcyBhdCBhZGRyZXNzICdhZGRyJywgYSBuZXcgdm1hIGlzIGFsbG9jYXRlZCBlaXRoZXIKICAqIGZvciB0aGUgZmlyc3QgcGFydCBvciB0aGUgdGFpbC4KQEAgLTE4OTEsOSArMTkyMSwxMSBAQAogCiAJCS8qIG9ubHkgcmVhZCBvciB3cml0ZSBtYXBwaW5ncyB3aGVyZSBpdCBpcyBwZXJtaXR0ZWQgKi8KIAkJaWYgKHdyaXRlICYmIHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlXUklURSkKLQkJCWxlbiAtPSBjb3B5X3RvX3VzZXIoKHZvaWQgKikgYWRkciwgYnVmLCBsZW4pOworCQkJY29weV90b191c2VyX3BhZ2Uodm1hLCBOVUxMLCBhZGRyLAorCQkJCQkgKHZvaWQgKikgYWRkciwgYnVmLCBsZW4pOwogCQllbHNlIGlmICghd3JpdGUgJiYgdm1hLT52bV9mbGFncyAmIFZNX01BWVJFQUQpCi0JCQlsZW4gLT0gY29weV9mcm9tX3VzZXIoYnVmLCAodm9pZCAqKSBhZGRyLCBsZW4pOworCQkJY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIE5VTEwsIGFkZHIsCisJCQkJCSAgICBidWYsICh2b2lkICopIGFkZHIsIGxlbik7CiAJCWVsc2UKIAkJCWxlbiA9IDA7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA0ZTg2OTY1Li40ZTlmNWNjIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rbWVtLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KQEAgLTI0MDEsMTMgKzI0MDIsMTQgQEAKIHsKIAljaGFyIHNhdmVkX3N0cmluZ1tOVU1BX1pPTkVMSVNUX09SREVSX0xFTl07CiAJaW50IHJldDsKKwlzdGF0aWMgREVGSU5FX01VVEVYKHpsX29yZGVyX211dGV4KTsKIAorCW11dGV4X2xvY2soJnpsX29yZGVyX211dGV4KTsKIAlpZiAod3JpdGUpCi0JCXN0cm5jcHkoc2F2ZWRfc3RyaW5nLCAoY2hhciopdGFibGUtPmRhdGEsCi0JCQlOVU1BX1pPTkVMSVNUX09SREVSX0xFTik7CisJCXN0cmNweShzYXZlZF9zdHJpbmcsIChjaGFyKil0YWJsZS0+ZGF0YSk7CiAJcmV0ID0gcHJvY19kb3N0cmluZyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVuZ3RoLCBwcG9zKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAlpZiAod3JpdGUpIHsKIAkJaW50IG9sZHZhbCA9IHVzZXJfem9uZWxpc3Rfb3JkZXI7CiAJCWlmIChfX3BhcnNlX251bWFfem9uZWxpc3Rfb3JkZXIoKGNoYXIqKXRhYmxlLT5kYXRhKSkgewpAQCAtMjQyMCw3ICsyNDIyLDkgQEAKIAkJfSBlbHNlIGlmIChvbGR2YWwgIT0gdXNlcl96b25lbGlzdF9vcmRlcikKIAkJCWJ1aWxkX2FsbF96b25lbGlzdHMoKTsKIAl9Ci0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ6bF9vcmRlcl9tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC01MDA4LDIzICs1MDEyLDY1IEBACiBpbnQgc2V0X21pZ3JhdGV0eXBlX2lzb2xhdGUoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqY3Vycl9wYWdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBmbiwgaXRlcjsKKwl1bnNpZ25lZCBsb25nIGltbW9iaWxlID0gMDsKKwlzdHJ1Y3QgbWVtb3J5X2lzb2xhdGVfbm90aWZ5IGFyZzsKKwlpbnQgbm90aWZpZXJfcmV0OwogCWludCByZXQgPSAtRUJVU1k7CiAJaW50IHpvbmVfaWR4OwogCiAJem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAl6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKLQkvKgotCSAqIEluIGZ1dHVyZSwgbW9yZSBtaWdyYXRlIHR5cGVzIHdpbGwgYmUgYWJsZSB0byBiZSBpc29sYXRpb24gdGFyZ2V0LgotCSAqLwotCWlmIChnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpICE9IE1JR1JBVEVfTU9WQUJMRSAmJgotCSAgICB6b25lX2lkeCAhPSBaT05FX01PVkFCTEUpCisJaWYgKGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSkgPT0gTUlHUkFURV9NT1ZBQkxFIHx8CisJICAgIHpvbmVfaWR4ID09IFpPTkVfTU9WQUJMRSkgeworCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKLQlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7Ci0JbW92ZV9mcmVlcGFnZXNfYmxvY2soem9uZSwgcGFnZSwgTUlHUkFURV9JU09MQVRFKTsKLQlyZXQgPSAwOworCX0KKworCXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCWFyZy5zdGFydF9wZm4gPSBwZm47CisJYXJnLm5yX3BhZ2VzID0gcGFnZWJsb2NrX25yX3BhZ2VzOworCWFyZy5wYWdlc19mb3VuZCA9IDA7CisKKwkvKgorCSAqIEl0IG1heSBiZSBwb3NzaWJsZSB0byBpc29sYXRlIGEgcGFnZWJsb2NrIGV2ZW4gaWYgdGhlCisJICogbWlncmF0ZXR5cGUgaXMgbm90IE1JR1JBVEVfTU9WQUJMRS4gVGhlIG1lbW9yeSBpc29sYXRpb24KKwkgKiBub3RpZmllciBjaGFpbiBpcyB1c2VkIGJ5IGJhbGxvb24gZHJpdmVycyB0byByZXR1cm4gdGhlCisJICogbnVtYmVyIG9mIHBhZ2VzIGluIGEgcmFuZ2UgdGhhdCBhcmUgaGVsZCBieSB0aGUgYmFsbG9vbgorCSAqIGRyaXZlciB0byBzaHJpbmsgbWVtb3J5LiBJZiBhbGwgdGhlIHBhZ2VzIGFyZSBhY2NvdW50ZWQgZm9yCisJICogYnkgYmFsbG9vbnMsIGFyZSBmcmVlLCBvciBvbiB0aGUgTFJVLCBpc29sYXRpb24gY2FuIGNvbnRpbnVlLgorCSAqIExhdGVyLCBmb3IgZXhhbXBsZSwgd2hlbiBtZW1vcnkgaG90cGx1ZyBub3RpZmllciBydW5zLCB0aGVzZQorCSAqIHBhZ2VzIHJlcG9ydGVkIGFzICJjYW4gYmUgaXNvbGF0ZWQiIHNob3VsZCBiZSBpc29sYXRlZChmcmVlZCkKKwkgKiBieSB0aGUgYmFsbG9vbiBkcml2ZXIgdGhyb3VnaCB0aGUgbWVtb3J5IG5vdGlmaWVyIGNoYWluLgorCSAqLworCW5vdGlmaWVyX3JldCA9IG1lbW9yeV9pc29sYXRlX25vdGlmeShNRU1fSVNPTEFURV9DT1VOVCwgJmFyZyk7CisJbm90aWZpZXJfcmV0ID0gbm90aWZpZXJfdG9fZXJybm8obm90aWZpZXJfcmV0KTsKKwlpZiAobm90aWZpZXJfcmV0IHx8ICFhcmcucGFnZXNfZm91bmQpCisJCWdvdG8gb3V0OworCisJZm9yIChpdGVyID0gcGZuOyBpdGVyIDwgKHBmbiArIHBhZ2VibG9ja19ucl9wYWdlcyk7IGl0ZXIrKykgeworCQlpZiAoIXBmbl92YWxpZF93aXRoaW4ocGZuKSkKKwkJCWNvbnRpbnVlOworCisJCWN1cnJfcGFnZSA9IHBmbl90b19wYWdlKGl0ZXIpOworCQlpZiAoIXBhZ2VfY291bnQoY3Vycl9wYWdlKSB8fCBQYWdlTFJVKGN1cnJfcGFnZSkpCisJCQljb250aW51ZTsKKworCQlpbW1vYmlsZSsrOworCX0KKworCWlmIChhcmcucGFnZXNfZm91bmQgPT0gaW1tb2JpbGUpCisJCXJldCA9IDA7CisKIG91dDoKKwlpZiAoIXJldCkgeworCQlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CisJCW1vdmVfZnJlZXBhZ2VzX2Jsb2NrKHpvbmUsIHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCWlmICghcmV0KQogCQlkcmFpbl9hbGxfcGFnZXMoKTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCA3ZDQxZjE1Li43NDUxYmRhIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC02NTQsNyArNjU0LDcgQEAKIAogCQlsMyA9IHMtPmNzX2NhY2hlcC0+bm9kZWxpc3RzW3FdOwogCQlpZiAoIWwzIHx8IE9GRl9TTEFCKHMtPmNzX2NhY2hlcCkpCi0JCQlyZXR1cm47CisJCQljb250aW51ZTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmwzLT5saXN0X2xvY2ssICZvbl9zbGFiX2wzX2tleSk7CiAJCWFsYyA9IGwzLT5hbGllbjsKIAkJLyoKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQkgKiBmb3IgYWxsb2NfYWxpZW5fY2FjaGUsCiAJCSAqLwogCQlpZiAoIWFsYyB8fCAodW5zaWduZWQgbG9uZylhbGMgPT0gQkFEX0FMSUVOX01BR0lDKQotCQkJcmV0dXJuOworCQkJY29udGludWU7CiAJCWZvcl9lYWNoX25vZGUocikgewogCQkJaWYgKGFsY1tyXSkKIAkJCQlsb2NrZGVwX3NldF9jbGFzcygmYWxjW3JdLT5sb2NrLApkaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jCmluZGV4IGIzNzdjZTQuLjdjMzVhZDkgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYworKysgYi9tbS91dGlsLmMKQEAgLTQsMTAgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1hbi5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKQEAgLTI3Miw0NiArMjY4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdldF91c2VyX3BhZ2VzX2Zhc3QpOwogCi1TWVNDQUxMX0RFRklORTYobW1hcF9wZ29mZiwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgbGVuLAotCQl1bnNpZ25lZCBsb25nLCBwcm90LCB1bnNpZ25lZCBsb25nLCBmbGFncywKLQkJdW5zaWduZWQgbG9uZywgZmQsIHVuc2lnbmVkIGxvbmcsIHBnb2ZmKQotewotCXN0cnVjdCBmaWxlICogZmlsZSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyByZXR2YWwgPSAtRUJBREY7Ci0KLQlpZiAoIShmbGFncyAmIE1BUF9BTk9OWU1PVVMpKSB7Ci0JCWlmICh1bmxpa2VseShmbGFncyAmIE1BUF9IVUdFVExCKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlmaWxlID0gZmdldChmZCk7Ci0JCWlmICghZmlsZSkKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoZmxhZ3MgJiBNQVBfSFVHRVRMQikgewotCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBOVUxMOwotCQkvKgotCQkgKiBWTV9OT1JFU0VSVkUgaXMgdXNlZCBiZWNhdXNlIHRoZSByZXNlcnZhdGlvbnMgd2lsbCBiZQotCQkgKiB0YWtlbiB3aGVuIHZtX29wcy0+bW1hcCgpIGlzIGNhbGxlZAotCQkgKiBBIGR1bW15IHVzZXIgdmFsdWUgaXMgdXNlZCBiZWNhdXNlIHdlIGFyZSBub3QgbG9ja2luZwotCQkgKiBtZW1vcnkgc28gbm8gYWNjb3VudGluZyBpcyBuZWNlc3NhcnkKLQkJICovCi0JCWxlbiA9IEFMSUdOKGxlbiwgaHVnZV9wYWdlX3NpemUoJmRlZmF1bHRfaHN0YXRlKSk7Ci0JCWZpbGUgPSBodWdldGxiX2ZpbGVfc2V0dXAoSFVHRVRMQl9BTk9OX0ZJTEUsIGxlbiwgVk1fTk9SRVNFUlZFLAotCQkJCQkJJnVzZXIsIEhVR0VUTEJfQU5PTkhVR0VfSU5PREUpOwotCQlpZiAoSVNfRVJSKGZpbGUpKQotCQkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7Ci0JfQotCi0JZmxhZ3MgJj0gfihNQVBfRVhFQ1VUQUJMRSB8IE1BUF9ERU5ZV1JJVEUpOwotCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlyZXR2YWwgPSBkb19tbWFwX3Bnb2ZmKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIHBnb2ZmKTsKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQotCWlmIChmaWxlKQotCQlmcHV0KGZpbGUpOwotb3V0OgotCXJldHVybiByZXR2YWw7Ci19Ci0KIC8qIFRyYWNlcG9pbnRzIGRlZmluaXRpb25zLiAqLwogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttYWxsb2MpOwogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2MpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggNTY5NzUwMC4uMThlN2Y1YSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC03NzAsNyArNzcwLDcgQEAKIAogCWhpZCA9IGhpZF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoSVNfRVJSKGhpZCkpCi0JCXJldHVybiBQVFJfRVJSKHNlc3Npb24tPmhpZCk7CisJCXJldHVybiBQVFJfRVJSKGhpZCk7CiAKIAlzZXNzaW9uLT5oaWQgPSBoaWQ7CiAJc2Vzc2lvbi0+cmVxID0gcmVxOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IDUxMjliODguLjExMjBjZjEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTEyMTIsNiArMTIxMiw3IEBACiAJYmhfbG9ja19zb2NrKHNrKTsKIAlpZiAobDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCA+PSBsMmNhcF9waShzayktPnJlbW90ZV9tYXhfdHgpIHsKIAkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShsMmNhcF9waShzayktPmNvbm4sIHNrKTsKKwkJYmhfdW5sb2NrX3NvY2soc2spOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNDM1LDggKzM0MzYsOCBAQAogCQkJICAgIChwaS0+dW5hY2tlZF9mcmFtZXMgPiAwKSkKIAkJCQlfX21vZF9yZXRyYW5zX3RpbWVyKCk7CiAKLQkJCWwyY2FwX2VydG1fc2VuZChzayk7CiAJCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKKwkJCWwyY2FwX2VydG1fc2VuZChzayk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTM0NzEsOSArMzQ3Miw5IEBACiAJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOwogCiAJCWlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9QT0xMKSB7Ci0JCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lKHNrLCB0eF9zZXEpOwogCQkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CiAJCQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisJCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lKHNrLCB0eF9zZXEpOwogCQkJbDJjYXBfZXJ0bV9zZW5kKHNrKTsKIAkJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CiAJCQkJcGktPnNyZWpfc2F2ZV9yZXFzZXEgPSB0eF9zZXE7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IGEyM2I0NWYuLmRlMGMyYzcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0yNTAsOCArMjUwLDcgQEAKIAlfX3U2NCBjb3VudDsJCS8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovCiAJX191NjQgc29mYXI7CQkvKiBIb3cgbWFueSBwa3RzIHdlJ3ZlIHNlbnQgc28gZmFyICovCiAJX191NjQgdHhfYnl0ZXM7CQkvKiBIb3cgbWFueSBieXRlcyB3ZSd2ZSB0cmFuc21pdHRlZCAqLwotCV9fdTY0IGVycm9yczsJCS8qIEVycm9ycyB3aGVuIHRyeWluZyB0byB0cmFuc21pdCwKLQkJCQkgICBwa3RzIHdpbGwgYmUgcmUtc2VudCAqLworCV9fdTY0IGVycm9yczsJCS8qIEVycm9ycyB3aGVuIHRyeWluZyB0byB0cmFuc21pdCwgKi8KIAogCS8qIHJ1bnRpbWUgY291bnRlcnMgcmVsYXRpbmcgdG8gY2xvbmVfc2tiICovCiAKQEAgLTM0NjUsNiArMzQ2NCwxMiBAQAogCQlwa3RfZGV2LT5zZXFfbnVtKys7CiAJCXBrdF9kZXYtPnR4X2J5dGVzICs9IHBrdF9kZXYtPmxhc3RfcGt0X3NpemU7CiAJCWJyZWFrOworCWNhc2UgTkVUX1hNSVRfRFJPUDoKKwljYXNlIE5FVF9YTUlUX0NOOgorCWNhc2UgTkVUX1hNSVRfUE9MSUNFRDoKKwkJLyogc2tiIGhhcyBiZWVuIGNvbnN1bWVkICovCisJCXBrdF9kZXYtPmVycm9ycysrOworCQlicmVhazsKIAlkZWZhdWx0OiAvKiBEcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gcmV0dXJuIG90aGVyIHZhbHVlcyEgKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByX2luZm8oInBrdGdlbjogJXMgeG1pdCBlcnJvcjogJWRcbiIsCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm9iZS5jIGIvbmV0L2RjY3AvcHJvYmUuYwppbmRleCBkYzMyODQyLi5hMTM2MmRjIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9wcm9iZS5jCisrKyBiL25ldC9kY2NwL3Byb2JlLmMKQEAgLTQzLDcgKzQzLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIHByb2NuYW1lW10gPSAiZGNjcHByb2JlIjsKIAogc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IGtmaWZvCSAgKmZpZm87CisJc3RydWN0IGtmaWZvCSAgZmlmbzsKIAlzcGlubG9ja190CSAgbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXN0cnVjdCB0aW1lc3BlYwkgIHRzdGFydDsKQEAgLTY3LDcgKzY3LDcgQEAKIAlsZW4gKz0gdnNjbnByaW50Zih0YnVmK2xlbiwgc2l6ZW9mKHRidWYpLWxlbiwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7CiAKLQlrZmlmb19wdXQoZGNjcHcuZmlmbywgdGJ1ZiwgbGVuKTsKKwlrZmlmb19pbl9sb2NrZWQoJmRjY3B3LmZpZm8sIHRidWYsIGxlbiwgJmRjY3B3LmxvY2spOwogCXdha2VfdXAoJmRjY3B3LndhaXQpOwogfQogCkBAIC0xMDksNyArMTA5LDcgQEAKIAogc3RhdGljIGludCBkY2NwcHJvYmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlrZmlmb19yZXNldChkY2Nwdy5maWZvKTsKKwlrZmlmb19yZXNldCgmZGNjcHcuZmlmbyk7CiAJZ2V0bnN0aW1lb2ZkYXkoJmRjY3B3LnRzdGFydCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRjY3B3LndhaXQsCi0JCQkJCSBfX2tmaWZvX2xlbihkY2Nwdy5maWZvKSAhPSAwKTsKKwkJCQkJIGtmaWZvX2xlbigmZGNjcHcuZmlmbykgIT0gMCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9mcmVlOwogCi0JY250ID0ga2ZpZm9fZ2V0KGRjY3B3LmZpZm8sIHRidWYsIGxlbik7CisJY250ID0ga2ZpZm9fb3V0X2xvY2tlZCgmZGNjcHcuZmlmbywgdGJ1ZiwgbGVuLCAmZGNjcHcubG9jayk7CiAJZXJyb3IgPSBjb3B5X3RvX3VzZXIoYnVmLCB0YnVmLCBjbnQpID8gLUVGQVVMVCA6IDA7CiAKIG91dF9mcmVlOgpAQCAtMTU2LDEwICsxNTYsOCBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGNjcHcud2FpdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmRjY3B3LmxvY2spOwotCWRjY3B3LmZpZm8gPSBrZmlmb19hbGxvYyhidWZzaXplLCBHRlBfS0VSTkVMLCAmZGNjcHcubG9jayk7Ci0JaWYgKElTX0VSUihkY2Nwdy5maWZvKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGNjcHcuZmlmbyk7Ci0KKwlpZiAoa2ZpZm9fYWxsb2MoJmRjY3B3LmZpZm8sIGJ1ZnNpemUsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gcmV0OwogCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCBwcm9jbmFtZSwgU19JUlVTUiwgJmRjY3Bwcm9iZV9mb3BzKSkKIAkJZ290byBlcnIwOwogCkBAIC0xNzIsMTQgKzE3MCwxNCBAQAogZXJyMToKIAlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCBwcm9jbmFtZSk7CiBlcnIwOgotCWtmaWZvX2ZyZWUoZGNjcHcuZmlmbyk7CisJa2ZpZm9fZnJlZSgmZGNjcHcuZmlmbyk7CiAJcmV0dXJuIHJldDsKIH0KIG1vZHVsZV9pbml0KGRjY3Bwcm9iZV9pbml0KTsKIAogc3RhdGljIF9fZXhpdCB2b2lkIGRjY3Bwcm9iZV9leGl0KHZvaWQpCiB7Ci0Ja2ZpZm9fZnJlZShkY2Nwdy5maWZvKTsKKwlrZmlmb19mcmVlKCZkY2Nwdy5maWZvKTsKIAlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCBwcm9jbmFtZSk7CiAJdW5yZWdpc3Rlcl9qcHJvYmUoJmRjY3Bfc2VuZF9wcm9iZSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA1Y2RiYzEwLi4wNDBjNGYwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xMzk3LDYgKzEzOTcsNyBAQAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBQ0NFUFRfU09VUkNFX1JPVVRFLAogCQkJCQkiYWNjZXB0X3NvdXJjZV9yb3V0ZSIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBQ0NFUFRfTE9DQUwsICJhY2NlcHRfbG9jYWwiKSwKKwkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoU1JDX1ZNQVJLLCAic3JjX3ZhbGlkX21hcmsiKSwKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoUFJPWFlfQVJQLCAicHJveHlfYXJwIiksCiAJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKE1FRElVTV9JRCwgIm1lZGl1bV9pZCIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShCT09UUF9SRUxBWSwgImJvb3RwX3JlbGF5IiksCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDMzMjMxNjguLjgyZGJmNzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0yNTIsNiArMjUyLDggQEAKIAkJbm9fYWRkciA9IGluX2Rldi0+aWZhX2xpc3QgPT0gTlVMTDsKIAkJcnBmID0gSU5fREVWX1JQRklMVEVSKGluX2Rldik7CiAJCWFjY2VwdF9sb2NhbCA9IElOX0RFVl9BQ0NFUFRfTE9DQUwoaW5fZGV2KTsKKwkJaWYgKG1hcmsgJiYgIUlOX0RFVl9TUkNfVk1BUksoaW5fZGV2KSkKKwkJCWZsLm1hcmsgPSAwOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCmluZGV4IDNiM2E5NTYuLjJjZGRlYTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYworKysgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKQEAgLTcwOCw3ICs3MDgsOCBAQAogCiAJdGFibGUgPSBuZXQtPmlwdjYuc3lzY3RsLmZyYWdzX2hkci0+Y3RsX3RhYmxlX2FyZzsKIAl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LT5pcHY2LnN5c2N0bC5mcmFnc19oZHIpOwotCWtmcmVlKHRhYmxlKTsKKwlpZiAoIW5ldF9lcShuZXQsICZpbml0X25ldCkpCisJCWtmcmVlKHRhYmxlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICppcDZfY3RsX2hlYWRlcjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IGRiM2IyNzMuLmMyYmQ3NGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMjYzMCw2ICsyNjMwLDcgQEAKIAkJdGFibGVbNl0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19lbGFzdGljaXR5OwogCQl0YWJsZVs3XS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X210dV9leHBpcmVzOwogCQl0YWJsZVs4XS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X21pbl9hZHZtc3M7CisJCXRhYmxlWzldLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfbWluX2ludGVydmFsOwogCX0KIAogCXJldHVybiB0YWJsZTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggMzc4NzQ1NS4uZDdkY2VlNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTM0LDkgKzM0LDI4IEBACiAKIAlodF9jYXAtPmh0X3N1cHBvcnRlZCA9IHRydWU7CiAKLQlodF9jYXAtPmNhcCA9IGxlMTZfdG9fY3B1KGh0X2NhcF9pZS0+Y2FwX2luZm8pICYgc2JhbmQtPmh0X2NhcC5jYXA7Ci0JaHRfY2FwLT5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU01fUFM7Ci0JaHRfY2FwLT5jYXAgfD0gc2JhbmQtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTOworCS8qCisJICogVGhlIGJpdHMgbGlzdGVkIGluIHRoaXMgZXhwcmVzc2lvbiBzaG91bGQgYmUKKwkgKiB0aGUgc2FtZSBmb3IgdGhlIHBlZXIgYW5kIHVzLCBpZiB0aGUgc3RhdGlvbgorCSAqIGFkdmVydGlzZXMgbW9yZSB0aGVuIHdlIGNhbid0IHVzZSB0aG9zZSB0aHVzCisJICogd2UgbWFzayB0aGVtIG91dC4KKwkgKi8KKwlodF9jYXAtPmNhcCA9IGxlMTZfdG9fY3B1KGh0X2NhcF9pZS0+Y2FwX2luZm8pICYKKwkJKHNiYW5kLT5odF9jYXAuY2FwIHwKKwkJIH4oSUVFRTgwMjExX0hUX0NBUF9MRFBDX0NPRElORyB8CisJCSAgIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwIHwKKwkJICAgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwKKwkJICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjAgfAorCQkgICBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8CisJCSAgIElFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwKSk7CisJLyoKKwkgKiBUaGUgU1RCQyBiaXRzIGFyZSBhc3ltbWV0cmljIC0tIGlmIHdlIGRvbid0IGhhdmUKKwkgKiBUWCB0aGVuIG1hc2sgb3V0IHRoZSBwZWVyJ3MgUlggYW5kIHZpY2UgdmVyc2EuCisJICovCisJaWYgKCEoc2JhbmQtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkMpKQorCQlodF9jYXAtPmNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDOworCWlmICghKHNiYW5kLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDKSkKKwkJaHRfY2FwLT5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfVFhfU1RCQzsKIAogCWFtcGR1X2luZm8gPSBodF9jYXBfaWUtPmFtcGR1X3BhcmFtc19pbmZvOwogCWh0X2NhcC0+YW1wZHVfZmFjdG9yID0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDEwZDEzODUuLjFmMmRiNjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtMzgyLDYgKzM4Miw3IEBACiBzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCXU4ICpic3NpZCx1OCAqYWRkciwgdTMyIHN1cHBfcmF0ZXMpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlpbnQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7CkBAIC0zOTcsNiArMzk4LDkgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaWYgKGlmaWJzcy0+c3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0gpCisJCXJldHVybiBOVUxMOworCiAJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCkpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCA4MTE2ZDFhLi4wZDJkOTQ4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTUxNSw2ICs1MTUsOCBAQAogCSAqIGFuZCB3ZSBuZWVkIHNvbWUgaGVhZHJvb20gZm9yIHBhc3NpbmcgdGhlIGZyYW1lIHRvIG1vbml0b3IKIAkgKiBpbnRlcmZhY2VzLCBidXQgbmV2ZXIgYm90aCBhdCB0aGUgc2FtZSB0aW1lLgogCSAqLworCUJVSUxEX0JVR19PTihJRUVFODAyMTFfVFhfU1RBVFVTX0hFQURST09NICE9CisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXNfcnRhcF9oZHIpKTsKIAlsb2NhbC0+dHhfaGVhZHJvb20gPSBtYXhfdCh1bnNpZ25lZCBpbnQgLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20sCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyKSk7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IGQ4ZDUwZmIuLmM3OWU1OWYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtOTE1LDYgKzkxNSwxNCBAQAogCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+KElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMIHwKIAkJCQlJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMKTsKIAorCS8qCisJICogQWx3YXlzIGhhbmRsZSBXTU0gb25jZSBhZnRlciBhc3NvY2lhdGlvbiByZWdhcmRsZXNzCisJICogb2YgdGhlIGZpcnN0IHZhbHVlIHRoZSBBUCB1c2VzLiBTZXR0aW5nIC0xIGhlcmUgaGFzCisJICogdGhhdCBlZmZlY3QgYmVjYXVzZSB0aGUgQVAgdmFsdWVzIGlzIGFuIHVuc2lnbmVkCisJICogNC1iaXQgdmFsdWUuCisJICovCisJc2RhdGEtPnUubWdkLndtbV9sYXN0X3BhcmFtX3NldCA9IC0xOworCiAJaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgMSk7CiAKIAlzZGF0YS0+dmlmLmJzc19jb25mLmFzc29jID0gMTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggODgzNGNjOS4uMjdjZWFlZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTE0MTksNiArMTQxOSwxMCBAQAogCWlmICghbG9jYWwtPnBzX3NkYXRhKQogCQlyZXR1cm4gZmFsc2U7CiAKKwkvKiBObyBwb2ludCBpZiB3ZSdyZSBnb2luZyB0byBzdXNwZW5kICovCisJaWYgKGxvY2FsLT5xdWllc2NpbmcpCisJCXJldHVybiBmYWxzZTsKKwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCA3OGE2ZTkyLi5kYzc2MjY3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTEwMzksNyArMTAzOSwxOSBAQAogCiAJLyogcmVzdGFydCBoYXJkd2FyZSAqLwogCWlmIChsb2NhbC0+b3Blbl9jb3VudCkgeworCQkvKgorCQkgKiBVcG9uIHJlc3VtZSBoYXJkd2FyZSBjYW4gc29tZXRpbWVzIGJlIGdvb2Z5IGR1ZSB0bworCQkgKiB2YXJpb3VzIHBsYXRmb3JtIC8gZHJpdmVyIC8gYnVzIGlzc3Vlcywgc28gcmVzdGFydGluZworCQkgKiB0aGUgZGV2aWNlIG1heSBhdCB0aW1lcyBub3Qgd29yayBpbW1lZGlhdGVseS4gUHJvcGFnYXRlCisJCSAqIHRoZSBlcnJvci4KKwkJICovCiAJCXJlcyA9IGRydl9zdGFydChsb2NhbCk7CisJCWlmIChyZXMpIHsKKwkJCVdBUk4obG9jYWwtPnN1c3BlbmRlZCwgIkhhcndhcmUgYmVjYW1lIHVuYXZhaWxhYmxlICIKKwkJCSAgICAgInVwb24gcmVzdW1lLiBUaGlzIGlzIGNvdWxkIGJlIGEgc29mdHdhcmUgaXNzdWUiCisJCQkgICAgICJwcmlvciB0byBzdXNwZW5kIG9yIGEgaGFyd2FyZSBpc3N1ZVxuIik7CisJCQlyZXR1cm4gcmVzOworCQl9CiAKIAkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgdHJ1ZSk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCmluZGV4IDNjM2M1MGYuLmY3YTdmODMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKQEAgLTY0NCw3ICs2NDQsMjIgQEAKIAlwID0gZ3NzX2ZpbGxfY29udGV4dChwLCBlbmQsIGN0eCwgZ3NzX21zZy0+YXV0aC0+bWVjaCk7CiAJaWYgKElTX0VSUihwKSkgewogCQllcnIgPSBQVFJfRVJSKHApOwotCQlnc3NfbXNnLT5tc2cuZXJybm8gPSAoZXJyID09IC1FQUdBSU4pID8gLUVBR0FJTiA6IC1FQUNDRVM7CisJCXN3aXRjaCAoZXJyKSB7CisJCWNhc2UgLUVBQ0NFUzoKKwkJCWdzc19tc2ctPm1zZy5lcnJubyA9IGVycjsKKwkJCWVyciA9IG1sZW47CisJCQlicmVhazsKKwkJY2FzZSAtRUZBVUxUOgorCQljYXNlIC1FTk9NRU06CisJCWNhc2UgLUVJTlZBTDoKKwkJY2FzZSAtRU5PU1lTOgorCQkJZ3NzX21zZy0+bXNnLmVycm5vID0gLUVBR0FJTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGJhZCByZXR1cm4gZnJvbSAiCisJCQkJImdzc19maWxsX2NvbnRleHQ6ICV6ZFxuIiwgX19mdW5jX18sIGVycik7CisJCQlCVUcoKTsKKwkJfQogCQlnb3RvIGVycl9yZWxlYXNlX21zZzsKIAl9CiAJZ3NzX21zZy0+Y3R4ID0gZ3NzX2dldF9jdHgoY3R4KTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMKaW5kZXggZWY0NWViYS4uMmRlYjBlZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMKQEAgLTEzMSw4ICsxMzEsMTAgQEAKIAlzdHJ1Y3QJa3JiNV9jdHggKmN0eDsKIAlpbnQgdG1wOwogCi0JaWYgKCEoY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9OT0ZTKSkpCisJaWYgKCEoY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9OT0ZTKSkpIHsKKwkJcCA9IEVSUl9QVFIoLUVOT01FTSk7CiAJCWdvdG8gb3V0X2VycjsKKwl9CiAKIAlwID0gc2ltcGxlX2dldF9ieXRlcyhwLCBlbmQsICZjdHgtPmluaXRpYXRlLCBzaXplb2YoY3R4LT5pbml0aWF0ZSkpOwogCWlmIChJU19FUlIocCkpCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYwppbmRleCA2ZWZiYjBjLi43NmU0YzZmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQkgICAgICAgc3RydWN0IGdzc19jdHgJCSoqY3R4X2lkKQogewogCWlmICghKCpjdHhfaWQgPSBremFsbG9jKHNpemVvZigqKmN0eF9pZCksIEdGUF9LRVJORUwpKSkKLQkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7CisJCXJldHVybiAtRU5PTUVNOwogCSgqY3R4X2lkKS0+bWVjaF90eXBlID0gZ3NzX21lY2hfZ2V0KG1lY2gpOwogCiAJcmV0dXJuIG1lY2gtPmdtX29wcwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCmluZGV4IDFjOTI0ZWUuLjdkMWY5ZTkgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYworKysgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKQEAgLTY5OSw3ICs2OTksOCBAQAogCXNwaW5fdW5sb2NrX2JoKCZwb29sLT5zcF9sb2NrKTsKIAogCWxlbiA9IDA7Ci0JaWYgKHRlc3RfYml0KFhQVF9MSVNURU5FUiwgJnhwcnQtPnhwdF9mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoWFBUX0xJU1RFTkVSLCAmeHBydC0+eHB0X2ZsYWdzKSAmJgorCSAgICAhdGVzdF9iaXQoWFBUX0NMT1NFLCAmeHBydC0+eHB0X2ZsYWdzKSkgewogCQlzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdDsKIAkJbmV3eHB0ID0geHBydC0+eHB0X29wcy0+eHBvX2FjY2VwdCh4cHJ0KTsKIAkJaWYgKG5ld3hwdCkgewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL21sbWUuYyBiL25ldC93aXJlbGVzcy9tbG1lLmMKaW5kZXggMTAwMWRiNC4uODJlNjAwMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL21sbWUuYworKysgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCkBAIC05Myw3ICs5MywxOCBAQAogCQkJfQogCQl9CiAKLQkJV0FSTl9PTighYnNzKTsKKwkJLyoKKwkJICogV2UgbWlnaHQgYmUgY29taW5nIGhlcmUgYmVjYXVzZSB0aGUgZHJpdmVyIHJlcG9ydGVkCisJCSAqIGEgc3VjY2Vzc2Z1bCBhc3NvY2lhdGlvbiBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZQorCQkgKiB1c2VyIHJlcXVlc3RlZCBhIGRlYXV0aC4gSW4gdGhhdCBjYXNlLCB3ZSB3aWxsIGhhdmUKKwkJICogcmVtb3ZlZCB0aGUgQlNTIGZyb20gdGhlIGF1dGhfYnNzZXMgbGlzdCBkdWUgdG8gdGhlCisJCSAqIGRlYXV0aCByZXF1ZXN0IHdoZW4gdGhlIGFzc29jIHJlc3BvbnNlIG1ha2VzIGl0LiBJZgorCQkgKiB0aGUgdHdvIGNvZGUgcGF0aHMgYWNxdWlyZSB0aGUgbG9jayB0aGUgb3RoZXIgd2F5CisJCSAqIGFyb3VuZCwgdGhhdCdzIGp1c3QgdGhlIHN0YW5kYXJkIHNpdHVhdGlvbiBvZiBhCisJCSAqIGRlYXV0aCBiZWluZyByZXF1ZXN0ZWQgd2hpbGUgY29ubmVjdGVkLgorCQkgKi8KKwkJaWYgKCFic3MpCisJCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKHdkZXYtPmNvbm4pIHsKIAkJY2ZnODAyMTFfc21lX2ZhaWxlZF9hc3NvYyh3ZGV2KTsKIAkJLyoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCmluZGV4IDEyZGZhNjIuLjBjMmNiYmUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtNjAxLDcgKzYwMSw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAJc3RydWN0IGl3X3NjYW5fcmVxICp3cmVxID0gTlVMTDsKLQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpjcmVxOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKmNyZXEgPSBOVUxMOwogCWludCBpLCBlcnIsIG5fY2hhbm5lbHMgPSAwOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIApAQCAtNjk0LDggKzY5NCwxMCBAQAogCS8qIHRyYW5zbGF0ZSAiU2NhbiBmb3IgU1NJRCIgcmVxdWVzdCAqLwogCWlmICh3cmVxKSB7CiAJCWlmICh3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7Ci0JCQlpZiAod3JlcS0+ZXNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICh3cmVxLT5lc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCW1lbWNweShjcmVxLT5zc2lkc1swXS5zc2lkLCB3cmVxLT5lc3NpZCwgd3JlcS0+ZXNzaWRfbGVuKTsKIAkJCWNyZXEtPnNzaWRzWzBdLnNzaWRfbGVuID0gd3JlcS0+ZXNzaWRfbGVuOwogCQl9CkBAIC03MDcsMTIgKzcwOSwxNSBAQAogCWVyciA9IHJkZXYtPm9wcy0+c2Nhbih3aXBoeSwgZGV2LCBjcmVxKTsKIAlpZiAoZXJyKSB7CiAJCXJkZXYtPnNjYW5fcmVxID0gTlVMTDsKLQkJa2ZyZWUoY3JlcSk7CisJCS8qIGNyZXEgd2lsbCBiZSBmcmVlZCBiZWxvdyAqLwogCX0gZWxzZSB7CiAJCW5sODAyMTFfc2VuZF9zY2FuX3N0YXJ0KHJkZXYsIGRldik7CisJCS8qIGNyZXEgbm93IG93bmVkIGJ5IGRyaXZlciAqLworCQljcmVxID0gTlVMTDsKIAkJZGV2X2hvbGQoZGV2KTsKIAl9CiAgb3V0OgorCWtmcmVlKGNyZXEpOwogCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCBjYjgxY2EzLi40NzI1YTU0IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTE0NDUsNyArMTQ0NSw3IEBACiAJaWYgKCFkZXYpCiAJCWdvdG8gZnJlZV9kc3Q7CiAKLQkvKiBDb3B5IG5laWdoYm91dCBmb3IgcmVhY2hhYmlsaXR5IGNvbmZpcm1hdGlvbiAqLworCS8qIENvcHkgbmVpZ2hib3VyIGZvciByZWFjaGFiaWxpdHkgY29uZmlybWF0aW9uICovCiAJZHN0MC0+bmVpZ2hib3VyID0gbmVpZ2hfY2xvbmUoZHN0LT5uZWlnaGJvdXIpOwogCiAJeGZybV9pbml0X3BhdGgoKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDAsIGRzdCwgbmZoZWFkZXJfbGVuKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA3YTM3NGMyLi45YTJlZTg0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0yMzY1LDcgKzIzNjUsNyBAQAogCQkJaW5pdHJsaW0gPSBpbml0X3Rhc2suc2lnbmFsLT5ybGltICsgaTsKIAkJCXJsaW0tPnJsaW1fY3VyID0gbWluKHJsaW0tPnJsaW1fbWF4LCBpbml0cmxpbS0+cmxpbV9jdXIpOwogCQl9Ci0JCXVwZGF0ZV9ybGltaXRfY3B1KHJsaW0tPnJsaW1fY3VyKTsKKwkJdXBkYXRlX3JsaW1pdF9jcHUoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9maWxlLmMgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCmluZGV4IDgzNDY5MzguLjlhNmM1ODggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9maWxlLmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgInRvbW95by5oIgogI2luY2x1ZGUgInJlYWxwYXRoLmgiCi0jZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwMFwwMDRcMDAyXDAwNiJbKHgpJk9fQUNDTU9ERV0pCiAKIC8qCiAgKiB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCAxNDk3ZGNlLi42NTZlNDc0IDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTE3MiwxNCArMTcyLDE1IEBACiAJcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhYWNpX2NoYW5fd2FpdF9yZWFkeShzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuKQorc3RhdGljIGlubGluZSB2b2lkCithYWNpX2NoYW5fd2FpdF9yZWFkeShzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7CiAJdTMyIHZhbDsKIAlpbnQgdGltZW91dCA9IDUwMDA7CiAKIAlkbyB7CiAJCXZhbCA9IHJlYWRsKGFhY2lydW4tPmJhc2UgKyBBQUNJX1NSKTsKLQl9IHdoaWxlICh2YWwgJiAoU1JfVFhCfFNSX1JYQikgJiYgdGltZW91dC0tKTsKKwl9IHdoaWxlICh2YWwgJiBtYXNrICYmIHRpbWVvdXQtLSk7CiB9CiAKIApAQCAtMjA4LDggKzIwOSwxMCBAQAogCQkJd3JpdGVsKDAsIGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKIAkJCXJldHVybjsKIAkJfQotCQlwdHIgPSBhYWNpcnVuLT5wdHI7CiAKKwkJc3Bpbl9sb2NrKCZhYWNpcnVuLT5sb2NrKTsKKworCQlwdHIgPSBhYWNpcnVuLT5wdHI7CiAJCWRvIHsKIAkJCXVuc2lnbmVkIGludCBsZW4gPSBhYWNpcnVuLT5maWZvc3o7CiAJCQl1MzIgdmFsOwpAQCAtMjE3LDkgKzIyMCw5IEBACiAJCQlpZiAoYWFjaXJ1bi0+Ynl0ZXMgPD0gMCkgewogCQkJCWFhY2lydW4tPmJ5dGVzICs9IGFhY2lydW4tPnBlcmlvZDsKIAkJCQlhYWNpcnVuLT5wdHIgPSBwdHI7Ci0JCQkJc3Bpbl91bmxvY2soJmFhY2ktPmxvY2spOworCQkJCXNwaW5fdW5sb2NrKCZhYWNpcnVuLT5sb2NrKTsKIAkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGFhY2lydW4tPnN1YnN0cmVhbSk7Ci0JCQkJc3Bpbl9sb2NrKCZhYWNpLT5sb2NrKTsKKwkJCQlzcGluX2xvY2soJmFhY2lydW4tPmxvY2spOwogCQkJfQogCQkJaWYgKCEoYWFjaXJ1bi0+Y3IgJiBDUl9FTikpCiAJCQkJYnJlYWs7CkBAIC0yNDUsNyArMjQ4LDEwIEBACiAJCQkJCXB0ciA9IGFhY2lydW4tPnN0YXJ0OwogCQkJfQogCQl9IHdoaWxlKDEpOworCiAJCWFhY2lydW4tPnB0ciA9IHB0cjsKKworCQlzcGluX3VubG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJfQogCiAJaWYgKG1hc2sgJiBJU1JfVVJJTlRSKSB7CkBAIC0yNjMsNiArMjY5LDggQEAKIAkJCXJldHVybjsKIAkJfQogCisJCXNwaW5fbG9jaygmYWFjaXJ1bi0+bG9jayk7CisKIAkJcHRyID0gYWFjaXJ1bi0+cHRyOwogCQlkbyB7CiAJCQl1bnNpZ25lZCBpbnQgbGVuID0gYWFjaXJ1bi0+Zmlmb3N6OwpAQCAtMjcxLDkgKzI3OSw5IEBACiAJCQlpZiAoYWFjaXJ1bi0+Ynl0ZXMgPD0gMCkgewogCQkJCWFhY2lydW4tPmJ5dGVzICs9IGFhY2lydW4tPnBlcmlvZDsKIAkJCQlhYWNpcnVuLT5wdHIgPSBwdHI7Ci0JCQkJc3Bpbl91bmxvY2soJmFhY2ktPmxvY2spOworCQkJCXNwaW5fdW5sb2NrKCZhYWNpcnVuLT5sb2NrKTsKIAkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGFhY2lydW4tPnN1YnN0cmVhbSk7Ci0JCQkJc3Bpbl9sb2NrKCZhYWNpLT5sb2NrKTsKKwkJCQlzcGluX2xvY2soJmFhY2lydW4tPmxvY2spOwogCQkJfQogCQkJaWYgKCEoYWFjaXJ1bi0+Y3IgJiBDUl9FTikpCiAJCQkJYnJlYWs7CkBAIC0zMDEsNiArMzA5LDggQEAKIAkJfSB3aGlsZSAoMSk7CiAKIAkJYWFjaXJ1bi0+cHRyID0gcHRyOworCisJCXNwaW5fdW5sb2NrKCZhYWNpcnVuLT5sb2NrKTsKIAl9CiB9CiAKQEAgLTMxMCw3ICszMjAsNiBAQAogCXUzMiBtYXNrOwogCWludCBpOwogCi0Jc3Bpbl9sb2NrKCZhYWNpLT5sb2NrKTsKIAltYXNrID0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfQUxMSU5UUyk7CiAJaWYgKG1hc2spIHsKIAkJdTMyIG0gPSBtYXNrOwpAQCAtMzIwLDcgKzMyOSw2IEBACiAJCQl9CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmFhY2ktPmxvY2spOwogCiAJcmV0dXJuIG1hc2sgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOwogfQpAQCAtMzMwLDYzICszMzgsNiBAQAogLyoKICAqIEFMU0Egc3VwcG9ydC4KICAqLwotCi1zdHJ1Y3QgYWFjaV9zdHJlYW0gewotCXVuc2lnbmVkIGNoYXIgY29kZWNfaWR4OwotCXVuc2lnbmVkIGNoYXIgcmF0ZV9pZHg7Ci19OwotCi1zdGF0aWMgc3RydWN0IGFhY2lfc3RyZWFtIGFhY2lfc3RyZWFtc1tdID0gewotCVtBQ1NUUkVBTV9GUk9OVF0gPSB7Ci0JCS5jb2RlY19pZHgJPSAwLAotCQkucmF0ZV9pZHgJPSBBQzk3X1JBVEVTX0ZST05UX0RBQywKLQl9LAotCVtBQ1NUUkVBTV9TVVJST1VORF0gPSB7Ci0JCS5jb2RlY19pZHgJPSAwLAotCQkucmF0ZV9pZHgJPSBBQzk3X1JBVEVTX1NVUlJfREFDLAotCX0sCi0JW0FDU1RSRUFNX0xGRV0gPSB7Ci0JCS5jb2RlY19pZHgJPSAwLAotCQkucmF0ZV9pZHgJPSBBQzk3X1JBVEVTX0xGRV9EQUMsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFhY2lfcmF0ZV9tYXNrKHN0cnVjdCBhYWNpICphYWNpLCBpbnQgc3RyZWFtaWQpCi17Ci0Jc3RydWN0IGFhY2lfc3RyZWFtICpzID0gYWFjaV9zdHJlYW1zICsgc3RyZWFtaWQ7Ci0JcmV0dXJuIGFhY2ktPmFjOTdfYnVzLT5jb2RlY1tzLT5jb2RlY19pZHhdLT5yYXRlc1tzLT5yYXRlX2lkeF07Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZV9saXN0W10gPSB7Ci0JNTUxMiwgODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgMzIwMDAsIDQ0MTAwLAotCTQ4MDAwLCA2NDAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAsIDE5MjAwMAotfTsKLQotLyoKLSAqIERvdWJsZS1yYXRlIHJ1bGU6IHdlIGNhbiBzdXBwb3J0IGRvdWJsZSByYXRlIGlmZiBjaGFubmVscyA9PSAyCi0gKiAgKHVuaW1wbGVtZW50ZWQpCi0gKi8KLXN0YXRpYyBpbnQKLWFhY2lfcnVsZV9yYXRlX2J5X2NoYW5uZWxzKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcCwgc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkKLXsKLQlzdHJ1Y3QgYWFjaSAqYWFjaSA9IHJ1bGUtPnByaXZhdGU7Ci0JdW5zaWduZWQgaW50IHJhdGVfbWFzayA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDB8U05EUlZfUENNX1JBVEVfNTUxMjsKLQlzdHJ1Y3Qgc25kX2ludGVydmFsICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKLQotCXN3aXRjaCAoYy0+bWF4KSB7Ci0JY2FzZSA2OgotCQlyYXRlX21hc2sgJj0gYWFjaV9yYXRlX21hc2soYWFjaSwgQUNTVFJFQU1fTEZFKTsKLQljYXNlIDQ6Ci0JCXJhdGVfbWFzayAmPSBhYWNpX3JhdGVfbWFzayhhYWNpLCBBQ1NUUkVBTV9TVVJST1VORCk7Ci0JY2FzZSAyOgotCQlyYXRlX21hc2sgJj0gYWFjaV9yYXRlX21hc2soYWFjaSwgQUNTVFJFQU1fRlJPTlQpOwotCX0KLQotCXJldHVybiBzbmRfaW50ZXJ2YWxfbGlzdChod19wYXJhbV9pbnRlcnZhbChwLCBydWxlLT52YXIpLAotCQkJCSBBUlJBWV9TSVpFKHJhdGVfbGlzdCksIHJhdGVfbGlzdCwKLQkJCQkgcmF0ZV9tYXNrKTsKLX0KLQogc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGFhY2lfaHdfaW5mbyA9IHsKIAkuaW5mbwkJCT0gU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKQEAgLTQwMCwxMCArMzUxLDcgQEAKIAkgKi8KIAkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAotCS8qIHNob3VsZCB0aGlzIGJlIGNvbnRpbnVvdXMgb3Iga25vdD8gKi8KLQkucmF0ZXMJCQk9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMsCi0JLnJhdGVfbWF4CQk9IDQ4MDAwLAotCS5yYXRlX21pbgkJPSA0MDAwLAorCS8qIHJhdGVzIGFyZSBzZXR1cCBmcm9tIHRoZSBBQyc5NyBjb2RlYyAqLwogCS5jaGFubmVsc19taW4JCT0gMiwKIAkuY2hhbm5lbHNfbWF4CQk9IDYsCiAJLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCAqIDEwMjQsCkBAIC00MjMsNiArMzcxLDEyIEBACiAJYWFjaXJ1bi0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGFhY2lydW47CiAJcnVudGltZS0+aHcgPSBhYWNpX2h3X2luZm87CisJcnVudGltZS0+aHcucmF0ZXMgPSBhYWNpcnVuLT5wY20tPnJhdGVzOworCXNuZF9wY21fbGltaXRfaHdfcmF0ZXMocnVudGltZSk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgorCSAgICBhYWNpcnVuLT5wY20tPnJbMV0uc2xvdHMpCisJCXNuZF9hYzk3X3BjbV9kb3VibGVfcmF0ZV9ydWxlcyhydW50aW1lKTsKIAogCS8qCiAJICogRklYTUU6IEFMU0Egc3BlY2lmaWVzIGZpZm9fc2l6ZSBpbiBieXRlcy4gIElmIHdlJ3JlIGluIG5vcm1hbApAQCAtNDMzLDE3ICszODcsNiBAQAogCSAqLwogCXJ1bnRpbWUtPmh3LmZpZm9fc2l6ZSA9IGFhY2ktPmZpZm9zaXplICogMjsKIAotCS8qCi0JICogQWRkIHJ1bGUgZGVzY3JpYmluZyBoYXJkd2FyZSByYXRlIGRlcGVuZGVuY3kKLQkgKiBvbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgotCSAqLwotCXJldCA9IHNuZF9wY21faHdfcnVsZV9hZGQocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCi0JCQkJICBhYWNpX3J1bGVfcmF0ZV9ieV9jaGFubmVscywgYWFjaSwKLQkJCQkgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKLQkJCQkgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAtMSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KIAlyZXQgPSByZXF1ZXN0X2lycShhYWNpLT5kZXYtPmlycVswXSwgYWFjaV9pcnEsIElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQsCiAJCQkgIERSSVZFUl9OQU1FLCBhYWNpKTsKIAlpZiAocmV0KQpAQCAtNDk4LDYgKzQ0MSw3IEBACiAJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKIAlpbnQgZXJyOworCXN0cnVjdCBhYWNpICphYWNpID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAKIAlhYWNpX3BjbV9od19mcmVlKHN1YnN0cmVhbSk7CiAJaWYgKGFhY2lydW4tPnBjbV9vcGVuKSB7CkBAIC01MDcsMTggKzQ1MSwyMiBAQAogCiAJZXJyID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKIAkJCQkgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7CisJaWYgKGVyciA+PSAwKSB7CisJCXVuc2lnbmVkIGludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwkJaW50IGRibCA9IHJhdGUgPiA0ODAwMDsKIAotCWVyciA9IHNuZF9hYzk3X3BjbV9vcGVuKGFhY2lydW4tPnBjbSwgcGFyYW1zX3JhdGUocGFyYW1zKSwKLQkJCQlwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSwKLQkJCQlhYWNpcnVuLT5wY20tPnJbMF0uc2xvdHMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCQllcnIgPSBzbmRfYWM5N19wY21fb3BlbihhYWNpcnVuLT5wY20sIHJhdGUsCisJCQkJCXBhcmFtc19jaGFubmVscyhwYXJhbXMpLAorCQkJCQlhYWNpcnVuLT5wY20tPnJbZGJsXS5zbG90cyk7CiAKLQlhYWNpcnVuLT5wY21fb3BlbiA9IDE7CisJCWFhY2lydW4tPnBjbV9vcGVuID0gZXJyID09IDA7CisJCWFhY2lydW4tPmNyID0gQ1JfRkVOIHwgQ1JfQ09NUEFDVCB8IENSX1NaMTY7CisJCWFhY2lydW4tPmZpZm9zeiA9IGFhY2ktPmZpZm9zaXplICogNDsKIAotIG91dDoKKwkJaWYgKGFhY2lydW4tPmNyICYgQ1JfQ09NUEFDVCkKKwkJCWFhY2lydW4tPmZpZm9zeiA+Pj0gMTsKKwl9CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01MjcsNyArNDc1LDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQlhYWNpcnVuLT5zdGFydAk9ICh2b2lkICopcnVudGltZS0+ZG1hX2FyZWE7CisJYWFjaXJ1bi0+c3RhcnQJPSBydW50aW1lLT5kbWFfYXJlYTsKIAlhYWNpcnVuLT5lbmQJPSBhYWNpcnVuLT5zdGFydCArIHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwogCWFhY2lydW4tPnB0cgk9IGFhY2lydW4tPnN0YXJ0OwogCWFhY2lydW4tPnBlcmlvZAk9CkBAIC02MTMsNyArNTYxLDYgQEAKIHN0YXRpYyBpbnQgYWFjaV9wY21fcGxheWJhY2tfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgYWFjaSAqYWFjaSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKIAlpbnQgcmV0OwpAQCAtNjI3LDE0ICs1NzQsOSBAQAogCSAqIEVuYWJsZSBGSUZPLCBjb21wYWN0IG1vZGUsIDE2IGJpdHMgcGVyIHNhbXBsZS4KIAkgKiBGSVhNRTogZG91YmxlIHJhdGUgc2xvdHM/CiAJICovCi0JaWYgKHJldCA+PSAwKSB7Ci0JCWFhY2lydW4tPmNyID0gQ1JfRkVOIHwgQ1JfQ09NUEFDVCB8IENSX1NaMTY7CisJaWYgKHJldCA+PSAwKQogCQlhYWNpcnVuLT5jciB8PSBjaGFubmVsc190b190eG1hc2tbY2hhbm5lbHNdOwogCi0JCWFhY2lydW4tPmZpZm9zegk9IGFhY2ktPmZpZm9zaXplICogNDsKLQkJaWYgKGFhY2lydW4tPmNyICYgQ1JfQ09NUEFDVCkKLQkJCWFhY2lydW4tPmZpZm9zeiA+Pj0gMTsKLQl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjQ2LDcgKzU4OCw3IEBACiAJaWUgJj0gfihJRV9VUklFfElFX1RYSUUpOwogCXdyaXRlbChpZSwgYWFjaXJ1bi0+YmFzZSArIEFBQ0lfSUUpOwogCWFhY2lydW4tPmNyICY9IH5DUl9FTjsKLQlhYWNpX2NoYW5fd2FpdF9yZWFkeShhYWNpcnVuKTsKKwlhYWNpX2NoYW5fd2FpdF9yZWFkeShhYWNpcnVuLCBTUl9UWEIpOwogCXdyaXRlbChhYWNpcnVuLT5jciwgYWFjaXJ1bi0+YmFzZSArIEFBQ0lfVFhDUik7CiB9CiAKQEAgLTY1NCw3ICs1OTYsNyBAQAogewogCXUzMiBpZTsKIAotCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOworCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4sIFNSX1RYQik7CiAJYWFjaXJ1bi0+Y3IgfD0gQ1JfRU47CiAKIAlpZSA9IHJlYWRsKGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKQEAgLTY2NSwxMiArNjA3LDEyIEBACiAKIHN0YXRpYyBpbnQgYWFjaV9wY21fcGxheWJhY2tfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKIHsKLQlzdHJ1Y3QgYWFjaSAqYWFjaSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFhY2ktPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWFjaXJ1bi0+bG9jaywgZmxhZ3MpOworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCQlhYWNpX3BjbV9wbGF5YmFja19zdGFydChhYWNpcnVuKTsKQEAgLTY5Nyw3ICs2MzksOCBAQAogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFhY2ktPmxvY2ssIGZsYWdzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFhY2lydW4tPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03MTYsMjMgKzY1OSwxNCBAQAogc3RhdGljIGludCBhYWNpX3BjbV9jYXB0dXJlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgYWFjaSAqYWFjaSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gYWFjaV9wY21faHdfcGFyYW1zKHN1YnN0cmVhbSwgYWFjaXJ1biwgcGFyYW1zKTsKLQotCWlmIChyZXQgPj0gMCkgewotCQlhYWNpcnVuLT5jciA9IENSX0ZFTiB8IENSX0NPTVBBQ1QgfCBDUl9TWjE2OwotCisJaWYgKHJldCA+PSAwKQogCQkvKiBMaW5lIGluIHJlY29yZDogc2xvdCAzIGFuZCA0ICovCiAJCWFhY2lydW4tPmNyIHw9IENSX1NMMyB8IENSX1NMNDsKIAotCQlhYWNpcnVuLT5maWZvc3ogPSBhYWNpLT5maWZvc2l6ZSAqIDQ7Ci0KLQkJaWYgKGFhY2lydW4tPmNyICYgQ1JfQ09NUEFDVCkKLQkJCWFhY2lydW4tPmZpZm9zeiA+Pj0gMTsKLQl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzQwLDcgKzY3NCw3IEBACiB7CiAJdTMyIGllOwogCi0JYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1bik7CisJYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1biwgU1JfUlhCKTsKIAogCWllID0gcmVhZGwoYWFjaXJ1bi0+YmFzZSArIEFBQ0lfSUUpOwogCWllICY9IH4oSUVfT1JJRSB8IElFX1JYSUUpOwpAQCAtNzU1LDcgKzY4OSw3IEBACiB7CiAJdTMyIGllOwogCi0JYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1bik7CisJYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1biwgU1JfUlhCKTsKIAogI2lmZGVmIERFQlVHCiAJLyogUlggVGltZW91dCB2YWx1ZTogYml0cyAyODoxNyBpbiBSWENSICovCkBAIC03NzIsMTIgKzcwNiwxMSBAQAogCiBzdGF0aWMgaW50IGFhY2lfcGNtX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKIHsKLQlzdHJ1Y3QgYWFjaSAqYWFjaSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFhY2ktPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWFjaXJ1bi0+bG9jaywgZmxhZ3MpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtODA2LDcgKzczOSw3IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWFjaS0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFhY2lydW4tPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04ODksNiArODIyLDEyIEBACiAJCQkJCSAgKDEgPDwgQUM5N19TTE9UX1BDTV9TUklHSFQpIHwKIAkJCQkJICAoMSA8PCBBQzk3X1NMT1RfTEZFKSwKIAkJCX0sCisJCQlbMV0gPSB7CisJCQkJLnNsb3RzCT0gKDEgPDwgQUM5N19TTE9UX1BDTV9MRUZUKSB8CisJCQkJCSAgKDEgPDwgQUM5N19TTE9UX1BDTV9SSUdIVCkgfAorCQkJCQkgICgxIDw8IEFDOTdfU0xPVF9QQ01fTEVGVF8wKSB8CisJCQkJCSAgKDEgPDwgQUM5N19TTE9UX1BDTV9SSUdIVF8wKSwKKwkJCX0sCiAJCX0sCiAJfSwKIAlbMV0gPSB7CS8qIFBDTSBpbiAqLwpAQCAtMTAwMSw3ICs5NDAsNiBAQAogCiAJYWFjaSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAltdXRleF9pbml0KCZhYWNpLT5hYzk3X3NlbSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFhY2ktPmxvY2spOwogCWFhY2ktPmNhcmQgPSBjYXJkOwogCWFhY2ktPmRldiA9IGRldjsKIApAQCAtMTAyOCw3ICs5NjYsNyBAQAogCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmYWFjaV9wbGF5YmFja19vcHMpOwogCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZhYWNpX2NhcHR1cmVfb3BzKTsKIAkJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKLQkJCQkJCSAgICAgIE5VTEwsIDAsIDY0ICogMTA0KTsKKwkJCQkJCSAgICAgIE5VTEwsIDAsIDY0ICogMTAyNCk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTEwODgsMTIgKzEwMjYsMTQgQEAKIAkvKgogCSAqIFBsYXliYWNrIHVzZXMgQUFDSSBjaGFubmVsIDAKIAkgKi8KKwlzcGluX2xvY2tfaW5pdCgmYWFjaS0+cGxheWJhY2subG9jayk7CiAJYWFjaS0+cGxheWJhY2suYmFzZSA9IGFhY2ktPmJhc2UgKyBBQUNJX0NTQ0gxOwogCWFhY2ktPnBsYXliYWNrLmZpZm8gPSBhYWNpLT5iYXNlICsgQUFDSV9EUjE7CiAKIAkvKgogCSAqIENhcHR1cmUgdXNlcyBBQUNJIGNoYW5uZWwgMAogCSAqLworCXNwaW5fbG9ja19pbml0KCZhYWNpLT5jYXB0dXJlLmxvY2spOwogCWFhY2ktPmNhcHR1cmUuYmFzZSA9IGFhY2ktPmJhc2UgKyBBQUNJX0NTQ0gxOwogCWFhY2ktPmNhcHR1cmUuZmlmbyA9IGFhY2ktPmJhc2UgKyBBQUNJX0RSMTsKIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuaCBiL3NvdW5kL2FybS9hYWNpLmgKaW5kZXggOTI0ZjY5Yy4uNmE0YTJlZSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuaAorKysgYi9zb3VuZC9hcm0vYWFjaS5oCkBAIC0yMDIsNiArMjAyLDcgQEAKIHN0cnVjdCBhYWNpX3J1bnRpbWUgewogCXZvaWQJCQlfX2lvbWVtICpiYXNlOwogCXZvaWQJCQlfX2lvbWVtICpmaWZvOworCXNwaW5sb2NrX3QJCWxvY2s7CiAKIAlzdHJ1Y3QgYWM5N19wY20JCSpwY207CiAJaW50CQkJcGNtX29wZW47CkBAIC0yMzIsNyArMjMzLDYgQEAKIAlzdHJ1Y3Qgc25kX2FjOTcJCSphYzk3OwogCiAJdTMyCQkJbWFpbmNyOwotCXNwaW5sb2NrX3QJCWxvY2s7CiAKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lCXBsYXliYWNrOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUJY2FwdHVyZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvS2NvbmZpZyBiL3NvdW5kL2NvcmUvS2NvbmZpZwppbmRleCBjMTU2ODJhLi40NzU0NTVjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL0tjb25maWcKKysrIGIvc291bmQvY29yZS9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogY29uZmlnIFNORF9QQ00KIAl0cmlzdGF0ZQogCXNlbGVjdCBTTkRfVElNRVIKKwlzZWxlY3QgR0NECiAKIGNvbmZpZyBTTkRfSFdERVAKIAl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCAzMGY0MTA4Li5hMjc1NDViMiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTc1OCw3ICs3NTgsNyBAQAogCQlpbnQgZGlmZjsKIAkJaWYgKHEgPT0gMCkKIAkJCXEgPSAxOwotCQlkZW4gPSBkaXZfZG93bihudW0sIHEpOworCQlkZW4gPSBkaXZfdXAobnVtLCBxKTsKIAkJaWYgKGRlbiA8IHJhdHNba10uZGVuX21pbikKIAkJCWNvbnRpbnVlOwogCQlpZiAoZGVuID4gcmF0c1trXS5kZW5fbWF4KQpAQCAtNzk0LDcgKzc5NCw3IEBACiAJCQlpLT5lbXB0eSA9IDE7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlkZW4gPSBkaXZfdXAobnVtLCBxKTsKKwkJZGVuID0gZGl2X2Rvd24obnVtLCBxKTsKIAkJaWYgKGRlbiA+IHJhdHNba10uZGVuX21heCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoZGVuIDwgcmF0c1trXS5kZW5fbWluKQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCAyOWFiNDZhMS4uMjViMDY0MSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTE5MTgsMTMgKzE5MTgsMTMgQEAKIAogCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCiAJCQkJCSAgIGh3LT5yYXRlX21pbiwgaHctPnJhdGVfbWF4KTsKLQkgaWYgKGVyciA8IDApCi0JCSByZXR1cm4gZXJyOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTLAogCQkJCQkgICBody0+cGVyaW9kX2J5dGVzX21pbiwgaHctPnBlcmlvZF9ieXRlc19tYXgpOwotCSBpZiAoZXJyIDwgMCkKLQkJIHJldHVybiBlcnI7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTLAogCQkJCQkgICBody0+cGVyaW9kc19taW4sIGh3LT5wZXJpb2RzX21heCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV90aW1lci5jIGIvc291bmQvY29yZS9wY21fdGltZXIuYwppbmRleCBjYTgwNjhiLi5iMDFkOTQ4IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2djZC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC90aW1lci5oPgpAQCAtMjgsMjIgKzI5LDYgQEAKICAqICBUaW1lciBmdW5jdGlvbnMKICAqLwogCi0vKiBHcmVhdGVzdCBjb21tb24gZGl2aXNvciAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2NkKHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiKQotewotCXVuc2lnbmVkIGxvbmcgcjsKLQlpZiAoYSA8IGIpIHsKLQkJciA9IGE7Ci0JCWEgPSBiOwotCQliID0gcjsKLQl9Ci0Jd2hpbGUgKChyID0gYSAlIGIpICE9IDApIHsKLQkJYSA9IGI7Ci0JCWIgPSByOwotCX0KLQlyZXR1cm4gYjsKLX0KLQogdm9pZCBzbmRfcGNtX3RpbWVyX3Jlc29sdXRpb25fY2hhbmdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXVuc2lnbmVkIGxvbmcgcmF0ZSwgbXVsdCwgZnNpemUsIGwsIHBvc3Q7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jCmluZGV4IGNiOWFhNGMuLjRiZTU2MmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAllcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2FyZCwgIk1TTkQtTUlESSIsIGRldmljZSwgMSwgMSwgJnJtaWRpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQltcHUgPSBrY2FsbG9jKDEsIHNpemVvZigqbXB1KSwgR0ZQX0tFUk5FTCk7CisJbXB1ID0ga3phbGxvYyhzaXplb2YoKm1wdSksIEdGUF9LRVJORUwpOwogCWlmIChtcHUgPT0gTlVMTCkgewogCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgcm1pZGkpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMgYi9zb3VuZC9pc2Evc2IvZW11ODAwMC5jCmluZGV4IDk2Njc4ZDUuLjc1MTc2MmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMKKysrIGIvc291bmQvaXNhL3NiL2VtdTgwMDAuYwpAQCAtMzkzLDggKzM5Myw2IEBACiAKIAl3aGlsZSAoc2l6ZSA8IEVNVTgwMDBfTUFYX0RSQU0pIHsKIAotCQlzaXplICs9IDUxMiAqIDEwMjQ7ICAvKiBpbmNyZW1lbnQgNTEya2J5dGVzICovCi0KIAkJLyogV3JpdGUgYSB1bmlxdWUgZGF0YSBvbiB0aGUgdGVzdCBhZGRyZXNzLgogCQkgKiBpZiB0aGUgYWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2UsIHRoZSBkYXRhIGlzIHdyaXR0ZW4gb24KIAkJICogMHgyMDAwMDAoPUVNVTgwMDBfRFJBTV9PRkZTRVQpLiAgVGhlbiB0aGUgaWQgd29yZCBpcwpAQCAtNDE0LDcgKzQxMiw5IEBACiAJCS8qc25kX2VtdTgwMDBfcmVhZF93YWl0KGVtdSk7Ki8KIAkJRU1VODAwMF9TTUxEX1JFQUQoZW11KTsgLyogZGlzY2FyZCBzdGFsZSBkYXRhICAqLwogCQlpZiAoRU1VODAwMF9TTUxEX1JFQUQoZW11KSAhPSBVTklRVUVfSUQyKQotCQkJYnJlYWs7IC8qIHdlIG11c3QgaGF2ZSB3cmFwcGVkIGFyb3VuZCAqLworCQkJYnJlYWs7IC8qIG5vIG1lbW9yeSBhdCB0aGlzIGFkZHJlc3MgKi8KKworCQlzaXplICs9IDUxMiAqIDEwMjQ7ICAvKiBpbmNyZW1lbnQgNTEya2J5dGVzICovCiAKIAkJc25kX2VtdTgwMDBfcmVhZF93YWl0KGVtdSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jIGIvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKaW5kZXggODY5MWY0Yy4uZjFkOWQxNiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKKysrIGIvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKQEAgLTYwOSw3ICs2MDksNyBAQAogCS8qIGFsbG9jIHZpcnR1YWwgJ2RtYScgYXJlYSAqLwogCWlmIChydW50aW1lLT5kbWFfYXJlYSkKIAkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXplKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfdXNlcihzaXplKTsKIAlpZiAocnVudGltZS0+ZG1hX2FyZWEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wc3MuYyBiL3NvdW5kL29zcy9wc3MuYwppbmRleCA4M2Y1ZWUyLi5lMTlkZDVkIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcHNzLmMKKysrIGIvc291bmQvb3NzL3Bzcy5jCkBAIC0yNjksNyArMjY5LDcgQEAKIAl1bnNpZ25lZCBsb25nICAgaSwgbGltaXQgPSBqaWZmaWVzICsgSFovMTA7CiAKIAlvdXR3KDB4MjAwMCwgUkVHKFBTU19DT05UUk9MKSk7Ci0JZm9yIChpID0gMDsgaSA8IDMyNzY4ICYmIChsaW1pdC1qaWZmaWVzID49IDApOyBpKyspCisJZm9yIChpID0gMDsgaSA8IDMyNzY4ICYmIHRpbWVfYWZ0ZXJfZXEobGltaXQsIGppZmZpZXMpOyBpKyspCiAJCWludyhSRUcoUFNTX0NPTlRST0wpKTsKIAlvdXR3KDB4MDAwMCwgUkVHKFBTU19DT05UUk9MKSk7CiAJcmV0dXJuIDE7CkBAIC0zNjksMTEgKzM2OSwxMSBAQAogCQlvdXR3KDAsIFJFRyhQU1NfREFUQSkpOwogCiAJCWxpbWl0ID0gamlmZmllcyArIEhaLzEwOwotCQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgKGxpbWl0IC0gamlmZmllcyA+PSAwKTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgdGltZV9hZnRlcl9lcShsaW1pdCwgamlmZmllcyk7IGkrKykKIAkJCXZhbCA9IGludyhSRUcoUFNTX1NUQVRVUykpOwogCiAJCWxpbWl0ID0gamlmZmllcyArIEhaLzEwOwotCQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgKGxpbWl0LWppZmZpZXMgPj0gMCk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IDMyNzY4ICYmIHRpbWVfYWZ0ZXJfZXEobGltaXQsIGppZmZpZXMpOyBpKyspCiAJCXsKIAkJCXZhbCA9IGludyhSRUcoUFNTX1NUQVRVUykpOwogCQkJaWYgKHZhbCAmIDB4NDAwMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYwppbmRleCA1ZmUzNGE4Li5lNDU4MWE0MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYwpAQCAtNDIsNyArNDIsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBnZW5lcmF0ZSB0b25lICovCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgYmVlcC0+bmlkLCAwLAorCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGJlZXAtPm5pZCwgMCwKIAkJCUFDX1ZFUkJfU0VUX0JFRVBfQ09OVFJPTCwgYmVlcC0+dG9uZSk7CiB9CiAKQEAgLTExOSw3ICsxMTksNyBAQAogCWJlZXAtPmRldiA9IE5VTEw7CiAJY2FuY2VsX3dvcmtfc3luYygmYmVlcC0+YmVlcF93b3JrKTsKIAkvKiB0dXJuIG9mZiBiZWVwIGZvciBzdXJlICovCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShiZWVwLT5jb2RlYywgYmVlcC0+bmlkLCAwLAorCXNuZF9oZGFfY29kZWNfd3JpdGUoYmVlcC0+Y29kZWMsIGJlZXAtPm5pZCwgMCwKIAkJCQkgIEFDX1ZFUkJfU0VUX0JFRVBfQ09OVFJPTCwgMCk7CiB9CiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQliZWVwLT5lbmFibGVkID0gZW5hYmxlOwogCQlpZiAoIWVuYWJsZSkgewogCQkJLyogdHVybiBvZmYgYmVlcCAqLwotCQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShiZWVwLT5jb2RlYywgYmVlcC0+bmlkLCAwLAorCQkJc25kX2hkYV9jb2RlY193cml0ZShiZWVwLT5jb2RlYywgYmVlcC0+bmlkLCAwLAogCQkJCQkJICBBQ19WRVJCX1NFVF9CRUVQX0NPTlRST0wsIDApOwogCQl9CiAJCWlmIChiZWVwLT5tb2RlID09IEhEQV9CRUVQX01PREVfU1dSRUcpIHsKQEAgLTIzOSw4ICsyMzksMTIgQEAKIAltdXRleF9pbml0KCZiZWVwLT5tdXRleCk7CiAKIAlpZiAoYmVlcC0+bW9kZSA9PSBIREFfQkVFUF9NT0RFX09OKSB7Ci0JCWJlZXAtPmVuYWJsZWQgPSAxOwotCQlzbmRfaGRhX2RvX3JlZ2lzdGVyKCZiZWVwLT5yZWdpc3Rlcl93b3JrKTsKKwkJaW50IGVyciA9IHNuZF9oZGFfZG9fYXR0YWNoKGJlZXApOworCQlpZiAoZXJyIDwgMCkgeworCQkJa2ZyZWUoYmVlcCk7CisJCQljb2RlYy0+YmVlcCA9IE5VTEw7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNTMsNyArMjU3LDcgQEAKIAlpZiAoYmVlcCkgewogCQljYW5jZWxfd29ya19zeW5jKCZiZWVwLT5yZWdpc3Rlcl93b3JrKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYmVlcC0+dW5yZWdpc3Rlcl93b3JrKTsKLQkJaWYgKGJlZXAtPmVuYWJsZWQpCisJCWlmIChiZWVwLT5kZXYpCiAJCQlzbmRfaGRhX2RvX2RldGFjaChiZWVwKTsKIAkJY29kZWMtPmJlZXAgPSBOVUxMOwogCQlrZnJlZShiZWVwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IDljZmRiNzcuLmY5OGI0N2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtMTA4NiwxMSArMTA4Niw2IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JLyogYXVkaW8gY29kZWMgc2hvdWxkIG92ZXJyaWRlIHRoZSBtaXhlciBuYW1lICovCi0JaWYgKGNvZGVjLT5hZmcgfHwgISpjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpCi0JCXNucHJpbnRmKGNvZGVjLT5idXMtPmNhcmQtPm1peGVybmFtZSwKLQkJCSBzaXplb2YoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKSwKLQkJCSAiJXMgJXMiLCBjb2RlYy0+dmVuZG9yX25hbWUsIGNvZGVjLT5jaGlwX25hbWUpOwogCiAJaWYgKGlzX2dlbmVyaWNfY29uZmlnKGNvZGVjKSkgewogCQllcnIgPSBzbmRfaGRhX3BhcnNlX2dlbmVyaWNfY29kZWMoY29kZWMpOwpAQCAtMTEwOSw2ICsxMTA0LDExIEBACiAgcGF0Y2hlZDoKIAlpZiAoIWVyciAmJiBjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KQogCQllcnIgPSBpbml0X3Vuc29sX3F1ZXVlKGNvZGVjLT5idXMpOworCS8qIGF1ZGlvIGNvZGVjIHNob3VsZCBvdmVycmlkZSB0aGUgbWl4ZXIgbmFtZSAqLworCWlmICghZXJyICYmIChjb2RlYy0+YWZnIHx8ICEqY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKSkKKwkJc25wcmludGYoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lLAorCQkJIHNpemVvZihjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpLAorCQkJICIlcyAlcyIsIGNvZGVjLT52ZW5kb3JfbmFtZSwgY29kZWMtPmNoaXBfbmFtZSk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfY29uZmlndXJlKTsKQEAgLTEzMjcsMTEgKzEzMjcsMTMgQEAKICAqLwogdTMyIHNuZF9oZGFfcGluX3NlbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQogewotCXUzMiBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCXUzMiBwaW5jYXA7CiAKLQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1RSSUdfUkVRKSAvKiBuZWVkIHRyaWdnZXI/ICovCi0JCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOwotCisJaWYgKCFjb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSkgeworCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1RSSUdfUkVRKSAvKiBuZWVkIHRyaWdnZXI/ICovCisJCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKKwl9CiAJcmV0dXJuIHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAogCQkJCSAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCmluZGV4IDFkNTQxYjcuLjBhNzcwYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaApAQCAtODE3LDYgKzgxNyw3IEBACiAJdW5zaWduZWQgaW50IHBpbl9hbXBfd29ya2Fyb3VuZDoxOyAvKiBwaW4gb3V0LWFtcCB0YWtlcyBpbmRleAogCQkJCQkgICAgKiAoZS5nLiBDb25leGFudCBjb2RlY3MpCiAJCQkJCSAgICAqLworCXVuc2lnbmVkIGludCBub190cmlnZ2VyX3NlbnNlOjE7IC8qIGRvbid0IHRyaWdnZXIgYXQgcGluLXNlbnNpbmcgKi8KICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJdW5zaWduZWQgaW50IHBvd2VyX29uIDoxOwkvKiBjdXJyZW50IChnbG9iYWwpIHBvd2VyLXN0YXRlICovCiAJdW5zaWduZWQgaW50IHBvd2VyX3RyYW5zaXRpb24gOjE7IC8qIHBvd2VyLXN0YXRlIGluIHRyYW5zaXRpb24gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDliNTZmOTMuLmVjOWMzNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMzU2LDYgKzM1Niw3IEBACiAJCQkJCSAqLwogCXVuc2lnbmVkIGNoYXIgc3RyZWFtX3RhZzsJLyogYXNzaWduZWQgc3RyZWFtICovCiAJdW5zaWduZWQgY2hhciBpbmRleDsJCS8qIHN0cmVhbSBpbmRleCAqLworCWludCBkZXZpY2U7CQkJLyogbGFzdCBkZXZpY2UgbnVtYmVyIGFzc2lnbmVkIHRvICovCiAKIAl1bnNpZ25lZCBpbnQgb3BlbmVkIDoxOwogCXVuc2lnbmVkIGludCBydW5uaW5nIDoxOwpAQCAtMTQ0MSwxMCArMTQ0MiwxMyBAQAogICovCiAKIC8qIGFzc2lnbiBhIHN0cmVhbSBmb3IgdGhlIFBDTSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgYXp4X2RldiAqYXp4X2Fzc2lnbl9kZXZpY2Uoc3RydWN0IGF6eCAqY2hpcCwgaW50IHN0cmVhbSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF6eF9kZXYgKgorYXp4X2Fzc2lnbl9kZXZpY2Uoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJaW50IGRldiwgaSwgbnVtczsKLQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwlzdHJ1Y3QgYXp4X2RldiAqcmVzID0gTlVMTDsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CiAJCWRldiA9IGNoaXAtPnBsYXliYWNrX2luZGV4X29mZnNldDsKIAkJbnVtcyA9IGNoaXAtPnBsYXliYWNrX3N0cmVhbXM7CiAJfSBlbHNlIHsKQEAgLTE0NTMsMTAgKzE0NTcsMTUgQEAKIAl9CiAJZm9yIChpID0gMDsgaSA8IG51bXM7IGkrKywgZGV2KyspCiAJCWlmICghY2hpcC0+YXp4X2RldltkZXZdLm9wZW5lZCkgewotCQkJY2hpcC0+YXp4X2RldltkZXZdLm9wZW5lZCA9IDE7Ci0JCQlyZXR1cm4gJmNoaXAtPmF6eF9kZXZbZGV2XTsKKwkJCXJlcyA9ICZjaGlwLT5henhfZGV2W2Rldl07CisJCQlpZiAocmVzLT5kZXZpY2UgPT0gc3Vic3RyZWFtLT5wY20tPmRldmljZSkKKwkJCQlicmVhazsKIAkJfQotCXJldHVybiBOVUxMOworCWlmIChyZXMpIHsKKwkJcmVzLT5vcGVuZWQgPSAxOworCQlyZXMtPmRldmljZSA9IHN1YnN0cmVhbS0+cGNtLT5kZXZpY2U7CisJfQorCXJldHVybiByZXM7CiB9CiAKIC8qIHJlbGVhc2UgdGhlIGFzc2lnbmVkIHN0cmVhbSAqLwpAQCAtMTUwNSw3ICsxNTE0LDcgQEAKIAlpbnQgZXJyOwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+b3Blbl9tdXRleCk7Ci0JYXp4X2RldiA9IGF6eF9hc3NpZ25fZGV2aWNlKGNoaXAsIHN1YnN0cmVhbS0+c3RyZWFtKTsKKwlhenhfZGV2ID0gYXp4X2Fzc2lnbl9kZXZpY2UoY2hpcCwgc3Vic3RyZWFtKTsKIAlpZiAoYXp4X2RldiA9PSBOVUxMKSB7CiAJCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0yMzIyLDYgKzIzMzEsNyBAQAogICogd2hpdGUvYmxhY2stbGlzdCBmb3IgZW5hYmxlX21zaQogICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX2JsYWNrX2xpc3RbXSBfX2RldmluaXRkYXRhID0geworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZjIsICJBU1VTIiwgMCksIC8qIEF0aGxvbjY0IFgyICsgbnZpZGlhICovCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IDFhMzYxMzcuLjY5YTk0MWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtMTE4Niw2ICsxMTg2LDggQEAKIAkgKi8KIAlzcGVjLT5tdWx0aW91dC5ub19zaGFyZV9zdHJlYW0gPSAxOwogCisJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNzEsNiArMTM3Myw4IEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWQxOTh4X3BhdGNoX29wczsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODEzLDYgKzE4MTcsOSBAQAogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxOTgxX2hwX3Vuc29sX2V2ZW50OwogCQlicmVhazsKIAl9CisKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzExOCw2ICszMTI1LDggQEAKICNlbmRpZgogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwNDsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzMwLDYgKzMzMzksOCBAQAogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFkMTk4eF9wYXRjaF9vcHM7CiAKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI4Nyw2ICs0Mjk4LDggQEAKIAkJYnJlYWs7CiAJfQogCisJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2MjMsNiArNDYzNiw5IEBACiAJCXNwZWMtPm1peGVyc1syXSA9IGFkMTg4Ml82c3RhY2tfbWl4ZXJzOwogCQlicmVhazsKIAl9CisKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKaW5kZXggNGIyMDBkYS4uZmUwNDIzYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCkBAIC02Niw2ICs2Niw3IEBACiAvKiBhdmFpbGFibGUgbW9kZWxzICovCiBlbnVtIHsKIAlDUzQyMFhfTUJQNTUsCisJQ1M0MjBYX0lNQUMyNywKIAlDUzQyMFhfQVVUTywKIAlDUzQyMFhfTU9ERUxTCiB9OwpAQCAtODI3LDcgKzgyOCw4IEBACiAJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKIAkJCQkgICAgaHBfcHJlc2VudCA/IDAgOiBQSU5fT1VUKTsKIAl9Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBDUzQyMFhfTUJQNTUpIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID09IENTNDIwWF9NQlA1NSB8fAorCSAgICBzcGVjLT5ib2FyZF9jb25maWcgPT0gQ1M0MjBYX0lNQUMyNykgewogCQl1bnNpZ25lZCBpbnQgZ3BpbyA9IGhwX3ByZXNlbnQgPyAweDAyIDogMHgwODsKIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwMSwgMCwKIAkJCQkgICAgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCBncGlvKTsKQEAgLTEwNjksMTIgKzEwNzEsMTQgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNzNDIweF9tb2RlbHNbQ1M0MjBYX01PREVMU10gPSB7CiAJW0NTNDIwWF9NQlA1NV0gPSAibWJwNTUiLAorCVtDUzQyMFhfSU1BQzI3XSA9ICJpbWFjMjciLAogCVtDUzQyMFhfQVVUT10gPSAiYXV0byIsCiB9OwogCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjczQyMHhfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweGNiNzksICJNYWNCb29rUHJvIDUsNSIsIENTNDIwWF9NQlA1NSksCisJU05EX1BDSV9RVUlSSygweDgwODYsIDB4NzI3MCwgIklNYWMgMjcgSW5jaCIsIENTNDIwWF9JTUFDMjcpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTEwOTcsOCArMTEwMSwyMyBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY3NfcGluY2ZnIGltYWMyN19waW5jZmdzW10gPSB7CisJeyAweDA5LCAweDAxMmI0MDUwIH0sCisJeyAweDBhLCAweDkwMTAwMTQwIH0sCisJeyAweDBiLCAweDkwMTAwMTQyIH0sCisJeyAweDBjLCAweDAxOGIzMDIwIH0sCisJeyAweDBkLCAweDkwYTAwMTEwIH0sCisJeyAweDBlLCAweDQwMDAwMGYwIH0sCisJeyAweDBmLCAweDAxY2JlMDMwIH0sCisJeyAweDEwLCAweDAxNGJlMDYwIH0sCisJeyAweDEyLCAweDAxYWI5MDcwIH0sCisJeyAweDE1LCAweDQwMDAwMGYwIH0sCisJe30gLyogdGVybWluYXRvciAqLworfTsKKwogc3RhdGljIHN0cnVjdCBjc19waW5jZmcgKmNzX3BpbmNmZ3NbQ1M0MjBYX01PREVMU10gPSB7CiAJW0NTNDIwWF9NQlA1NV0gPSBtYnA1NV9waW5jZmdzLAorCVtDUzQyMFhfSU1BQzI3XSA9IGltYWMyN19waW5jZmdzLAogfTsKIAogc3RhdGljIHZvaWQgZml4X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG1vZGVsKQpAQCAtMTEyOCw2ICsxMTQ3LDcgQEAKIAkJZml4X3BpbmNmZyhjb2RlYywgc3BlYy0+Ym9hcmRfY29uZmlnKTsKIAogCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CisJY2FzZSBDUzQyMFhfSU1BQzI3OgogCWNhc2UgQ1M0MjBYX01CUDU1OgogCQkvKiBHUElPMSA9IGhlYWRwaG9uZXMgKi8KIAkJLyogR1BJTzMgPSBzcGVha2VycyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IGEwOWMwM2MuLmM1NzhjMjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgorI2luY2x1ZGUgImhkYV9iZWVwLmgiCiAKICNkZWZpbmUgQ1hUX1BJTl9ESVJfSU4gICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQ1hUX1BJTl9ESVJfT1VUICAgICAgICAgICAgIDB4MDEKQEAgLTExMSw2ICsxMTIsNyBAQAogCXVuc2lnbmVkIGludCBkZWxsX2F1dG9tdXRlOwogCXVuc2lnbmVkIGludCBwb3J0X2RfbW9kZTsKIAl1bnNpZ25lZCBjaGFyIGV4dF9taWNfYmlhczsKKwl1bnNpZ25lZCBpbnQgZGVsbF92b3N0cm87CiB9OwogCiBzdGF0aWMgaW50IGNvbmV4YW50X3BsYXliYWNrX3BjbV9vcGVuKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCkBAIC00NzYsNiArNDc4LDcgQEAKIAkJc25kX2FycmF5X2ZyZWUoJnNwZWMtPmphY2tzKTsKIAl9CiAjZW5kaWYKKwlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiAJa2ZyZWUoY29kZWMtPnNwZWMpOwogfQogCkBAIC0yMTA5LDkgKzIxMTIsMTIgQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgdmFsOworCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJaW50IGlub3V0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHgxMDApID8KKwkJQUNfQU1QX0dFVF9JTlBVVCA6IEFDX0FNUF9HRVRfT1VUUFVUOwogCi0JdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE3LCAwLAotCQlBQ19WRVJCX0dFVF9BTVBfR0FJTl9NVVRFLCBBQ19BTVBfR0VUX09VVFBVVCk7CisJdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCUFDX1ZFUkJfR0VUX0FNUF9HQUlOX01VVEUsIGlub3V0KTsKIAogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB2YWwgJiBBQ19BTVBfR0FJTjsKIAlyZXR1cm4gMDsKQEAgLTIxMjMsNiArMjEyOSw5IEBACiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0OwogCXVuc2lnbmVkIGludCBpZHg7CisJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKwlpbnQgaW5vdXQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweDEwMCkgPworCQlBQ19BTVBfU0VUX0lOUFVUIDogQUNfQU1QX1NFVF9PVVRQVVQ7CiAKIAlpZiAoIWltdXgtPm51bV9pdGVtcykKIAkJcmV0dXJuIDA7CkBAIC0yMTMwLDkgKzIxMzksOSBAQAogCWlmIChpZHggPj0gaW11eC0+bnVtX2l0ZW1zKQogCQlpZHggPSBpbXV4LT5udW1faXRlbXMgLSAxOwogCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCiAJCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBBQ19BTVBfU0VUX09VVFBVVCB8CisJCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBpbm91dCB8CiAJCQlpbXV4LT5pdGVtc1tpZHhdLmluZGV4KTsKIAogCXJldHVybiAxOwpAQCAtMjIwMSwxMCArMjIxMCwxMSBAQAogCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQW5hbG9nIE1pYyBCb29zdCBDYXB0dXJlIEVudW0iLAorCQkubmFtZSA9ICJFeHQgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCiAJCS5pbmZvID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1faW5mbywKIAkJLmdldCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX2dldCwKIAkJLnB1dCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDE3LAogCX0sCiAKIAlIREFfQklORF9WT0woIkNhcHR1cmUgVm9sdW1lIiwgJmN4dDUwNjZfYmluZF9jYXB0dXJlX3ZvbF9vdGhlcnMpLApAQCAtMjIxMiw2ICsyMjIyLDE5IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X3Zvc3Ryb19taXhlcnNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJJbnQgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCisJCS5pbmZvID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDIzIHwgMHgxMDAsCisJfSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMSwgMHgwLCBIREFfT1VUUFVUKSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwgLyogUG9ydCBCICovCiAJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sIC8qIFBvcnQgQyAqLwpAQCAtMjM5NywxMSArMjQyMCwxNiBAQAogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDY2X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwogCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBpbml0XG4iKTsKIAljb25leGFudF9pbml0KGNvZGVjKTsKIAlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkgewogCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKKwkJaWYgKHNwZWMtPmRlbGxfdm9zdHJvKQorCQkJY3h0NTA2Nl92b3N0cm9fYXV0b21pYyhjb2RlYyk7CisJCWVsc2UKKwkJCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjUwMCw3ICsyNTI4LDEwIEBACiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdm9zdHJvOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl92b3N0cm9fbWl4ZXJzOwogCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7CisJCXNwZWMtPmRlbGxfdm9zdHJvID0gMTsKKwkJc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTMpOwogCiAJCS8qIG5vIFMvUERJRiBvdXQgKi8KIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBhZWVkNGNjLi5jNzQ2NTA1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTMxLDggKzEzMSw4IEBACiBlbnVtIHsKIAlBTEMyNjlfQkFTSUMsCiAJQUxDMjY5X1FVQU5UQV9GTDEsCi0JQUxDMjY5X0FTVVNfRUVFUENfUDcwMywKLQlBTEMyNjlfQVNVU19FRUVQQ19QOTAxLAorCUFMQzI2OV9BU1VTX0FNSUMsCisJQUxDMjY5X0FTVVNfRE1JQywKIAlBTEMyNjlfRlVKSVRTVSwKIAlBTEMyNjlfTElGRUJPT0ssCiAJQUxDMjY5X0FVVE8sCkBAIC0xODgsNiArMTg4LDggQEAKIAlBTEM2NjNfQVNVU19NT0RFNCwKIAlBTEM2NjNfQVNVU19NT0RFNSwKIAlBTEM2NjNfQVNVU19NT0RFNiwKKwlBTEM2NjNfQVNVU19NT0RFNywKKwlBTEM2NjNfQVNVU19NT0RFOCwKIAlBTEMyNzJfREVMTCwKIAlBTEMyNzJfREVMTF9aTTEsCiAJQUxDMjcyX1NBTVNVTkdfTkMxMCwKQEAgLTMzNSw2ICszMzcsOSBAQAogCS8qIGhvb2tzICovCiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCXZvaWQgKCp1bnNvbF9ldmVudCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpOworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBwb3dlcik7CisjZW5kaWYKIAogCS8qIGZvciBwaW4gc2Vuc2luZyAqLwogCXVuc2lnbmVkIGludCBzZW5zZV91cGRhdGVkOiAxOwpAQCAtMzg2LDYgKzM5MSw3IEBACiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3RydWN0IGhkYV9hbXBfbGlzdCAqbG9vcGJhY2tzOworCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKTsKICNlbmRpZgogfTsKIApAQCAtODk4LDYgKzkwNCw3IEBACiAJc3BlYy0+dW5zb2xfZXZlbnQgPSBwcmVzZXQtPnVuc29sX2V2ZW50OwogCXNwZWMtPmluaXRfaG9vayA9IHByZXNldC0+aW5pdF9ob29rOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwlzcGVjLT5wb3dlcl9ob29rID0gcHJlc2V0LT5wb3dlcl9ob29rOwogCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBwcmVzZXQtPmxvb3BiYWNrczsKICNlbmRpZgogCkBAIC0xNjYzLDkgKzE2NzAsNiBAQAogLyogIHNvbWUgYml0IGhlcmUgZGlzYWJsZXMgdGhlIG90aGVyIERBQ3MuIEluaXQ9MHg0OTAwICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MDh9LAogCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MDAwMH0sCi0vKiBFbmFibGUgYW1wbGlmaWVycyAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwMn0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDAyfSwKIC8qIERNSUMgZml4CiAgKiBUaGlzIGxhcHRvcCBoYXMgYSBzdGVyZW8gZGlnaXRhbCBtaWNyb3Bob25lLiBUaGUgbWljcyBhcmUgb25seSAxY20gYXBhcnQKICAqIHdoaWNoIG1ha2VzIHRoZSBzdGVyZW8gdXNlbGVzcy4gSG93ZXZlciwgZWl0aGVyIHRoZSBtaWMgb3IgdGhlIEFMQzg4OQpAQCAtMTc3OCw2ICsxNzgyLDI1IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMSwgMHgwLAorCQlIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDEsIDIsIEhEQV9JTlBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMiwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworCiBzdGF0aWMgdm9pZCBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0xODA4LDYgKzE4MzEsMTYgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MWI7CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgdm9pZCBhbGM4ODlfcG93ZXJfZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQoreworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIHBvd2VyID8gMiA6IDApOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTUsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIHBvd2VyID8gMiA6IDApOworfQorI2VuZGlmCisKIC8qCiAgKiBBTEM4ODAgMy1zdGFjayBtb2RlbAogICoKQEAgLTM2MDEsMTIgKzM2MzQsMjkgQEAKIAlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgaW50IGFsY19zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKHNwZWMgJiYgc3BlYy0+cG93ZXJfaG9vaykKKwkJc3BlYy0+cG93ZXJfaG9vayhjb2RlYywgMCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCiBzdGF0aWMgaW50IGFsY19yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworI2VuZGlmCiAJY29kZWMtPnBhdGNoX29wcy5pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJaWYgKHNwZWMgJiYgc3BlYy0+cG93ZXJfaG9vaykKKwkJc3BlYy0+cG93ZXJfaG9vayhjb2RlYywgMSk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMzYyMyw2ICszNjczLDcgQEAKIAkucmVzdW1lID0gYWxjX3Jlc3VtZSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkuc3VzcGVuZCA9IGFsY19zdXNwZW5kLAogCS5jaGVja19wb3dlcl9zdGF0dXMgPSBhbGNfY2hlY2tfcG93ZXJfc3RhdHVzLAogI2VuZGlmCiB9OwpAQCAtODkxOSw3ICs4OTcwLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgwNDBkLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDA1NzksICJNU0kiLCBBTEM4ODNfVEFSR0FfMmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MjhmYiwgIlRhcmdhIFQ4IiwgQUxDODgyX1RBUkdBKSwgLyogTVNJLTEwNDkgVDggICovCi0JU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MmZiMywgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgyZmIzLCAiTVNJIiwgQUxDODgyX0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDY2NjgsICJNU0kiLCBBTEM4ODJfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MzcyOSwgIk1TSSBTNDIwIiwgQUxDODgzX1RBUkdBX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4Mzc4MywgIk5FQyBTOTcwIiwgQUxDODgzX1RBUkdBX0RJRyksCkBAIC05MjgyLDYgKzkzMzMsNyBAQAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkc19hbHQsCiAJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkc19hbHQpLAorCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHMsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4M19ESUdPVVRfTklELAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCkBAIC05Mzc4LDEwICs5NDMwLDExIEBACiAJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV84OTMwR10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4OF9iYXNlX21peGVyLAorCQkubWl4ZXJzID0geyBhbGM4ODlfYWNlcl9hc3BpcmVfODkzMGdfbWl4ZXIsCiAJCQkJYWxjODgzX2NobW9kZV9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMsIGFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzLAotCQkJCWFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ192ZXJicyB9LAorCQkJCWFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ192ZXJicywKKwkJCQlhbGM4ODlfZWFwZF92ZXJic30sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODlfYWRjX25pZHMpLApAQCAtOTM5OCw2ICs5NDUxLDkgQEAKIAkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJCS5wb3dlcl9ob29rID0gYWxjODg5X3Bvd2VyX2VhcGQsCisjZW5kaWYKIAl9LAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNzczMEddID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzZjaF9taXhlciwKQEAgLTk0MjgsNiArOTQ4NCw3IEBACiAJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKIAkJLmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzX2FsdCwKIAkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzX2FsdCksCisJCS5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkcywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M19zaXhzdGFja19tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLApAQCAtOTQ4OSw2ICs5NTQ2LDcgQEAKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHNfYWx0LAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHNfYWx0KSwKKwkJLmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2xlbm92b18xMDFlX2NhcHR1cmVfc291cmNlLApAQCAtOTY2OCw2ICs5NzI2LDcgQEAKIAkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCiAJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkcywKIAkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKSwKKwkJLmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzLAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4OUFfbWIzMV82Y2hfbW9kZXMsCkBAIC0xMDY3OCw2ICsxMDczNywxMyBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9sZW5vdm9fMzAwMF9pbml0X3ZlcmJzW10gPSB7CisJLyogRnJvbnQgTWljIHBpbjogaW5wdXQgdnJlZiBhdCA1MCUgKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjUwfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2Ml9mdWppdHN1X2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAzLAogCS5pdGVtcyA9IHsKQEAgLTExNzIwLDcgKzExNzg2LDggQEAKIAlbQUxDMjYyX0xFTk9WT18zMDAwXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYyX2xlbm92b18zMDAwX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfaW5pdF92ZXJicywgYWxjMjYyX0VBUERfdmVyYnMsCi0JCQkJYWxjMjYyX2xlbm92b18zMDAwX3Vuc29sX3ZlcmJzIH0sCisJCQkJYWxjMjYyX2xlbm92b18zMDAwX3Vuc29sX3ZlcmJzLAorCQkJCWFsYzI2Ml9sZW5vdm9fMzAwMF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjYyX2RhY19uaWRzLAogCQkuaHBfbmlkID0gMHgwMywKQEAgLTEyODU3LDcgKzEyOTI0LDcgQEAKIAlpbnQgYm9hcmRfY29uZmlnOwogCWludCBpLCBoYXNfYmVlcCwgZXJyOwogCi0Jc3BlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEzMjMyLDEwICsxMzI5OSwxMiBAQAogLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwogc3RhdGljIHZvaWQgYWxjMjY5X3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IG5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAl1bnNpZ25lZCBjaGFyIGJpdHM7CiAKLQlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNSk7CisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIG5pZCk7CiAJYml0cyA9IHByZXNlbnQgPyBBTVBfSU5fTVVURSgwKSA6IDA7CiAJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDBjLCBIREFfSU5QVVQsIDAsCiAJCQkJQU1QX0lOX01VVEUoMCksIGJpdHMpOwpAQCAtMTM0NjAsOCArMTM1MjksOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmFsYzI2OV9tb2RlbHNbQUxDMjY5X01PREVMX0xBU1RdID0gewogCVtBTEMyNjlfQkFTSUNdCQkJPSAiYmFzaWMiLAogCVtBTEMyNjlfUVVBTlRBX0ZMMV0JCT0gInF1YW50YSIsCi0JW0FMQzI2OV9BU1VTX0VFRVBDX1A3MDNdCT0gImVlZXBjLXA3MDMiLAotCVtBTEMyNjlfQVNVU19FRUVQQ19QOTAxXQk9ICJlZWVwYy1wOTAxIiwKKwlbQUxDMjY5X0FTVVNfQU1JQ10JCT0gImFzdXMtYW1pYyIsCisJW0FMQzI2OV9BU1VTX0RNSUNdCQk9ICJhc3VzLWRtaWMiLAogCVtBTEMyNjlfRlVKSVRTVV0JCT0gImZ1aml0c3UiLAogCVtBTEMyNjlfTElGRUJPT0tdCQk9ICJsaWZlYm9vayIsCiAJW0FMQzI2OV9BVVRPXQkJCT0gImF1dG8iLApAQCAtMTM0NzAsMTggKzEzNTM5LDQxIEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzYmY4LCAiUXVhbnRhIEZMMSIsIEFMQzI2OV9RVUFOVEFfRkwxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzMwLCAiQVNVUyBFZWVwYyBQNzAzIFA5MDBBIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ODMsICJBU1VTIEY4MVNlIiwgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YTMsICJBU1VTIEY1USIsIEFMQzI2OV9BU1VTX0VFRVBDX1A3MDMpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzIzLCAiQVNVUyBQODAiLCBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKLSAgICAgICAgU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc3MywgIkFTVVMgVTIwQSIsIEFMQzI2OV9BU1VTX0VFRVBDX1A3MDMpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzQzLCAiQVNVUyBVODAiLCBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKLSAgICAgICAgU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY1MywgIkFTVVMgVTUwIiwgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCisJCSAgICAgIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExMzMsICJBU1VTIFVKMjBmdCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyNzMsICJBU1VTIFVMODBKVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyODMsICJBU1VTIFU1M0pjIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2EzLCAiQVNVUyBVTDMwVnQiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzczLCAiQVNVUyBHNzNKWCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzODMsICJBU1VTIFVKMzBKYyIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZDMsICJBU1VTIE42MUpBIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQxMywgIkFTVVMgVUw1MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NDMsICJBU1VTIFVMMzAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDUzLCAiQVNVUyBNNjBKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ODMsICJBU1VTIFVMODAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGYzLCAiQVNVUyBGODNWZiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZTMsICJBU1VTIFVMMjAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNTEzLCAiQVNVUyBVWDMwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVhMywgIkFTVVMgTjYwSnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWIzLCAiQVNVUyBONjBEcCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YzMsICJBU1VTIE43MERlIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVlMywgIkFTVVMgRjgzVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NDMsICJBU1VTIE02MEoiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjkzLCAiQVNVUyBGNTBOIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZhMywgIkFTVVMgRjVRIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZlMywgIkFTVVMgVVg1MCIsIEFMQzI2OV9BU1VTX0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NDMsICJBU1VTIFU4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NzMsICJBU1VTIFUyMEEiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODgzLCAiQVNVUyBGODFTZSIsIEFMQzI2OV9BU1VTX0FNSUMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzMWEsICJBU1VTIEVlZXBjIFA5MDEiLAotCQkgICAgICBBTEMyNjlfQVNVU19FRUVQQ19QOTAxKSwKKwkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM0YSwgIkFTVVMgRWVlcGMgUzEwMSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0VFRVBDX1A5MDEpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmUzLCAiQVNVUyBVWDUwIiwgQUxDMjY5X0FTVVNfRUVFUENfUDkwMSksCisJCSAgICAgIEFMQzI2OV9BU1VTX0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzOTgsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfQVNVU19ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4M2NlLCAiQVNVUyBQMTAwNUhBIiwgQUxDMjY5X0FTVVNfRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDE3MzQsIDB4MTE1ZCwgIkZTQyBBbWlsbyIsIEFMQzI2OV9GVUpJVFNVKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxNDc1LCAiTGlmZWJvb2sgSUNIOU0tYmFzZWQiLCBBTEMyNjlfTElGRUJPT0spLAogCXt9CkBAIC0xMzUxMSw3ICsxMzYwMyw3IEBACiAJCS5zZXR1cCA9IGFsYzI2OV9xdWFudGFfZmwxX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjMjY5X3F1YW50YV9mbDFfaW5pdF9ob29rLAogCX0sCi0JW0FMQzI2OV9BU1VTX0VFRVBDX1A3MDNdID0geworCVtBTEMyNjlfQVNVU19BTUlDXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY5X2VlZXBjX21peGVyIH0sCiAJCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKQEAgLTEzNTI1LDcgKzEzNjE3LDcgQEAKIAkJLnNldHVwID0gYWxjMjY5X2VlZXBjX2FtaWNfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfZWVlcGNfaW5pdGhvb2ssCiAJfSwKLQlbQUxDMjY5X0FTVVNfRUVFUENfUDkwMV0gPSB7CisJW0FMQzI2OV9BU1VTX0RNSUNdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfZWVlcGNfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLApAQCAtMTYxNjAsNiArMTYyNTIsNTIgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjYzX2FzdXNfbW9kZTdfOF9hbGxfYmluZF9zd2l0Y2ggPSB7CisJLm9wcyA9ICZzbmRfaGRhX2JpbmRfc3csCisJLnZhbHVlcyA9IHsKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE0LCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE1LCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE3LCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFiLCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDIxLCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJMAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjYzX2FzdXNfbW9kZTdfOF9zcF9iaW5kX3N3aXRjaCA9IHsKKwkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKKwkudmFsdWVzID0geworCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTcsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQkwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfbW9kZTdfbWl4ZXJbXSA9IHsKKwlIREFfQklORF9TVygiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X2FsbF9iaW5kX3N3aXRjaCksCisJSERBX0JJTkRfVk9MKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsICZhbGM2NjNfYXN1c19iaW5kX21hc3Rlcl92b2wpLAorCUhEQV9CSU5EX1NXKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X3NwX2JpbmRfc3dpdGNoKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lMSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50TWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50TWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfbW9kZThfbWl4ZXJbXSA9IHsKKwlIREFfQklORF9TVygiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X2FsbF9iaW5kX3N3aXRjaCksCisJSERBX0JJTkRfVk9MKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsICZhbGM2NjNfYXN1c19iaW5kX21hc3Rlcl92b2wpLAorCUhEQV9CSU5EX1NXKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X3NwX2JpbmRfc3dpdGNoKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lMSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfY2htb2RlX21peGVyW10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTE2NDQ3LDYgKzE2NTg1LDQ1IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX21vZGU3X2luaXRfdmVyYnNbXSA9IHsKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwJLyogSGVhZHBob25lICovCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg5KX0sCisJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19tb2RlOF9pbml0X3ZlcmJzW10gPSB7CisJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwJLyogSGVhZHBob25lICovCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg5KX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX01JQ19FVkVOVH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKQEAgLTE2NjI2LDYgKzE2ODAzLDU0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBhbGM2NjNfdHdvX2hwX203X3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQxLCBwcmVzZW50MjsKKworCXByZXNlbnQxID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQorCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKKwlwcmVzZW50MiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMSwgMCwKKwkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkKKwkJCSYgQUNfUElOU0VOU0VfUFJFU0VOQ0U7CisKKwlpZiAocHJlc2VudDEgfHwgcHJlc2VudDIpIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOworCX0gZWxzZSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTQsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE3LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFsYzY2M190d29faHBfbThfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDEsIHByZXNlbnQyOworCisJcHJlc2VudDEgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjEsIDAsCisJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApCisJCQkmIEFDX1BJTlNFTlNFX1BSRVNFTkNFOworCXByZXNlbnQyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE1LCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQorCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKKworCWlmIChwcmVzZW50MSB8fCBwcmVzZW50MikgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE0LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJfSBlbHNlIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOworCX0KK30KKwogc3RhdGljIHZvaWQgYWxjNjYzX201MXZhX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQogewpAQCAtMTY2NDUsNyArMTY4NzAsNyBAQAogCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKIAlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOwogCXNwZWMtPmludF9taWMucGluID0gMHgxMjsKLQlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDk7CiAJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCkBAIC0xNjY1Nyw3ICsxNjg4MiwxNyBAQAogCiAvKiAqKioqKioqKioqKioqKioqKiBNb2RlMSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIGFsYzY2M19tb2RlMV91bnNvbF9ldmVudAlhbGM2NjNfbTUxdmFfdW5zb2xfZXZlbnQKLSNkZWZpbmUgYWxjNjYzX21vZGUxX3NldHVwCQlhbGM2NjNfbTUxdmFfc2V0dXAKKworc3RhdGljIHZvaWQgYWxjNjYzX21vZGUxX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmF1dG9fbWljID0gMTsKK30KKwogI2RlZmluZSBhbGM2NjNfbW9kZTFfaW5pdGhvb2sJCWFsYzY2M19tNTF2YV9pbml0aG9vawogCiAvKiAqKioqKioqKioqKioqKioqKiBNb2RlMiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNjY3NCw3ICsxNjkwOSw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2Ml9tb2RlMl9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYyX21vZGUyX3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjJfbW9kZTJfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjY5NSw3ICsxNjkzMCw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlM19zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYzX21vZGUzX3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTNfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjcxNiw3ICsxNjk1MSw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlNF9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYzX21vZGU0X3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTRfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjczNyw3ICsxNjk3Miw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlNV9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYzX21vZGU1X3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTVfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjc1OCw3ICsxNjk5Myw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlNl9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYzX21vZGU2X3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTZfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjc2Niw2ICsxNzAwMSw1MCBAQAogCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogfQogCisvKiAqKioqKioqKioqKioqKioqKiBNb2RlNyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTdfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgIHVuc2lnbmVkIGludCByZXMpCit7CisJc3dpdGNoIChyZXMgPj4gMjYpIHsKKwljYXNlIEFMQzg4MF9IUF9FVkVOVDoKKwkJYWxjNjYzX3R3b19ocF9tN19zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgorCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJfQorfQorCisjZGVmaW5lIGFsYzY2M19tb2RlN19zZXR1cAlhbGM2NjNfbW9kZTFfc2V0dXAKKworc3RhdGljIHZvaWQgYWxjNjYzX21vZGU3X2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWFsYzY2M190d29faHBfbTdfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CisJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqIE1vZGU4ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGFsYzY2M19tb2RlOF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKK3sKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQUxDODgwX0hQX0VWRU5UOgorCQlhbGM2NjNfdHdvX2hwX204X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKKyNkZWZpbmUgYWxjNjYzX21vZGU4X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZThfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWxjNjYzX3R3b19ocF9tOF9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKK30KKwogc3RhdGljIHZvaWQgYWxjNjYzX2c3MXZfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CkBAIC0xNjkwMCw2ICsxNzE3OSw4IEBACiAJW0FMQzY2M19BU1VTX01PREU0XSA9ICJhc3VzLW1vZGU0IiwKIAlbQUxDNjYzX0FTVVNfTU9ERTVdID0gImFzdXMtbW9kZTUiLAogCVtBTEM2NjNfQVNVU19NT0RFNl0gPSAiYXN1cy1tb2RlNiIsCisJW0FMQzY2M19BU1VTX01PREU3XSA9ICJhc3VzLW1vZGU3IiwKKwlbQUxDNjYzX0FTVVNfTU9ERThdID0gImFzdXMtbW9kZTgiLAogCVtBTEMyNzJfREVMTF0JCT0gImRlbGwiLAogCVtBTEMyNzJfREVMTF9aTTFdCT0gImRlbGwtem0xIiwKIAlbQUxDMjcyX1NBTVNVTkdfTkMxMF0JPSAic2Ftc3VuZy1uYzEwIiwKQEAgLTE2OTE2LDEyICsxNzE5NywyMiBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZjMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyMDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMDMsICJBU1VTIEc2MEoiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzMywgIkFTVVMgRzYwSngiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNlMywgIkFTVVMgTjcxSkEiLCBBTEM2NjNfQVNVU19NT0RFNyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ2MywgIkFTVVMgTjcxIiwgQUxDNjYzX0FTVVNfTU9ERTcpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZDMsICJBU1VTIEc3MiIsIEFMQzY2M19BU1VTX01PREU4KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNTYzLCAiQVNVUyBOOTAiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVkMywgIkFTVVMgTjUwU0YgRjUwU0YiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZjMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZmMywgIkFTVVMgSzQwQyBLNTBDIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MzMsICJBU1VTIE44MURlIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjUsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3ODMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3OTMsICJBU1VTIEY1MEdYIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3YjMsICJBU1VTIEY3MFNMIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3YzMsICJBU1VTIFVYMjAiLCBBTEM2NjNfQVNVU19NNTFWQSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTdmMywgIkFTVVMgWDU4TEUiLCBBTEM2NjJfQVNVU19NT0RFMiksCkBAIC0xNzIwNSw2ICsxNzQ5NiwzNiBAQAogCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTZfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTZfaW5pdGhvb2ssCiAJfSwKKwlbQUxDNjYzX0FTVVNfTU9ERTddID0geworCQkubWl4ZXJzID0geyBhbGM2NjNfbW9kZTdfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzY2Ml9hdXRvX2NhcHR1cmVfbWl4ZXIsCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjNfbW9kZTdfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2Ml9kYWNfbmlkcyksCisJCS5ocF9uaWQgPSAweDAzLAorCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF8yY2hfbW9kZXMsCisJCS51bnNvbF9ldmVudCA9IGFsYzY2M19tb2RlN191bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYzX21vZGU3X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjNjYzX21vZGU3X2luaXRob29rLAorCX0sCisJW0FMQzY2M19BU1VTX01PREU4XSA9IHsKKwkJLm1peGVycyA9IHsgYWxjNjYzX21vZGU4X21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGM2NjJfYXV0b19jYXB0dXJlX21peGVyLAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsCisJCQkJYWxjNjYzX21vZGU4X2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAorCQkuaHBfbmlkID0gMHgwMywKKwkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAorCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAorCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbW9kZThfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzY2M19tb2RlOF9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzY2M19tb2RlOF9pbml0aG9vaywKKwl9LAogCVtBTEMyNzJfREVMTF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2M19tNTF2YV9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjMjcyX2F1dG9fY2FwdHVyZV9taXhlciwKQEAgLTE3Njg4LDcgKzE4MDA5LDkgQEAKIAl7IC5pZCA9IDB4MTBlYzAyNjcsIC5uYW1lID0gIkFMQzI2NyIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OCB9LAogCXsgLmlkID0gMHgxMGVjMDI2OCwgLm5hbWUgPSAiQUxDMjY4IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY4IH0sCiAJeyAuaWQgPSAweDEwZWMwMjY5LCAubmFtZSA9ICJBTEMyNjkiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjkgfSwKKwl7IC5pZCA9IDB4MTBlYzAyNzAsIC5uYW1lID0gIkFMQzI3MCIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OSB9LAogCXsgLmlkID0gMHgxMGVjMDI3MiwgLm5hbWUgPSAiQUxDMjcyIiwgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCisJeyAuaWQgPSAweDEwZWMwMjc1LCAubmFtZSA9ICJBTEMyNzUiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjkgfSwKIAl7IC5pZCA9IDB4MTBlYzA4NjEsIC5yZXYgPSAweDEwMDM0MCwgLm5hbWUgPSAiQUxDNjYwIiwKIAkgIC5wYXRjaCA9IHBhdGNoX2FsYzg2MSB9LAogCXsgLmlkID0gMHgxMGVjMDY2MCwgLm5hbWUgPSAiQUxDNjYwLVZEIiwgLnBhdGNoID0gcGF0Y2hfYWxjODYxdmQgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCAzZDU5ZjgzLi4yMjkxYTgzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC0yMTA0LDYgKzIxMDQsNyBAQAogICAgIDEwMjgwMjA0CiAgICAgMTAyODAyMUYKICAgICAxMDI4MDIyOCAoRGVsbCBWb3N0cm8gMTUwMCkKKyAgICAxMDI4MDIyOSAoRGVsbCBWb3N0cm8gMTcwMCkKICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfOTIwNV9tNDJfcGluX2NvbmZpZ3NbMTJdID0gewogCTB4MDMyMTEwMUYsIDB4MDNBMTEwMjAsIDB4NDAwMDAzRkEsIDB4OTAxNzAzMTAsCkBAIC0yMTg5LDYgKzIxOTAsOCBAQAogCQkgICAgICAiRGVsbCBJbnNwaXJvbiIsIFNUQUNfOTIwNV9ERUxMX000NCksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIyOCwKIAkJICAgICAgIkRlbGwgVm9zdHJvIDE1MDAiLCBTVEFDXzkyMDVfREVMTF9NNDIpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMjksCisJCSAgICAgICJEZWxsIFZvc3RybyAxNzAwIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKIAkvKiBHYXRld2F5ICovCiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDU2MCwgIkdhdGV3YXkgVDY4MzRjIiwgU1RBQ185MjA1X0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDA1NjUsICJHYXRld2F5IFQxNjE2IiwgU1RBQ185MjA1X0VBUEQpLApAQCAtMzc3OSwxNSArMzc4MiwxNiBAQAogCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgbmlkKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQkvKiBJRFQvU1RBQyBjb2RlY3MgaGF2ZSBsaW5lYXIgYmVlcCB0b25lIHBhcmFtZXRlciAqLwotCQljb2RlYy0+YmVlcC0+bGluZWFyX3RvbmUgPSAxOwotCQkvKiBpZiBubyBiZWVwIHN3aXRjaCBpcyBhdmFpbGFibGUsIG1ha2UgaXRzIG93biBvbmUgKi8KLQkJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpOwotCQlpZiAoY29kZWMtPmJlZXAgJiYKLQkJICAgICEoKGNhcHMgJiBBQ19BTVBDQVBfTVVURSkgPj4gQUNfQU1QQ0FQX01VVEVfU0hJRlQpKSB7Ci0JCQllcnIgPSBzdGFjOTJ4eF9iZWVwX3N3aXRjaF9jdGwoY29kZWMpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKKwkJaWYgKGNvZGVjLT5iZWVwKSB7CisJCQkvKiBJRFQvU1RBQyBjb2RlY3MgaGF2ZSBsaW5lYXIgYmVlcCB0b25lIHBhcmFtZXRlciAqLworCQkJY29kZWMtPmJlZXAtPmxpbmVhcl90b25lID0gMTsKKwkJCS8qIGlmIG5vIGJlZXAgc3dpdGNoIGlzIGF2YWlsYWJsZSwgbWFrZSBpdHMgb3duIG9uZSAqLworCQkJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpOworCQkJaWYgKCEoY2FwcyAmIEFDX0FNUENBUF9NVVRFKSkgeworCQkJCWVyciA9IHN0YWM5Mnh4X2JlZXBfc3dpdGNoX2N0bChjb2RlYyk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTQ0NDksMTQgKzQ0NTMsNyBAQAogewogCWlmICghbmlkKQogCQlyZXR1cm4gMDsKLQkvKiBOT1RFOiB3ZSBjYW4ndCB1c2Ugc25kX2hkYV9qYWNrX2RldGVjdCgpIGhlcmUgYmVjYXVzZSBTVEFDL0lEVAotCSAqIGNvZGVjcyBiZWhhdmUgd3JvbmdseSB3aGVuIFNFVF9QSU5fU0VOU0UgaXMgdHJpZ2dlcmVkLCBhbHRob3VnaAotCSAqIHRoZSBwaW5jYXAgZ2l2ZXMgVFJJR19SRVEgYml0LgotCSAqLwotCWlmIChzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCi0JICAgIEFDX1BJTlNFTlNFX1BSRVNFTkNFKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgbmlkKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhYzkyeHhfbGluZV9vdXRfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLApAQCAtNDk1OCw2ICs0OTU1LDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MjAwX3Bpbl9uaWRzKTsKIAlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MjAwX3Bpbl9uaWRzOwpAQCAtNTAyMCw2ICs1MDE4LDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MjV4X3Bpbl9uaWRzKTsKIAlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MjV4X3Bpbl9uaWRzOwpAQCAtNTEwNCw2ICs1MTAzLDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyaGQ3M3h4X3NsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDczeHhfcGluX25pZHMpOwpAQCAtNTI1MSw2ICs1MjUxLDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyaGQ4M3h4eF9zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjE7CkBAIC01NDE0LDYgKzU0MTUsNyBAQAogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwogCXNwZWMtPm51bV9waW5zID0gU1RBQzkySEQ3MUJYWF9OVU1fUElOUzsKQEAgLTU2NTcsNiArNTY1OSw3IEBACiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTIyeF9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTIyeF9waW5fbmlkczsKQEAgLTU3NjAsNiArNTc2Myw3IEBACiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5Mjd4X3NsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTI3eF9waW5fbmlkcyk7CkBAIC01ODk0LDYgKzU4OTgsNyBAQAogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyMDVfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyMDVfcGluX25pZHM7CkBAIC02MDQ5LDYgKzYwNTQsNyBAQAogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTg3Ml9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTg3Ml9waW5fbmlkczsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKaW5kZXggZDA1N2U2NC4uNWNmYTYwOCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkJCXJldHVybiAwOyAvKiBhbHJlYWR5IGVub3VnaCBsYXJnZSAqLwogCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CiAJfQotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY18zMihzaXplKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfMzJfdXNlcihzaXplKTsKIAlpZiAoISBydW50aW1lLT5kbWFfYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jIGIvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKaW5kZXggNjliZDBhYy4uYTFiYmUxNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKQEAgLTEwMiw2ICsxMDIsMTIgQEAKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIAorCXJldCA9IHNuZF9zb2NfbmV3X2FjOTdfY29kZWMoY29kZWMsICZzb2NfYWM5N19vcHMsIDApOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogZmFpbGVkIHRvIGluaXQgZ2VuIGFjOTcgZ2x1ZVxuIik7CisJCWdvdG8gZXJyOworCX0KKwogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMKaW5kZXggYjY5ODYxZC4uM2VmMTZiYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5jCkBAIC00NzAsNyArNDcwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWs0NjQyX21vZGluaXQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKIAlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYWs0NjQyX2kyY19kcml2ZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMKaW5kZXggYmJjNzJjMi4uODFiOGM5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zdGFjOTc2Ni5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3RhYzk3NjYuYwpAQCAtMTkxLDYgKzE5MSw3IEBACiAJdnJhID0gc3RhYzk3NjZfYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7CiAKIAl2cmEgfD0gMHgxOyAvKiBlbmFibGUgdmFyaWFibGUgcmF0ZSBhdWRpbyAqLworCXZyYSAmPSB+MHg0OyAvKiBkaXNhYmxlIFNQRElGIG91dHB1dCAqLwogCiAJc3RhYzk3NjZfYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIHZyYSk7CiAKQEAgLTIyMSwyMiArMjIyLDYgQEAKIAlyZXR1cm4gc3RhYzk3NjZfYWM5N193cml0ZShjb2RlYywgcmVnLCBydW50aW1lLT5yYXRlKTsKIH0KIAotc3RhdGljIGludCBhYzk3X2RpZ2l0YWxfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXVuc2lnbmVkIHNob3J0IHZyYTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCQl2cmEgPSBzdGFjOTc2Nl9hYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKLQkJdnJhICY9ICEweDA0OwotCQlzdGFjOTc2Nl9hYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUywgdnJhKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHN0YWM5NzY2X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKQEAgLTMxNSw3ICszMDAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzdGFjOTc2Nl9kYWlfb3BzX2RpZ2l0YWwgPSB7CiAJLnByZXBhcmUgPSBhYzk3X2RpZ2l0YWxfcHJlcGFyZSwKLQkudHJpZ2dlciA9IGFjOTdfZGlnaXRhbF90cmlnZ2VyLAogfTsKIAogc3RydWN0IHNuZF9zb2NfZGFpIHN0YWM5NzY2X2RhaVtdID0gewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKaW5kZXggMjY1ZTY4Yy4uYWY4Y2I2OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCkBAIC00MjQsMjMgKzQyNCwyMyBAQAogCiAJLyogZmlsdGVyIGNvZWZmaWNpZW50ICovCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV84MDAwOgorCWNhc2UgODAwMDoKIAkJYWRuIHw9IDB4NSA8PCAxOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzExMDI1OgorCWNhc2UgMTEwMjU6CiAJCWFkbiB8PSAweDQgPDwgMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV8xNjAwMDoKKwljYXNlIDE2MDAwOgogCQlhZG4gfD0gMHgzIDw8IDE7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfMjIwNTA6CisJY2FzZSAyMjA1MDoKIAkJYWRuIHw9IDB4MiA8PCAxOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzMyMDAwOgorCWNhc2UgMzIwMDA6CiAJCWFkbiB8PSAweDEgPDwgMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV80NDEwMDoKLQljYXNlIFNORFJWX1BDTV9SQVRFXzQ4MDAwOgorCWNhc2UgNDQxMDA6CisJY2FzZSA0ODAwMDoKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYwppbmRleCAzZDg1MGI5Li4zMWUzOWZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKQEAgLTM3OCwyMyArMzc4LDIzIEBACiAJCWlmYWNlIHw9ICgxIDw8IDkpOwogCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV84MDAwOgorCWNhc2UgODAwMDoKIAkJYWRkY250cmwgfD0gKDB4NSA8PCAxKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV8xMTAyNToKKwljYXNlIDExMDI1OgogCQlhZGRjbnRybCB8PSAoMHg0IDw8IDEpOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzE2MDAwOgorCWNhc2UgMTYwMDA6CiAJCWFkZGNudHJsIHw9ICgweDMgPDwgMSk7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfMjIwNTA6CisJY2FzZSAyMjA1MDoKIAkJYWRkY250cmwgfD0gKDB4MiA8PCAxKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV8zMjAwMDoKKwljYXNlIDMyMDAwOgogCQlhZGRjbnRybCB8PSAoMHgxIDw8IDEpOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzQ0MTAwOgotCWNhc2UgU05EUlZfUENNX1JBVEVfNDgwMDA6CisJY2FzZSA0NDEwMDoKKwljYXNlIDQ4MDAwOgogCQlicmVhazsKIAl9CiAJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX0FERENOVFJMLCBhZGRjbnRybCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYwppbmRleCA4MWM1N2I1Li44ODEyNzUxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIH07CiAKICNkZWZpbmUgV004OTc0X1BPV0VSMV9CSUFTRU4gIDB4MDgKLSNkZWZpbmUgV004OTc0X1BPV0VSMV9CVUZJT0VOIDB4MTAKKyNkZWZpbmUgV004OTc0X1BPV0VSMV9CVUZJT0VOIDB4MDQKIAogc3RydWN0IHdtODk3NF9wcml2IHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKQEAgLTQ4MiwyMyArNDgyLDIzIEBACiAKIAkvKiBmaWx0ZXIgY29lZmZpY2llbnQgKi8KIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzgwMDA6CisJY2FzZSA4MDAwOgogCQlhZG4gfD0gMHg1IDw8IDE7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfMTEwMjU6CisJY2FzZSAxMTAyNToKIAkJYWRuIHw9IDB4NCA8PCAxOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzE2MDAwOgorCWNhc2UgMTYwMDA6CiAJCWFkbiB8PSAweDMgPDwgMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV8yMjA1MDoKKwljYXNlIDIyMDUwOgogCQlhZG4gfD0gMHgyIDw8IDE7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfMzIwMDA6CisJY2FzZSAzMjAwMDoKIAkJYWRuIHw9IDB4MSA8PCAxOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzQ0MTAwOgotCWNhc2UgU05EUlZfUENNX1JBVEVfNDgwMDA6CisJY2FzZSA0NDEwMDoKKwljYXNlIDQ4MDAwOgogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCmluZGV4IDBhYzEyMTUuLmUyMzdiZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwpAQCAtNDYzLDcgKzQ2Myw4IEBACiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKLQlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKKwlpZiAocmVnIDwgMHg3YykKKwkJc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CiAJcmVnID0gcmVnID4+IDE7CiAJaWYgKHJlZyA8IChBUlJBWV9TSVpFKHdtOTcxMl9yZWcpKSkKIAkJY2FjaGVbcmVnXSA9IHZhbDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYyBiL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYwppbmRleCAwMjY3ZDJkLi4wN2QyYTI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKKysrIGIvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jCkBAIC0xODAsNyArMTgwLDggQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CiAKIAkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KLQlyZXR1cm4gY29kZWNfZGFpLT5vcHMtPnNldF9wbGwoY29kZWNfZGFpLCBJR05PUkVEX0FSRywgMCwgMCk7CisJcmV0dXJuIGNvZGVjX2RhaS0+b3BzLT5zZXRfcGxsKGNvZGVjX2RhaSwgSUdOT1JFRF9BUkcsIElHTk9SRURfQVJHLAorCQkJCSAgICAgICAwLCAwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLWFrNDY0Mi5jCmluZGV4IGM3YWYwOTcuLjUyNjNhYjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS1hazQ2NDIuYwpAQCAtNDIsNDIgKzQyLDEyIEBACiAJLmNvZGVjX2Rldgk9ICZzb2NfY29kZWNfZGV2X2FrNDY0MiwKIH07CiAKLSNkZWZpbmUgQUs0NjQyX0JVUyAwCi0jZGVmaW5lIEFLNDY0Ml9BRFIgMHgxMgotc3RhdGljIGludCBhazQ2NDJfYWRkX2kyY19kZXZpY2Uodm9pZCkKLXsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCWluZm8uYWRkciA9IEFLNDY0Ml9BRFI7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJhazQ2NDIiLCBJMkNfTkFNRV9TSVpFKTsKLQotCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoQUs0NjQyX0JVUyk7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXJcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7Ci0JaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCWlmICghY2xpZW50KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJjYW4ndCBhZGQgaTJjIGRldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZnNpX3NuZF9kZXZpY2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGZzaV9hazQ2NDJfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAtRU5PTUVNOwogCi0JYWs0NjQyX2FkZF9pMmNfZGV2aWNlKCk7Ci0KIAlmc2lfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghZnNpX3NuZF9kZXZpY2UpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS5jIGIvc291bmQvc29jL3NoL2ZzaS5jCmluZGV4IDljNDljMTEuLjQyODEzYjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKQEAgLTg3Niw3ICs4NzYsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghcmVzIHx8ICFpcnEpIHsKKwlpZiAoIXJlcyB8fCAoaW50KWlycSA8PSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vdCBlbm91Z2ggRlNJIHBsYXRmb3JtIHJlc291cmNlcy5cbiIpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IGIwNzRhNTkuLjQ5NjNkZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC03NTIsNyArNzUyLDcgQEAKIAkJCXJldHVybiAwOyAvKiBhbHJlYWR5IGxhcmdlIGVub3VnaCAqLwogCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CiAJfQotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXplKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfdXNlcihzaXplKTsKIAlpZiAoIXJ1bnRpbWUtPmRtYV9hcmVhKQogCQlyZXR1cm4gLUVOT01FTTsKIAlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggNzgxNGRiYi4uNjUyYTQ3MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0zNDMsMTMgKzM0MywxOCBAQAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9iaXRvcHMuaAorTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9idWcuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9zd2FiLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vc3lzdGVtLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCiBMSUJfSCArPSBwZXJmLmgKK0xJQl9IICs9IHV0aWwvY2FjaGUuaAorTElCX0ggKz0gdXRpbC9jYWxsY2hhaW4uaAorTElCX0ggKz0gdXRpbC9kZWJ1Zy5oCiBMSUJfSCArPSB1dGlsL2RlYnVnZnMuaAogTElCX0ggKz0gdXRpbC9ldmVudC5oCitMSUJfSCArPSB1dGlsL2V4ZWNfY21kLmgKIExJQl9IICs9IHV0aWwvdHlwZXMuaAogTElCX0ggKz0gdXRpbC9sZXZlbnNodGVpbi5oCiBMSUJfSCArPSB1dGlsL3BhcnNlLW9wdGlvbnMuaApAQCAtMzYyLDYgKzM2Nyw3IEBACiBMSUJfSCArPSB1dGlsL3N0cmJ1Zi5oCiBMSUJfSCArPSB1dGlsL3N0cmluZy5oCiBMSUJfSCArPSB1dGlsL3N0cmxpc3QuaAorTElCX0ggKz0gdXRpbC9zdmdoZWxwZXIuaAogTElCX0ggKz0gdXRpbC9ydW4tY29tbWFuZC5oCiBMSUJfSCArPSB1dGlsL3NpZ2NoYWluLmgKIExJQl9IICs9IHV0aWwvc3ltYm9sLmgKQEAgLTM3MCw2ICszNzYsOCBAQAogTElCX0ggKz0gdXRpbC9zb3J0LmgKIExJQl9IICs9IHV0aWwvaGlzdC5oCiBMSUJfSCArPSB1dGlsL3RocmVhZC5oCitMSUJfSCArPSB1dGlsL3RyYWNlLWV2ZW50LmgKK0xJQl9IICs9IHV0aWwvdHJhY2UtZXZlbnQtcGVybC5oCiBMSUJfSCArPSB1dGlsL3Byb2JlLWZpbmRlci5oCiBMSUJfSCArPSB1dGlsL3Byb2JlLWV2ZW50LmgKIApAQCAtNDg3LDEwICs0OTUsMTEgQEAKIAltc2cgOj0gJChlcnJvciBObyBsaWJlbGYuaC9saWJlbGYgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGxpYmVsZi1kZXYvZWxmdXRpbHMtbGliZWxmLWRldmVsIGFuZCBnbGliYy1kZXZbZWxdKTsKIGVuZGlmCiAKLWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJkd2FyZi9kd2FyZi5oPic7IGVjaG8gJ1wjaW5jbHVkZSA8bGliZHdhcmYvbGliZHdhcmYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IER3YXJmX0RlYnVnIGRiZzsgRHdhcmZfRXJyb3IgZXJyOyBEd2FyZl9SYW5nZXMgKnJuZzsgZHdhcmZfaW5pdCgwLCBEV19ETENfUkVBRCwgMCwgMCwgJmRiZywgJmVycik7IGR3YXJmX2dldF9yYW5nZXMoZGJnLCAwLCAmcm5nLCAwLCAwLCAmZXJyKTsgcmV0dXJuIChsb25nKWRiZzsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWxkd2FyZiAtbGVsZiAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKK2lmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpZm5kZWYgX01JUFNfU1pMT05HJzsgZWNobyAnXCNkZWZpbmUgX01JUFNfU1pMT05HIDAnOyBlY2hvICdcI2VuZGlmJzsgZWNobyAnXCNpbmNsdWRlIDxkd2FyZi5oPic7IGVjaG8gJ1wjaW5jbHVkZSA8bGliZHdhcmYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IER3YXJmX0RlYnVnIGRiZzsgRHdhcmZfRXJyb3IgZXJyOyBEd2FyZl9SYW5nZXMgKnJuZzsgZHdhcmZfaW5pdCgwLCBEV19ETENfUkVBRCwgMCwgMCwgJmRiZywgJmVycik7IGR3YXJmX2dldF9yYW5nZXMoZGJnLCAwLCAmcm5nLCAwLCAwLCAmZXJyKTsgcmV0dXJuIChsb25nKWRiZzsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUkvdXNyL2luY2x1ZGUvbGliZHdhcmYgLWxkd2FyZiAtbGVsZiAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKIAltc2cgOj0gJCh3YXJuaW5nIE5vIGxpYmR3YXJmLmggZm91bmQgb3Igb2xkIGxpYmR3YXJmLmggZm91bmQsIGRpc2FibGVzIGR3YXJmIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGxpYmR3YXJmLWRldi9saWJkd2FyZi1kZXZlbCA+PSAyMDA4MTIzMSk7CiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCRFdBUkYKIGVsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvbGliZHdhcmYKIAlFWFRMSUJTICs9IC1sZWxmIC1sZHdhcmYKIAlMSUJfT0JKUyArPSB1dGlsL3Byb2JlLWZpbmRlci5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCmluZGV4IGU2OTNlNjcuLjFlOTlhYzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKQEAgLTE3LDcgKzE3LDcgQEAKIHN0YXRpYyBjaGFyIGNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CiBzdGF0aWMgaW50IGZvcmNlOwogCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnVpbGRpZF9saXN0X3VzYWdlW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWxkaWRfbGlzdF91c2FnZVtdID0gewogCSJwZXJmIGJ1aWxkaWQtbGlzdCBbPG9wdGlvbnM+XSIsCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCmluZGV4IDRkMzNiNTUuLmJkNzFiOGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwpAQCAtMTg5LDggKzE4OSw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGRpZmZfdXNhZ2VbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGlmZl91c2FnZVtdID0gewogCSJwZXJmIGRpZmYgWzxvcHRpb25zPl0gW29sZF9maWxlXSBbbmV3X2ZpbGVdIiwKKwlOVUxMLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKaW5kZXggZmMyMWFkNy4uN2NlYjc0MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAlpZiAoZGF0YSAmJiBkYXRhLT5wdHIgPT0gcHRyKSB7CiAJCWRhdGEtPmhpdCsrOwogCQlkYXRhLT5ieXRlc19yZXEgKz0gYnl0ZXNfcmVxOwotCQlkYXRhLT5ieXRlc19hbGxvYyArPSBieXRlc19yZXE7CisJCWRhdGEtPmJ5dGVzX2FsbG9jICs9IGJ5dGVzX2FsbG9jOwogCX0gZWxzZSB7CiAJCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpkYXRhKSk7CiAJCWlmICghZGF0YSkKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCWlmIChkYXRhICYmIGRhdGEtPmNhbGxfc2l0ZSA9PSBjYWxsX3NpdGUpIHsKIAkJZGF0YS0+aGl0Kys7CiAJCWRhdGEtPmJ5dGVzX3JlcSArPSBieXRlc19yZXE7Ci0JCWRhdGEtPmJ5dGVzX2FsbG9jICs9IGJ5dGVzX3JlcTsKKwkJZGF0YS0+Ynl0ZXNfYWxsb2MgKz0gYnl0ZXNfYWxsb2M7CiAJfSBlbHNlIHsKIAkJZGF0YSA9IG1hbGxvYyhzaXplb2YoKmRhdGEpKTsKIAkJaWYgKCFkYXRhKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwppbmRleCA3ZTc0MWY1Li5jMWU2Nzc0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgInV0aWwvc3RybGlzdC5oIgogI2luY2x1ZGUgInV0aWwvZXZlbnQuaCIKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisjaW5jbHVkZSAidXRpbC9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKICNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgogI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgpAQCAtMjA1LDYgKzIwNiw5IEBACiAJaWYgKCghc2Vzc2lvbi5ucl9wcm9iZSAmJiAhc2Vzc2lvbi5kZWxsaXN0ICYmICFzZXNzaW9uLmxpc3RfZXZlbnRzKSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKIAorCWlmIChkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoZGVidWdmc19wYXRoKSA8IDApCisJCWRpZSgiRmFpbGVkIHRvIGZpbmQgZGVidWdmcyBwYXRoLiIpOworCiAJaWYgKHNlc3Npb24ubGlzdF9ldmVudHMpIHsKIAkJaWYgKHNlc3Npb24ubnJfcHJvYmUgIT0gMCB8fCBzZXNzaW9uLmRlbGxpc3QpIHsKIAkJCXByX3dhcm5pbmcoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCA2MzEzNmQwLi4yNjU0MjUzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAlwZXJmX2hlYWRlcl9fd3JpdGUoJnNlc3Npb24tPmhlYWRlciwgb3V0cHV0LCB0cnVlKTsKIH0KIAotc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MgX191c2VkLCBjb25zdCBjaGFyICoqYXJndikKK3N0YXRpYyBpbnQgX19jbWRfcmVjb3JkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpbnQgaSwgY291bnRlcjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKQEAgLTQxMSw2ICs0MTEsNyBAQAogCWludCBlcnI7CiAJdW5zaWduZWQgbG9uZyB3YWtpbmcgPSAwOwogCWludCBjaGlsZF9yZWFkeV9waXBlWzJdLCBnb19waXBlWzJdOworCWNvbnN0IGJvb2wgZm9ya3MgPSB0YXJnZXRfcGlkID09IC0xICYmIGFyZ2MgPiAwOwogCWNoYXIgYnVmOwogCiAJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTsKQEAgLTQyMiw3ICs0MjMsNyBAQAogCXNpZ25hbChTSUdDSExELCBzaWdfaGFuZGxlcik7CiAJc2lnbmFsKFNJR0lOVCwgc2lnX2hhbmRsZXIpOwogCi0JaWYgKHBpcGUoY2hpbGRfcmVhZHlfcGlwZSkgPCAwIHx8IHBpcGUoZ29fcGlwZSkgPCAwKSB7CisJaWYgKGZvcmtzICYmIChwaXBlKGNoaWxkX3JlYWR5X3BpcGUpIDwgMCB8fCBwaXBlKGdvX3BpcGUpIDwgMCkpIHsKIAkJcGVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHBpcGVzIik7CiAJCWV4aXQoLTEpOwogCX0KQEAgLTQ4Myw3ICs0ODQsNyBAQAogCiAJYXRleGl0KGF0ZXhpdF9oZWFkZXIpOwogCi0JaWYgKHRhcmdldF9waWQgPT0gLTEpIHsKKwlpZiAoZm9ya3MpIHsKIAkJcGlkID0gZm9yaygpOwogCQlpZiAocGlkIDwgMCkgewogCQkJcGVycm9yKCJmYWlsZWQgdG8gZm9yayIpOwpAQCAtNTUwLDcgKzU1MSw3IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmICghc3lzdGVtX3dpZGUpCisJaWYgKCFzeXN0ZW1fd2lkZSAmJiBwcm9maWxlX2NwdSA9PSAtMSkKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKIAkJCQkJIHNlc3Npb24pOwogCWVsc2UKQEAgLTU2OSw3ICs1NzAsOCBAQAogCS8qCiAJICogTGV0IHRoZSBjaGlsZCByaXAKIAkgKi8KLQljbG9zZShnb19waXBlWzFdKTsKKwlpZiAoZm9ya3MpCisJCWNsb3NlKGdvX3BpcGVbMV0pOwogCiAJZm9yICg7OykgewogCQlpbnQgaGl0cyA9IHNhbXBsZXM7CkBAIC02NjcsNyArNjY5LDcgQEAKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHJlY29yZF91c2FnZSwKIAkJCSAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKLQlpZiAoIWFyZ2MgJiYgdGFyZ2V0X3BpZCA9PSAtMSAmJiAoIXN5c3RlbV93aWRlIHx8IHByb2ZpbGVfY3B1ID09IC0xKSkKKwlpZiAoIWFyZ2MgJiYgdGFyZ2V0X3BpZCA9PSAtMSAmJiAhc3lzdGVtX3dpZGUgJiYgcHJvZmlsZV9jcHUgPT0gLTEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhyZWNvcmRfdXNhZ2UsIG9wdGlvbnMpOwogCiAJc3ltYm9sX19pbml0KCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggZTUwYTZiMS4uZGIxMGMwZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAKIAlwZXJmX3Nlc3Npb25fX2NvbGxhcHNlX3Jlc29ydChzZXNzaW9uKTsKIAlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2Vzc2lvbiwgc2Vzc2lvbi0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKLQlmcHJpbnRmKHN0ZG91dCwgIiMgU2FtcGxlczogJWxkXG4jXG4iLCBzZXNzaW9uLT5ldmVudHNfc3RhdHMudG90YWwpOworCWZwcmludGYoc3Rkb3V0LCAiIyBTYW1wbGVzOiAlTGRcbiNcbiIsIHNlc3Npb24tPmV2ZW50c19zdGF0cy50b3RhbCk7CiAJcGVyZl9zZXNzaW9uX19mcHJpbnRmX2hpc3RzKHNlc3Npb24sIE5VTEwsIGZhbHNlLCBzdGRvdXQpOwogCWlmIChzb3J0X29yZGVyID09IGRlZmF1bHRfc29ydF9vcmRlciAmJgogCSAgICBwYXJlbnRfcGF0dGVybiA9PSBkZWZhdWx0X3BhcmVudF9wYXR0ZXJuKQpAQCAtMjk0LDggKzI5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8vc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXBvcnRfdXNhZ2VbXSA9IHsKLWNvbnN0IGNoYXIgKiBjb25zdCByZXBvcnRfdXNhZ2VbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVwb3J0X3VzYWdlW10gPSB7CiAJInBlcmYgcmVwb3J0IFs8b3B0aW9ucz5dIDxjb21tYW5kPiIsCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggZTIyODVlMi4uNTc0YTIxNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogCXJldHVybiBwYXRoOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFubm90YXRlX3VzYWdlW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRyYWNlX3VzYWdlW10gPSB7CiAJInBlcmYgdHJhY2UgWzxvcHRpb25zPl0gPGNvbW1hbmQ+IiwKIAlOVUxMCiB9OwpAQCAtNTgxLDcgKzU4MSw3IEBACiAKIAlzZXR1cF9zY3JpcHRpbmcoKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGFubm90YXRlX3VzYWdlLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHRyYWNlX3VzYWdlLAogCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAogCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2Rlc2lnbi50eHQgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKaW5kZXggZjAwMGMzMC4uOGQwZGU1MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0CisrKyBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dApAQCAtMjEsNyArMjEsNyBAQAogVGhlIHNwZWNpYWwgZmlsZSBkZXNjcmlwdG9yIGlzIG9wZW5lZCB2aWEgdGhlIHBlcmZfZXZlbnRfb3BlbigpCiBzeXN0ZW0gY2FsbDoKIAotICAgaW50IHN5c19wZXJmX2V2ZW50X29wZW4oc3RydWN0IHBlcmZfZXZlbnRfaHdfZXZlbnQgKmh3X2V2ZW50X3VwdHIsCisgICBpbnQgc3lzX3BlcmZfZXZlbnRfb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpod19ldmVudF91cHRyLAogCQkJICAgICBwaWRfdCBwaWQsIGludCBjcHUsIGludCBncm91cF9mZCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKQEAgLTMyLDkgKzMyLDkgQEAKIE11bHRpcGxlIGNvdW50ZXJzIGNhbiBiZSBrZXB0IG9wZW4gYXQgYSB0aW1lLCBhbmQgdGhlIGNvdW50ZXJzCiBjYW4gYmUgcG9sbCgpZWQuCiAKLVdoZW4gY3JlYXRpbmcgYSBuZXcgY291bnRlciBmZCwgJ3BlcmZfZXZlbnRfaHdfZXZlbnQnIGlzOgorV2hlbiBjcmVhdGluZyBhIG5ldyBjb3VudGVyIGZkLCAncGVyZl9ldmVudF9hdHRyJyBpczoKIAotc3RydWN0IHBlcmZfZXZlbnRfaHdfZXZlbnQgeworc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoZSBNU0Igb2YgdGhlIGNvbmZpZyB3b3JkIHNpZ25pZmllcyBpZiB0aGUgcmVzdCBjb250YWlucyBjcHUKICAgICAgICAgICogc3BlY2lmaWMgKHJhdykgY291bnRlciBjb25maWd1cmF0aW9uIGRhdGEsIGlmIHVuc2V0LCB0aGUgbmV4dApAQCAtMzk5LDcgKzM5OSw3IEBACiBmY250bCgpIG1hbmFnaW5nIHNpZ25hbHMuCiAKIE5vcm1hbGx5IGEgbm90aWZpY2F0aW9uIGlzIGdlbmVyYXRlZCBmb3IgZXZlcnkgcGFnZSBmaWxsZWQsIGhvd2V2ZXIgb25lIGNhbgotYWRkaXRpb25hbGx5IHNldCBwZXJmX2V2ZW50X2h3X2V2ZW50Lndha2V1cF9ldmVudHMgdG8gZ2VuZXJhdGUgb25lIGV2ZXJ5CithZGRpdGlvbmFsbHkgc2V0IHBlcmZfZXZlbnRfYXR0ci53YWtldXBfZXZlbnRzIHRvIGdlbmVyYXRlIG9uZSBldmVyeQogc28gbWFueSBjb3VudGVyIG92ZXJmbG93IGV2ZW50cy4KIAogRnV0dXJlIHdvcmsgd2lsbCBpbmNsdWRlIGEgc3BsaWNlKCkgaW50ZXJmYWNlIHRvIHRoZSByaW5nLWJ1ZmZlci4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKaW5kZXggODAyNzMwOS4uNjkwYTk2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKQEAgLTk1LDggKzk1LDggQEAKIH0gZXZlbnRfdDsKIAogc3RydWN0IGV2ZW50c19zdGF0cyB7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbDsKLQl1bnNpZ25lZCBsb25nIGxvc3Q7CisJdTY0IHRvdGFsOworCXU2NCBsb3N0OwogfTsKIAogdm9pZCBldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCAyY2E2MjE1Li4yOTQ2NWQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtNjIsNiArNjIsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLworc3RhdGljIGJvb2wgY2hlY2tfZXZlbnRfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghaXNhbHBoYSgqbmFtZSkgJiYgKm5hbWUgIT0gJ18nKQorCQlyZXR1cm4gZmFsc2U7CisJd2hpbGUgKCorK25hbWUgIT0gJ1wwJykgeworCQlpZiAoIWlzYWxwaGEoKm5hbWUpICYmICFpc2RpZ2l0KCpuYW1lKSAmJiAqbmFtZSAhPSAnXycpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCiAvKiBQYXJzZSBwcm9iZXBvaW50IGRlZmluaXRpb24uICovCiBzdGF0aWMgdm9pZCBwYXJzZV9wZXJmX3Byb2JlX3Byb2JlcG9pbnQoY2hhciAqYXJnLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQogewpAQCAtODIsNiArOTQsOSBAQAogCQlwdHIgPSBzdHJjaHIoYXJnLCAnOicpOwogCQlpZiAocHRyKQkvKiBHcm91cCBuYW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiAqLwogCQkJc2VtYW50aWNfZXJyb3IoIkdyb3VwIG5hbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIik7CisJCWlmICghY2hlY2tfZXZlbnRfbmFtZShhcmcpKQorCQkJc2VtYW50aWNfZXJyb3IoIiVzIGlzIGJhZCBmb3IgZXZlbnQgbmFtZSAtaXQgbXVzdCAiCisJCQkJICAgICAgICJmb2xsb3cgQyBzeW1ib2wtbmFtaW5nIHJ1bGUuIiwgYXJnKTsKIAkJcHAtPmV2ZW50ID0gc3RyZHVwKGFyZyk7CiAJCWFyZyA9IHRtcDsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmggYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKaW5kZXggNWU0MDUwYy4uYTQwODZhYWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKQEAgLTEsOSArMSw5IEBACiAjaWZuZGVmIF9QUk9CRV9GSU5ERVJfSAogI2RlZmluZSBfUFJPQkVfRklOREVSX0gKIAotI2RlZmluZSBNQVhfUEFUSF9MRU4gMjU2Ci0jZGVmaW5lIE1BWF9QUk9CRV9CVUZGRVIgMTAyNAotI2RlZmluZSBNQVhfUFJPQkVTIDEyOAorI2RlZmluZSBNQVhfUEFUSF9MRU4JCSAyNTYKKyNkZWZpbmUgTUFYX1BST0JFX0JVRkZFUgkxMDI0CisjZGVmaW5lIE1BWF9QUk9CRVMJCSAxMjgKIAogc3RhdGljIGlubGluZSBpbnQgaXNfY192YXJuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC0xMiw0OCArMTIsNTMgQEAKIH0KIAogc3RydWN0IHByb2JlX3BvaW50IHsKLQljaGFyCSpldmVudDsJCS8qIEV2ZW50IG5hbWUgKi8KLQljaGFyCSpncm91cDsJCS8qIEV2ZW50IGdyb3VwICovCisJY2hhcgkJCSpldmVudDsJCQkvKiBFdmVudCBuYW1lICovCisJY2hhcgkJCSpncm91cDsJCQkvKiBFdmVudCBncm91cCAqLwogCiAJLyogSW5wdXRzICovCi0JY2hhcgkqZmlsZTsJCS8qIEZpbGUgbmFtZSAqLwotCWludAlsaW5lOwkJLyogTGluZSBudW1iZXIgKi8KKwljaGFyCQkJKmZpbGU7CQkJLyogRmlsZSBuYW1lICovCisJaW50CQkJbGluZTsJCQkvKiBMaW5lIG51bWJlciAqLwogCi0JY2hhcgkqZnVuY3Rpb247CS8qIEZ1bmN0aW9uIG5hbWUgKi8KLQlpbnQJb2Zmc2V0OwkJLyogT2Zmc2V0IGJ5dGVzICovCisJY2hhcgkJCSpmdW5jdGlvbjsJCS8qIEZ1bmN0aW9uIG5hbWUgKi8KKwlpbnQJCQlvZmZzZXQ7CQkJLyogT2Zmc2V0IGJ5dGVzICovCiAKLQlpbnQJbnJfYXJnczsJLyogTnVtYmVyIG9mIGFyZ3VtZW50cyAqLwotCWNoYXIJKiphcmdzOwkJLyogQXJndW1lbnRzICovCisJaW50CQkJbnJfYXJnczsJCS8qIE51bWJlciBvZiBhcmd1bWVudHMgKi8KKwljaGFyCQkJKiphcmdzOwkJCS8qIEFyZ3VtZW50cyAqLwogCi0JaW50CXJldHByb2JlOwkvKiBSZXR1cm4gcHJvYmUgKi8KKwlpbnQJCQlyZXRwcm9iZTsJCS8qIFJldHVybiBwcm9iZSAqLwogCiAJLyogT3V0cHV0ICovCi0JaW50CWZvdW5kOwkJLyogTnVtYmVyIG9mIGZvdW5kIHByb2JlIHBvaW50cyAqLwotCWNoYXIJKnByb2Jlc1tNQVhfUFJPQkVTXTsJLyogT3V0cHV0IGJ1ZmZlcnMgKHdpbGwgYmUgYWxsb2NhdGVkKSovCisJaW50CQkJZm91bmQ7CQkJLyogTnVtYmVyIG9mIGZvdW5kIHByb2JlIHBvaW50cyAqLworCWNoYXIJCQkqcHJvYmVzW01BWF9QUk9CRVNdOwkvKiBPdXRwdXQgYnVmZmVycyAod2lsbCBiZSBhbGxvY2F0ZWQpKi8KIH07CiAKICNpZm5kZWYgTk9fTElCRFdBUkYKIGV4dGVybiBpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CiAKLSNpbmNsdWRlIDxsaWJkd2FyZi9kd2FyZi5oPgotI2luY2x1ZGUgPGxpYmR3YXJmL2xpYmR3YXJmLmg+CisvKiBXb3JrYXJvdW5kIGZvciB1bmRlZmluZWQgX01JUFNfU1pMT05HIGJ1ZyBpbiBsaWJkd2FyZi5oOiAqLworI2lmbmRlZiBfTUlQU19TWkxPTkcKKyMgZGVmaW5lIF9NSVBTX1NaTE9ORwkJMAorI2VuZGlmCisKKyNpbmNsdWRlIDxkd2FyZi5oPgorI2luY2x1ZGUgPGxpYmR3YXJmLmg+CiAKIHN0cnVjdCBwcm9iZV9maW5kZXIgewotCXN0cnVjdCBwcm9iZV9wb2ludAkqcHA7CS8qIFRhcmdldCBwcm9iZSBwb2ludCAqLworCXN0cnVjdCBwcm9iZV9wb2ludAkqcHA7CQkJLyogVGFyZ2V0IHByb2JlIHBvaW50ICovCiAKIAkvKiBGb3IgZnVuY3Rpb24gc2VhcmNoaW5nICovCi0JRHdhcmZfQWRkcglhZGRyOwkJLyogQWRkcmVzcyAqLwotCUR3YXJmX1Vuc2lnbmVkCWZubzsJCS8qIEZpbGUgbnVtYmVyICovCi0JRHdhcmZfVW5zaWduZWQJbG5vOwkJLyogTGluZSBudW1iZXIgKi8KLQlEd2FyZl9PZmYJaW5sX29mZnM7CS8qIElubGluZSBvZmZzZXQgKi8KLQlEd2FyZl9EaWUJY3VfZGllOwkJLyogQ3VycmVudCBDVSAqLworCUR3YXJmX0FkZHIJCWFkZHI7CQkJLyogQWRkcmVzcyAqLworCUR3YXJmX1Vuc2lnbmVkCQlmbm87CQkJLyogRmlsZSBudW1iZXIgKi8KKwlEd2FyZl9VbnNpZ25lZAkJbG5vOwkJCS8qIExpbmUgbnVtYmVyICovCisJRHdhcmZfT2ZmCQlpbmxfb2ZmczsJCS8qIElubGluZSBvZmZzZXQgKi8KKwlEd2FyZl9EaWUJCWN1X2RpZTsJCQkvKiBDdXJyZW50IENVICovCiAKIAkvKiBGb3IgdmFyaWFibGUgc2VhcmNoaW5nICovCi0JRHdhcmZfQWRkcgljdV9iYXNlOwkvKiBDdXJyZW50IENVIGJhc2UgYWRkcmVzcyAqLwotCUR3YXJmX0xvY2Rlc2MJZmJsb2M7CQkvKiBMb2NhdGlvbiBvZiBDdXJyZW50IEZyYW1lIEJhc2UgKi8KLQljb25zdCBjaGFyCSp2YXI7CQkvKiBDdXJyZW50IHZhcmlhYmxlIG5hbWUgKi8KLQljaGFyCQkqYnVmOwkJLyogQ3VycmVudCBvdXRwdXQgYnVmZmVyICovCi0JaW50CQlsZW47CQkvKiBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlciAqLworCUR3YXJmX0FkZHIJCWN1X2Jhc2U7CQkvKiBDdXJyZW50IENVIGJhc2UgYWRkcmVzcyAqLworCUR3YXJmX0xvY2Rlc2MJCWZibG9jOwkJCS8qIExvY2F0aW9uIG9mIEN1cnJlbnQgRnJhbWUgQmFzZSAqLworCWNvbnN0IGNoYXIJCSp2YXI7CQkJLyogQ3VycmVudCB2YXJpYWJsZSBuYW1lICovCisJY2hhcgkJCSpidWY7CQkJLyogQ3VycmVudCBvdXRwdXQgYnVmZmVyICovCisJaW50CQkJbGVuOwkJCS8qIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyICovCiB9OwogI2VuZGlmIC8qIE5PX0xJQkRXQVJGICovCiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jIGIvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKaW5kZXggZmQ5YzA5Ny4uZjczZGU2MyAxMDA2NDQKLS0tIGEvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKKysrIGIvdmlydC9rdm0vYXNzaWduZWQtZGV2LmMKQEAgLTUwOCw4ICs1MDgsOCBAQAogCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqbWF0Y2g7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAotCWRvd25fcmVhZCgma3ZtLT5zbG90c19sb2NrKTsKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCWRvd25fcmVhZCgma3ZtLT5zbG90c19sb2NrKTsKIAogCW1hdGNoID0ga3ZtX2ZpbmRfYXNzaWduZWRfZGV2KCZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQsCiAJCQkJICAgICAgYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfaWQpOwpAQCAtNTczLDggKzU3Myw4IEBACiAJfQogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCXVwX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCXJldHVybiByOwogb3V0X2xpc3RfZGVsOgogCWxpc3RfZGVsKCZtYXRjaC0+bGlzdCk7CkBAIC01ODUsOCArNTg1LDggQEAKIAlwY2lfZGV2X3B1dChkZXYpOwogb3V0X2ZyZWU6CiAJa2ZyZWUobWF0Y2gpOwotCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggZTFmMmJmOC4uYTk0NGJlMyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC02NCw3ICs2NCw3IEBACiAvKgogICogT3JkZXJpbmcgb2YgbG9ja3M6CiAgKgotICogCQlrdm0tPnNsb3RzX2xvY2sgLS0+IGt2bS0+bG9jayAtLT4ga3ZtLT5pcnFfbG9jaworICogCQlrdm0tPmxvY2sgLS0+IGt2bS0+c2xvdHNfbG9jayAtLT4ga3ZtLT5pcnFfbG9jawogICovCiAKIERFRklORV9TUElOTE9DSyhrdm1fbG9jayk7CkBAIC00MDYsOCArNDA2LDExIEBACiBvdXQ6CiAJcmV0dXJuIGt2bTsKIAorI2lmIGRlZmluZWQoS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUKSB8fCBcCisgICAgKGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikgJiYgZGVmaW5lZChLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUikpCiBvdXRfZXJyOgogCWhhcmR3YXJlX2Rpc2FibGVfYWxsKCk7CisjZW5kaWYKIG91dF9lcnJfbm9kaXNhYmxlOgogCWtmcmVlKGt2bSk7CiAJcmV0dXJuIEVSUl9QVFIocik7CkBAIC0xMTc3LDcgKzExODAsNyBAQAogICovCiBzdGF0aWMgaW50IGNyZWF0ZV92Y3B1X2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gYW5vbl9pbm9kZV9nZXRmZCgia3ZtLXZjcHUiLCAma3ZtX3ZjcHVfZm9wcywgdmNwdSwgMCk7CisJcmV0dXJuIGFub25faW5vZGVfZ2V0ZmQoImt2bS12Y3B1IiwgJmt2bV92Y3B1X2ZvcHMsIHZjcHUsIE9fUkRXUik7CiB9CiAKIC8qCkBAIC0xNjM4LDcgKzE2NDEsNyBAQAogCWt2bSA9IGt2bV9jcmVhdGVfdm0oKTsKIAlpZiAoSVNfRVJSKGt2bSkpCiAJCXJldHVybiBQVFJfRVJSKGt2bSk7Ci0JZmQgPSBhbm9uX2lub2RlX2dldGZkKCJrdm0tdm0iLCAma3ZtX3ZtX2ZvcHMsIGt2bSwgMCk7CisJZmQgPSBhbm9uX2lub2RlX2dldGZkKCJrdm0tdm0iLCAma3ZtX3ZtX2ZvcHMsIGt2bSwgT19SRFdSKTsKIAlpZiAoZmQgPCAwKQogCQlrdm1fcHV0X2t2bShrdm0pOwogCg==