ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvYWZfaXJkYS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9hZl9pcmRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyMDlmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvYWZfaXJkYS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgYWZfaXJkYS5oCisgKiBWZXJzaW9uOiAgICAgICAxLjAKKyAqIERlc2NyaXB0aW9uOiAgIElyREEgc29ja2V0cyBkZWNsYXJhdGlvbnMKKyAqIFN0YXR1czogICAgICAgIFN0YWJsZQorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgVHVlIERlYyAgOSAyMToxMzoxMiAxOTk3CisgKiBNb2RpZmllZCBhdDogICBGcmkgSmFuIDI4IDEzOjE2OjMyIDIwMDAKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIEFGX0lSREFfSAorI2RlZmluZSBBRl9JUkRBX0gKKworI2luY2x1ZGUgPGxpbnV4L2lyZGEuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJpYXAuaD4JCS8qIHN0cnVjdCBpcmlhcF9jYiAqLworI2luY2x1ZGUgPG5ldC9pcmRhL2lyaWFzX29iamVjdC5oPgkvKiBzdHJ1Y3QgaWFzX3ZhbHVlICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXAuaD4JCS8qIHN0cnVjdCBsc2FwX2NiICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJ0dHAuaD4JCS8qIHN0cnVjdCB0c2FwX2NiICovCisjaW5jbHVkZSA8bmV0L2lyZGEvZGlzY292ZXJ5Lmg+CQkvKiBzdHJ1Y3QgZGlzY292ZXJ5X3QgKi8KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisvKiBJckRBIFNvY2tldCAqLworc3RydWN0IGlyZGFfc29jayB7CisJLyogc3RydWN0IHNvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgb2YgaXJkYV9zb2NrICovCisJc3RydWN0IHNvY2sgc2s7CisJX191MzIgc2FkZHI7ICAgICAgICAgIC8qIG15IGxvY2FsIGFkZHJlc3MgKi8KKwlfX3UzMiBkYWRkcjsgICAgICAgICAgLyogcGVlciBhZGRyZXNzICovCisKKwlzdHJ1Y3QgbHNhcF9jYiAqbHNhcDsgLyogTFNBUCB1c2VkIGJ5IFVsdHJhICovCisJX191OCAgcGlkOyAgICAgICAgICAgIC8qIFByb3RvY29sIElQIChQSUQpIHVzZWQgYnkgVWx0cmEgKi8KKworCXN0cnVjdCB0c2FwX2NiICp0c2FwOyAvKiBUU0FQIHVzZWQgYnkgdGhpcyBjb25uZWN0aW9uICovCisJX191OCBkdHNhcF9zZWw7ICAgICAgIC8qIHJlbW90ZSBUU0FQIGFkZHJlc3MgKi8KKwlfX3U4IHN0c2FwX3NlbDsgICAgICAgLyogbG9jYWwgVFNBUCBhZGRyZXNzICovCisJCisJX191MzIgbWF4X3NkdV9zaXplX3J4OworCV9fdTMyIG1heF9zZHVfc2l6ZV90eDsKKwlfX3UzMiBtYXhfZGF0YV9zaXplOworCV9fdTggIG1heF9oZWFkZXJfc2l6ZTsKKwlzdHJ1Y3QgcW9zX2luZm8gcW9zX3R4OworCisJX191MTZfaG9zdF9vcmRlciBtYXNrOyAgICAgICAgICAgLyogSGludCBiaXRzIG1hc2sgKi8KKwlfX3UxNl9ob3N0X29yZGVyIGhpbnRzOyAgICAgICAgICAvKiBIaW50IGJpdHMgKi8KKworCXZvaWQgKmNrZXk7ICAgICAgICAgICAvKiBJckxNUCBjbGllbnQgaGFuZGxlICovCisJdm9pZCAqc2tleTsgICAgICAgICAgIC8qIElyTE1QIHNlcnZpY2UgaGFuZGxlICovCisKKwlzdHJ1Y3QgaWFzX29iamVjdCAqaWFzX29iajsgICAvKiBPdXIgc2VydmljZSBuYW1lICsgbHNhcCBpbiBJQVMgKi8KKwlzdHJ1Y3QgaXJpYXBfY2IgKmlyaWFwOwkgICAgICAvKiBVc2VkIHRvIHF1ZXJ5IHJlbW90ZSBJQVMgKi8KKwlzdHJ1Y3QgaWFzX3ZhbHVlICppYXNfcmVzdWx0OyAvKiBSZXN1bHQgb2YgcmVtb3RlIElBUyBxdWVyeSAqLworCisJaGFzaGJpbl90ICpjYWNoZWxvZzsJCS8qIFJlc3VsdCBvZiBkaXNjb3ZlcnkgcXVlcnkgKi8KKwlfX3UzMiBjYWNoZWRhZGRyOwkvKiBSZXN1bHQgb2Ygc2VsZWN0aXZlIGRpc2NvdmVyeSBxdWVyeSAqLworCisJaW50IG5zbG90czsgICAgICAgICAgIC8qIE51bWJlciBvZiBzbG90cyB0byB1c2UgZm9yIGRpc2NvdmVyeSAqLworCisJaW50IGVycm5vOyAgICAgICAgICAgIC8qIHN0YXR1cyBvZiB0aGUgSUFTIHF1ZXJ5ICovCisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWVyeV93YWl0OwkvKiBXYWl0IGZvciB0aGUgYW5zd2VyIHRvIGEgcXVlcnkgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZzsJLyogVGltZW91dCBmb3IgZGlzY292ZXJ5ICovCisKKwlMT0NBTF9GTE9XIHR4X2Zsb3c7CisJTE9DQUxfRkxPVyByeF9mbG93OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXJkYV9zb2NrICppcmRhX3NrKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gKHN0cnVjdCBpcmRhX3NvY2sgKilzazsKK30KKworI2VuZGlmIC8qIEFGX0lSREFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9jcmMuaCBiL2luY2x1ZGUvbmV0L2lyZGEvY3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwMjI5NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvY3JjLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBjcmMuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICBDUkMgcm91dGluZXMKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBBdWcgIDQgMjA6NDA6NTMgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgU3VuIE1heSAgMiAyMDoyNToyMyAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkRBX0NSQ19ICisjZGVmaW5lIElSREFfQ1JDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+CisKKyNkZWZpbmUgSU5JVF9GQ1MgIDB4ZmZmZiAgIC8qIEluaXRpYWwgRkNTIHZhbHVlICovCisjZGVmaW5lIEdPT0RfRkNTICAweGYwYjggICAvKiBHb29kIGZpbmFsIEZDUyB2YWx1ZSAqLworCisvKiBSZWNvbXB1dGUgdGhlIEZDUyB3aXRoIG9uZSBtb3JlIGNoYXJhY3RlciBhcHBlbmRlZC4gKi8KKyNkZWZpbmUgaXJkYV9mY3MoZmNzLCBjKSBjcmNfY2NpdHRfYnl0ZShmY3MsIGMpCisKKy8qIFJlY29tcHV0ZSB0aGUgRkNTIHdpdGggbGVuIGJ5dGVzIGFwcGVuZGVkLiAqLworI2RlZmluZSBpcmRhX2NhbGNfY3JjMTYoZmNzLCBidWYsIGxlbikgY3JjX2NjaXR0KGZjcywgYnVmLCBsZW4pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9kaXNjb3ZlcnkuaCBiL2luY2x1ZGUvbmV0L2lyZGEvZGlzY292ZXJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwZjlkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvZGlzY292ZXJ5LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgZGlzY292ZXJ5LmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBUdWUgQXByICA2IDE2OjUzOjUzIDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIFR1ZSBPY3QgIDUgMTA6MDU6MTAgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBESVNDT1ZFUllfSAorI2RlZmluZSBESVNDT1ZFUllfSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJxdWV1ZS5oPgkJLyogaXJkYV9xdWV1ZV90ICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYXBfZXZlbnQuaD4JLyogTEFQX1JFQVNPTiAqLworCisjZGVmaW5lIERJU0NPVkVSWV9FWFBJUkVfVElNRU9VVCAoMipzeXNjdGxfZGlzY292ZXJ5X3RpbWVvdXQqSFopCisjZGVmaW5lIERJU0NPVkVSWV9ERUZBVUxUX1NMT1RTICAwCisKKy8qCisgKiAgVGhpcyB0eXBlIGlzIHVzZWQgYnkgdGhlIHByb3RvY29scyB0aGF0IHRyYW5zbWl0IDE2IGJpdHMgd29yZHMgaW4gCisgKiAgbGl0dGxlIGVuZGlhbiBmb3JtYXQuIEEgbGl0dGxlIGVuZGlhbiBtYWNoaW5lIHN0b3JlcyBNU0Igb2Ygd29yZCBpbgorICogIGJ5dGVbMV0gYW5kIExTQiBpbiBieXRlWzBdLiBBIGJpZyBlbmRpYW4gbWFjaGluZSBzdG9yZXMgTVNCIGluIGJ5dGVbMF0gCisgKiAgYW5kIExTQiBpbiBieXRlWzFdLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgaW4gdGhlIGNvZGUgZm9yIHRoaW5ncyB0aGF0IGFyZSBlbmRpYW4gbmV1dHJhbAorICogYnV0IHRoYXQgZml0IGluIGEgd29yZCBzbyB0aGF0IHdlIGNhbiBtYW5pcHVsYXRlIHRoZW0gZWZmaWNpZW50bHkuCisgKiBCeSBlbmRpYW4gbmV1dHJhbCwgSSBtZWFuIHRoaW5ncyB0aGF0IGFyZSByZWFsbHkgYW4gYXJyYXkgb2YgYnl0ZXMsCisgKiBhbmQgYWx3YXlzIHVzZWQgYXMgc3VjaCwgZm9yIGV4YW1wbGUgdGhlIGhpbnQgYml0cy4gSmVhbiBJSQorICovCit0eXBlZGVmIHVuaW9uIHsKKwlfX3UxNiB3b3JkOworCV9fdTggIGJ5dGVbMl07Cit9IF9fdTE2X2hvc3Rfb3JkZXI7CisKKy8qIFNhbWUgcHVycG9zZSwgZGlmZmVyZW50IGFwcGxpY2F0aW9uICovCisjZGVmaW5lIHUxNmhvKGFycmF5KSAoKiAoKF9fdTE2ICopIGFycmF5KSkKKworLyogVHlwZXMgb2YgZGlzY292ZXJ5ICovCit0eXBlZGVmIGVudW0geworCURJU0NPVkVSWV9MT0csCQkvKiBXaGF0J3MgaW4gb3VyIGRpc2NvdmVyeSBsb2cgKi8KKwlESVNDT1ZFUllfQUNUSVZFLAkvKiBEb2luZyBvdXIgb3duIGRpc2NvdmVyeSBvbiB0aGUgbWVkaXVtICovCisJRElTQ09WRVJZX1BBU1NJVkUsCS8qIFBlZXIgZG9pbmcgZGlzY292ZXJ5IG9uIHRoZSBtZWRpdW0gKi8KKwlFWFBJUllfVElNRU9VVCwJCS8qIEVudHJ5IGV4cGlyZWQgZHVlIHRvIHRpbWVvdXQgKi8KK30gRElTQ09WRVJZX01PREU7CisKKyNkZWZpbmUgTklDS05BTUVfTUFYX0xFTiAyMQorCisvKiBCYXNpYyBkaXNjb3ZlcnkgaW5mb3JtYXRpb24gYWJvdXQgYSBwZWVyICovCit0eXBlZGVmIHN0cnVjdCBpcmRhX2RldmljZV9pbmZvCQlkaXNjaW5mb190OwkvKiBsaW51eC9pcmRhLmggKi8KKworLyoKKyAqIFRoZSBESVNDT1ZFUlkgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGJvdGggZGlzY292ZXJ5IHJlcXVlc3RzIGFuZCByZXNwb25zZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZGlzY292ZXJ5X3QgeworCWlyZGFfcXVldWVfdAlxOwkJLyogTXVzdCBiZSBmaXJzdCEgKi8KKworCWRpc2NpbmZvX3QJZGF0YTsJCS8qIEJhc2ljIGRpc2NvdmVyeSBpbmZvcm1hdGlvbiAqLworCWludAkJbmFtZV9sZW47CS8qIExlbmdodCBvZiBuaWNrbmFtZSAqLworCisJTEFQX1JFQVNPTgljb25kaXRpb247CS8qIE1vcmUgaW5mbyBhYm91dCB0aGUgZGlzY292ZXJ5ICovCisJaW50CQlnZW5fYWRkcl9iaXQ7CS8qIE5lZWQgdG8gZ2VuZXJhdGUgYSBuZXcgZGV2aWNlCisJCQkJCSAqIGFkZHJlc3M/ICovCisJaW50CQluc2xvdHM7CQkvKiBOdW1iZXIgb2Ygc2xvdHMgdG8gdXNlIHdoZW4KKwkJCQkJICogZGlzY292ZXJpbmcgKi8KKwl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcDsJLyogTGFzdCB0aW1lIGRpc2NvdmVyZWQgKi8KKwl1bnNpZ25lZCBsb25nCWZpcnN0c3RhbXA7CS8qIEZpcnN0IHRpbWUgZGlzY292ZXJlZCAqLworfSBkaXNjb3ZlcnlfdDsKKwordm9pZCBpcmxtcF9hZGRfZGlzY292ZXJ5KGhhc2hiaW5fdCAqY2FjaGVsb2csIGRpc2NvdmVyeV90ICpkaXNjb3ZlcnkpOwordm9pZCBpcmxtcF9hZGRfZGlzY292ZXJ5X2xvZyhoYXNoYmluX3QgKmNhY2hlbG9nLCBoYXNoYmluX3QgKmxvZyk7Cit2b2lkIGlybG1wX2V4cGlyZV9kaXNjb3ZlcmllcyhoYXNoYmluX3QgKmxvZywgX191MzIgc2FkZHIsIGludCBmb3JjZSk7CitzdHJ1Y3QgaXJkYV9kZXZpY2VfaW5mbyAqaXJsbXBfY29weV9kaXNjb3ZlcmllcyhoYXNoYmluX3QgKmxvZywgaW50ICpwbiwKKwkJCQkJCV9fdTE2IG1hc2ssIGludCBvbGRfZW50cmllcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fY29yZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YjYxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9jb3JlLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJjb21tX2NvcmUuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICAKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFdlZCBKdW4gIDkgMDg6NTg6NDMgMTk5OQorICogTW9kaWZpZWQgYXQ6ICAgTW9uIERlYyAxMyAxMTo1MjoyOSAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJDT01NX0NPUkVfSAorI2RlZmluZSBJUkNPTU1fQ09SRV9ICisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJxdWV1ZS5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lyY29tbV9ldmVudC5oPgorCisjZGVmaW5lIElSQ09NTV9NQUdJQyAweDk4MzQ3Mjk4CisjZGVmaW5lIElSQ09NTV9IRUFERVJfU0laRSAxCisKK3N0cnVjdCBpcmNvbW1fY2I7ICAgLyogRm9yd2FyZCBkZWNsLiAqLworCisvKgorICogQSBzbWFsbCBjYWxsLXRhYmxlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZSBzZXJ2aWNlLXR5cGUgd2hlbmV2ZXIKKyAqIHdlIHdhbnQgdG8gZG8gc29tZXRoaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgKCpkYXRhX3JlcXVlc3QpKHN0cnVjdCBpcmNvbW1fY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50IGNsZW4pOworCWludCAoKmNvbm5lY3RfcmVxdWVzdCkoc3RydWN0IGlyY29tbV9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCAKKwkJCSAgICAgICBzdHJ1Y3QgaXJjb21tX2luZm8gKik7CisJaW50ICgqY29ubmVjdF9yZXNwb25zZSkoc3RydWN0IGlyY29tbV9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKwlpbnQgKCpkaXNjb25uZWN0X3JlcXVlc3QpKHN0cnVjdCBpcmNvbW1fY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgCisJCQkJICBzdHJ1Y3QgaXJjb21tX2luZm8gKik7CQorfSBjYWxsX3Q7CisKK3N0cnVjdCBpcmNvbW1fY2IgeworCWlyZGFfcXVldWVfdCBxdWV1ZTsKKwltYWdpY190IG1hZ2ljOworCisJbm90aWZ5X3Qgbm90aWZ5OworCWNhbGxfdCAgIGlzc3VlOworCisJaW50IHN0YXRlOworCWludCBsaW5lOyAgICAgICAgICAgIC8qIFdoaWNoIFRUWSBsaW5lIHdlIGFyZSB1c2luZyAqLworCisJc3RydWN0IHRzYXBfY2IgKnRzYXA7CisJc3RydWN0IGxzYXBfY2IgKmxzYXA7CisJCisJX191OCBkbHNhcF9zZWw7ICAgICAgLyogRGVzdGluYXRpb24gTFNBUC9UU0FQIHNlbGVjdG9yICovCisJX191OCBzbHNhcF9zZWw7ICAgICAgLyogU291cmNlIExTQVAvVFNBUCBzZWxlY3RvciAqLworCisJX191MzIgc2FkZHI7ICAgICAgICAgLyogU291cmNlIGRldmljZSBhZGRyZXNzIChsaW5rIHdlIGFyZSB1c2luZykgKi8KKwlfX3UzMiBkYWRkcjsgICAgICAgICAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLworCisJaW50IG1heF9oZWFkZXJfc2l6ZTsgLyogSGVhZGVyIHNwYWNlIHdlIG11c3QgcmVzZXJ2ZSBmb3IgZWFjaCBmcmFtZSAqLworCWludCBtYXhfZGF0YV9zaXplOyAgIC8qIFRoZSBhbW91bnQgb2YgZGF0YSB3ZSBjYW4gZmlsbCBpbiBlYWNoIGZyYW1lICovCisKKwlMT0NBTF9GTE9XIGZsb3dfc3RhdHVzOyAvKiBVc2VkIGJ5IGlyY29tbV9sbXAgKi8KKwlpbnQgcGt0X2NvdW50OyAgICAgICAgICAvKiBOdW1iZXIgb2YgZnJhbWVzIHdlIGhhdmUgc2VudCB0byBJckxBUCAqLworCisJX191OCBzZXJ2aWNlX3R5cGU7Cit9OworCitleHRlcm4gaGFzaGJpbl90ICppcmNvbW07CisKK3N0cnVjdCBpcmNvbW1fY2IgKmlyY29tbV9vcGVuKG5vdGlmeV90ICpub3RpZnksIF9fdTggc2VydmljZV90eXBlLCBpbnQgbGluZSk7CitpbnQgaXJjb21tX2Nsb3NlKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYpOworCitpbnQgaXJjb21tX2RhdGFfcmVxdWVzdChzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJjb21tX2RhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJjb21tX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpcmNvbW1fY29udHJvbF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGlyY29tbV9jb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgX191OCBkbHNhcF9zZWwsIAorCQkJICAgX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgX191OCBzZXJ2aWNlX3R5cGUpOwordm9pZCBpcmNvbW1fY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKTsKK3ZvaWQgaXJjb21tX2Nvbm5lY3RfY29uZmlybShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbyk7CitpbnQgaXJjb21tX2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKTsKK2ludCBpcmNvbW1fZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSk7Cit2b2lkIGlyY29tbV9kaXNjb25uZWN0X2luZGljYXRpb24oc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbyk7Cit2b2lkIGlyY29tbV9mbG93X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgTE9DQUxfRkxPVyBmbG93KTsKKworI2RlZmluZSBpcmNvbW1faXNfY29ubmVjdGVkKHNlbGYpIChzZWxmLT5zdGF0ZSA9PSBJUkNPTU1fQ09OTikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9ldmVudC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjkwNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fZXZlbnQuaApAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyY29tbV9ldmVudC5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgU3VuIEp1biAgNiAyMzo1MToxMyAxOTk5CisgKiBNb2RpZmllZCBhdDogICBUaHUgSnVuIDEwIDA4OjM2OjI1IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkNPTU1fRVZFTlRfSAorI2RlZmluZSBJUkNPTU1fRVZFTlRfSAorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJtb2QuaD4KKwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSVJDT01NX0lETEUsCisgICAgICAgIElSQ09NTV9XQUlUSSwKKyAgICAgICAgSVJDT01NX1dBSVRSLAorICAgICAgICBJUkNPTU1fQ09OTiwKK30gSVJDT01NX1NUQVRFOworCisvKiBJckNPTU0gRXZlbnRzICovCit0eXBlZGVmIGVudW0geworICAgICAgICBJUkNPTU1fQ09OTkVDVF9SRVFVRVNULAorICAgICAgICBJUkNPTU1fQ09OTkVDVF9SRVNQT05TRSwKKyAgICAgICAgSVJDT01NX1RUUF9DT05ORUNUX0lORElDQVRJT04sCisJSVJDT01NX0xNUF9DT05ORUNUX0lORElDQVRJT04sCisgICAgICAgIElSQ09NTV9UVFBfQ09OTkVDVF9DT05GSVJNLAorCUlSQ09NTV9MTVBfQ09OTkVDVF9DT05GSVJNLAorCisgICAgICAgIElSQ09NTV9MTVBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OLAorCUlSQ09NTV9UVFBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OLAorICAgICAgICBJUkNPTU1fRElTQ09OTkVDVF9SRVFVRVNULAorCisgICAgICAgIElSQ09NTV9UVFBfREFUQV9JTkRJQ0FUSU9OLAorCUlSQ09NTV9MTVBfREFUQV9JTkRJQ0FUSU9OLAorICAgICAgICBJUkNPTU1fREFUQV9SRVFVRVNULAorICAgICAgICBJUkNPTU1fQ09OVFJPTF9SRVFVRVNULAorICAgICAgICBJUkNPTU1fQ09OVFJPTF9JTkRJQ0FUSU9OLAorfSBJUkNPTU1fRVZFTlQ7CisKKy8qCisgKiBVc2VkIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlIHN0YXRlLW1hY2hpbmUKKyAqLworc3RydWN0IGlyY29tbV9pbmZvIHsKKyAgICAgICAgX191MzIgICAgIHNhZGRyOyAgICAgICAgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworICAgICAgICBfX3UzMiAgICAgZGFkZHI7ICAgICAgICAgICAgICAgLyogRGVzdGluYXRpb24gZGV2aWNlIGFkZHJlc3MgKi8KKyAgICAgICAgX191OCAgICAgIGRsc2FwX3NlbDsKKyAgICAgICAgTE1fUkVBU09OIHJlYXNvbjsgICAgICAgICAgICAgIC8qIFJlYXNvbiBmb3IgZGlzY29ubmVjdCAqLworCV9fdTMyICAgICBtYXhfZGF0YV9zaXplOworCV9fdTMyICAgICBtYXhfaGVhZGVyX3NpemU7CisKKwlzdHJ1Y3QgcW9zX2luZm8gKnFvczsKK307CisKK2V4dGVybiBjaGFyICppcmNvbW1fc3RhdGVbXTsKKworc3RydWN0IGlyY29tbV9jYjsgICAvKiBGb3J3YXJkIGRlY2wuICovCisKK2ludCBpcmNvbW1fZG9fZXZlbnQoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX0VWRU5UIGV2ZW50LAorCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKTsKK3ZvaWQgaXJjb21tX25leHRfc3RhdGUoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgSVJDT01NX1NUQVRFIHN0YXRlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9sbXAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX2xtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDIxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9sbXAuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyY29tbV9sbXAuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICAKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFdlZCBKdW4gIDkgMTA6MDY6MDcgMTk5OQorICogTW9kaWZpZWQgYXQ6ICAgRnJpIEF1ZyAxMyAwNzozMjozMiAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTkgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJDT01NX0xNUF9ICisjZGVmaW5lIElSQ09NTV9MTVBfSAorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJjb21tX2NvcmUuaD4KKworaW50IGlyY29tbV9vcGVuX2xzYXAoc3RydWN0IGlyY29tbV9jYiAqc2VsZik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fcGFyYW0uaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2Nzg4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3BhcmFtLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJjb21tX3BhcmFtLmgKKyAqIFZlcnNpb246ICAgICAgIDEuMAorICogRGVzY3JpcHRpb246ICAgUGFyYW1ldGVyIGhhbmRsaW5nIGZvciB0aGUgSXJDT01NIHByb3RvY29sCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gSnVuICA3IDA4OjQ3OjI4IDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIFdlZCBBdWcgMjUgMTM6NDY6MzMgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqICAgICBNQSAwMjExMS0xMzA3IFVTQQorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSQ09NTV9QQVJBTVNfSAorI2RlZmluZSBJUkNPTU1fUEFSQU1TX0gKKworI2luY2x1ZGUgPG5ldC9pcmRhL3BhcmFtZXRlcnMuaD4KKworLyogUGFyYW1ldGVycyBjb21tb24gdG8gYWxsIHNlcnZpY2UgdHlwZXMgKi8KKyNkZWZpbmUgSVJDT01NX1NFUlZJQ0VfVFlQRSAgICAgMHgwMAorI2RlZmluZSBJUkNPTU1fUE9SVF9UWVBFICAgICAgICAweDAxIC8qIE9ubHkgdXNlZCBpbiBMTS1JQVMgKi8KKyNkZWZpbmUgSVJDT01NX1BPUlRfTkFNRSAgICAgICAgMHgwMiAvKiBPbmx5IHVzZWQgaW4gTE0tSUFTICovCisKKy8qIFBhcmFtZXRlcnMgZm9yIGJvdGggMyB3aXJlIGFuZCA5IHdpcmUgKi8KKyNkZWZpbmUgSVJDT01NX0RBVEFfUkFURSAgICAgICAgMHgxMAorI2RlZmluZSBJUkNPTU1fREFUQV9GT1JNQVQgICAgICAweDExCisjZGVmaW5lIElSQ09NTV9GTE9XX0NPTlRST0wgICAgIDB4MTIKKyNkZWZpbmUgSVJDT01NX1hPTl9YT0ZGICAgICAgICAgMHgxMworI2RlZmluZSBJUkNPTU1fRU5RX0FDSyAgICAgICAgICAweDE0CisjZGVmaW5lIElSQ09NTV9MSU5FX1NUQVRVUyAgICAgIDB4MTUKKyNkZWZpbmUgSVJDT01NX0JSRUFLICAgICAgICAgICAgMHgxNgorCisvKiBQYXJhbWV0ZXJzIGZvciA5IHdpcmUgKi8KKyNkZWZpbmUgSVJDT01NX0RURSAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBJUkNPTU1fRENFICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIElSQ09NTV9QT0xMICAgICAgICAgICAgIDB4MjIKKworLyogU2VydmljZSB0eXBlIChkZXRhaWxzKSAqLworI2RlZmluZSBJUkNPTU1fM19XSVJFX1JBVyAgICAgICAweDAxCisjZGVmaW5lIElSQ09NTV8zX1dJUkUgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSVJDT01NXzlfV0lSRSAgICAgICAgICAgMHgwNAorI2RlZmluZSBJUkNPTU1fQ0VOVFJPTklDUyAgICAgICAweDA4CisKKy8qIFBvcnQgdHlwZSAoZGV0YWlscykgKi8KKyNkZWZpbmUgSVJDT01NX1NFUklBTCAgICAgICAgICAgMHgwMAorI2RlZmluZSBJUkNPTU1fUEFSQUxMRUwgICAgICAgICAweDAxCisKKy8qIERhdGEgZm9ybWF0IChkZXRhaWxzKSAqLworI2RlZmluZSBJUkNPTU1fV1NJWkVfNSAgICAgICAgICAweDAwCisjZGVmaW5lIElSQ09NTV9XU0laRV82ICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSVJDT01NX1dTSVpFXzcgICAgICAgICAgMHgwMgorI2RlZmluZSBJUkNPTU1fV1NJWkVfOCAgICAgICAgICAweDAzCisKKyNkZWZpbmUgSVJDT01NXzFfU1RPUF9CSVQgICAgICAgMHgwMAorI2RlZmluZSBJUkNPTU1fMl9TVE9QX0JJVCAgICAgICAweDA0IC8qIDEuNSBpZiBjaGFyIGxlbiA1ICovCisKKyNkZWZpbmUgSVJDT01NX1BBUklUWV9ESVNBQkxFICAgMHgwMAorI2RlZmluZSBJUkNPTU1fUEFSSVRZX0VOQUJMRSAgICAweDA4CisKKyNkZWZpbmUgSVJDT01NX1BBUklUWV9PREQgICAgICAgMHgwMAorI2RlZmluZSBJUkNPTU1fUEFSSVRZX0VWRU4gICAgICAweDEwCisjZGVmaW5lIElSQ09NTV9QQVJJVFlfTUFSSyAgICAgIDB4MjAKKyNkZWZpbmUgSVJDT01NX1BBUklUWV9TUEFDRSAgICAgMHgzMAorCisvKiBGbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgSVJDT01NX1hPTl9YT0ZGX0lOICAgICAgMHgwMQorI2RlZmluZSBJUkNPTU1fWE9OX1hPRkZfT1VUICAgICAweDAyCisjZGVmaW5lIElSQ09NTV9SVFNfQ1RTX0lOICAgICAgIDB4MDQKKyNkZWZpbmUgSVJDT01NX1JUU19DVFNfT1VUICAgICAgMHgwOAorI2RlZmluZSBJUkNPTU1fRFNSX0RUUl9JTiAgICAgICAweDEwCisjZGVmaW5lIElSQ09NTV9EU1JfRFRSX09VVCAgICAgIDB4MjAKKyNkZWZpbmUgSVJDT01NX0VOUV9BQ0tfSU4gICAgICAgMHg0MAorI2RlZmluZSBJUkNPTU1fRU5RX0FDS19PVVQgICAgICAweDgwCisKKy8qIExpbmUgc3RhdHVzICovCisjZGVmaW5lIElSQ09NTV9PVkVSUlVOX0VSUk9SICAgIDB4MDIKKyNkZWZpbmUgSVJDT01NX1BBUklUWV9FUlJPUiAgICAgMHgwNAorI2RlZmluZSBJUkNPTU1fRlJBTUlOR19FUlJPUiAgICAweDA4CisKKy8qIERURSAoRGF0YSB0ZXJtaW5hbCBlcXVpcG1lbnQpIGxpbmUgc2V0dGluZ3MgKi8KKyNkZWZpbmUgSVJDT01NX0RFTFRBX0RUUiAgICAgICAgMHgwMQorI2RlZmluZSBJUkNPTU1fREVMVEFfUlRTICAgICAgICAweDAyCisjZGVmaW5lIElSQ09NTV9EVFIgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSVJDT01NX1JUUyAgICAgICAgICAgICAgMHgwOAorCisvKiBEQ0UgKERhdGEgY29tbXVuaWNhdGlvbnMgZXF1aXBtZW50KSBsaW5lIHNldHRpbmdzICovCisjZGVmaW5lIElSQ09NTV9ERUxUQV9DVFMgICAgICAgIDB4MDEgIC8qIENsZWFyIHRvIHNlbmQgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgSVJDT01NX0RFTFRBX0RTUiAgICAgICAgMHgwMiAgLyogRGF0YSBzZXQgcmVhZHkgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgSVJDT01NX0RFTFRBX1JJICAgICAgICAgMHgwNCAgLyogUmluZyBpbmRpY2F0b3IgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgSVJDT01NX0RFTFRBX0NEICAgICAgICAgMHgwOCAgLyogQ2FycmllciBkZXRlY3QgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgSVJDT01NX0NUUyAgICAgICAgICAgICAgMHgxMCAgLyogQ2xlYXIgdG8gc2VuZCBpcyBoaWdoICovCisjZGVmaW5lIElSQ09NTV9EU1IgICAgICAgICAgICAgIDB4MjAgIC8qIERhdGEgc2V0IHJlYWR5IGlzIGhpZ2ggKi8KKyNkZWZpbmUgSVJDT01NX1JJICAgICAgICAgICAgICAgMHg0MCAgLyogUmluZyBpbmRpY2F0b3IgaXMgaGlnaCAqLworI2RlZmluZSBJUkNPTU1fQ0QgICAgICAgICAgICAgICAweDgwICAvKiBDYXJyaWVyIGRldGVjdCBpcyBoaWdoICovCisjZGVmaW5lIElSQ09NTV9EQ0VfREVMVEFfQU5ZICAgIDB4MGYKKworLyoKKyAqIFBhcmFtZXRlciBzdGF0ZQorICovCitzdHJ1Y3QgaXJjb21tX3BhcmFtcyB7CisJLyogR2VuZXJhbCBjb250cm9sIHBhcmFtcyAqLworCV9fdTggIHNlcnZpY2VfdHlwZTsKKwlfX3U4ICBwb3J0X3R5cGU7CisJY2hhciAgcG9ydF9uYW1lWzMyXTsKKworCS8qIENvbnRyb2wgcGFyYW1zIGZvciAzLSBhbmQgOS13aXJlIHNlcnZpY2UgdHlwZSAqLworCV9fdTMyIGRhdGFfcmF0ZTsgICAgICAgICAvKiBEYXRhIHJhdGUgaW4gYnBzICovCisJX191OCAgZGF0YV9mb3JtYXQ7CisJX191OCAgZmxvd19jb250cm9sOworCWNoYXIgIHhvbnhvZmZbMl07CisJY2hhciAgZW5xYWNrWzJdOworCV9fdTggIGxpbmVfc3RhdHVzOworCV9fdTggIF9icmVhazsKKworCV9fdTggIG51bGxfbW9kZW07CisKKwkvKiBDb250cm9sIHBhcmFtcyBmb3IgOS13aXJlIHNlcnZpY2UgdHlwZSAqLworCV9fdTggZHRlOworCV9fdTggZGNlOworCV9fdTggcG9sbDsKKworCS8qIENvbnRyb2wgcGFyYW1zIGZvciBDZW50cm9uaWNzIHNlcnZpY2UgdHlwZSAqLworfTsKKworc3RydWN0IGlyY29tbV90dHlfY2I7IC8qIEZvcndhcmQgZGVjbC4gKi8KKworaW50IGlyY29tbV9wYXJhbV9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmLCBfX3U4IHBpLCBpbnQgZmx1c2gpOworCitleHRlcm4gcGlfcGFyYW1faW5mb190IGlyY29tbV9wYXJhbV9pbmZvOworCisjZW5kaWYgLyogSVJDT01NX1BBUkFNU19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3R0cC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzMDgxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3R0cC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJjb21tX3R0cC5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgV2VkIEp1biAgOSAxMDowNjowNyAxOTk5CisgKiBNb2RpZmllZCBhdDogICBGcmkgQXVnIDEzIDA3OjMyOjIyIDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkNPTU1fVFRQX0gKKyNkZWZpbmUgSVJDT01NX1RUUF9ICisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmNvbW1fY29yZS5oPgorCitpbnQgIGlyY29tbV9vcGVuX3RzYXAoc3RydWN0IGlyY29tbV9jYiAqc2VsZik7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHkuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3R0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Njk5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHkuaApAQCAtMCwwICsxLDEzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmNvbW1fdHR5LmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTdW4gSnVuICA2IDIzOjI0OjIyIDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIEZyaSBKYW4gMjggMTM6MTY6NTcgMjAwMAorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJDT01NX1RUWV9ICisjZGVmaW5lIElSQ09NTV9UVFlfSAorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CQkvKiBzdHJ1Y3QgdHR5X3N0cnVjdCAqLworCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJpYXNfb2JqZWN0Lmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJjb21tX2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmNvbW1fcGFyYW0uaD4KKworI2RlZmluZSBJUkNPTU1fVFRZX1BPUlRTIDMyCisjZGVmaW5lIElSQ09NTV9UVFlfTUFHSUMgMHgzNDMyCisjZGVmaW5lIElSQ09NTV9UVFlfTUFKT1IgMTYxCisjZGVmaW5lIElSQ09NTV9UVFlfTUlOT1IgMAorCisvKiBUaGlzIGlzIHVzZWQgYXMgYW4gaW5pdGlhbCB2YWx1ZSB0byBtYXhfaGVhZGVyX3NpemUgYmVmb3JlIHRoZSBwcm9wZXIKKyAqIHZhbHVlIGlzIGZpbGxlZCBpbiAoNSBmb3IgdHRwLCA0IGZvciBsbXApLiBUaGlzIGFsbG93IHVzIHRvIGRldGVjdAorICogdGhlIHN0YXRlIG9mIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24uIC0gSmVhbiBJSSAqLworI2RlZmluZSBJUkNPTU1fVFRZX0hEUl9VTklOSVRJQUxJU0VECTE2CisvKiBTYW1lIGZvciBwYXlsb2FkIHNpemUuIFNlZSBxb3MuYyBmb3IgdGhlIHNtYWxsZXN0IG1heCBkYXRhIHNpemUgKi8KKyNkZWZpbmUgSVJDT01NX1RUWV9EQVRBX1VOSU5JVElBTElTRUQJKDY0IC0gSVJDT01NX1RUWV9IRFJfVU5JTklUSUFMSVNFRCkKKworLyogVGhvc2UgYXJlIHJlYWxseSBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvc2VyaWFsLmggLSBKZWFuIElJICovCisjZGVmaW5lIEFTWU5DX0JfSU5JVElBTElaRUQJMzEJLyogU2VyaWFsIHBvcnQgd2FzIGluaXRpYWxpemVkICovCisjZGVmaW5lIEFTWU5DX0JfTk9STUFMX0FDVElWRQkyOQkvKiBOb3JtYWwgZGV2aWNlIGlzIGFjdGl2ZSAqLworI2RlZmluZSBBU1lOQ19CX0NMT1NJTkcJCTI3CS8qIFNlcmlhbCBwb3J0IGlzIGNsb3NpbmcgKi8KKworLyoKKyAqIElyQ09NTSBUVFkgZHJpdmVyIHN0YXRlCisgKi8KK3N0cnVjdCBpcmNvbW1fdHR5X2NiIHsKKwlpcmRhX3F1ZXVlX3QgcXVldWU7ICAgICAgICAgICAgLyogTXVzdCBiZSBmaXJzdCAqLworCW1hZ2ljX3QgbWFnaWM7CisKKwlpbnQgc3RhdGU7ICAgICAgICAgICAgICAgIC8qIENvbm5lY3Qgc3RhdGUgKi8KKworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IGlyY29tbV9jYiAqaXJjb21tOyAvKiBJckNPTU0gbGF5ZXIgaW5zdGFuY2UgKi8KKworCXN0cnVjdCBza19idWZmICp0eF9za2I7ICAgLyogVHJhbnNtaXQgYnVmZmVyICovCisJc3RydWN0IHNrX2J1ZmYgKmN0cmxfc2tiOyAvKiBDb250cm9sIGRhdGEgYnVmZmVyICovCisKKwkvKiBQYXJhbWV0ZXJzICovCisJc3RydWN0IGlyY29tbV9wYXJhbXMgc2V0dGluZ3M7CisKKwlfX3U4IHNlcnZpY2VfdHlwZTsgICAgICAgIC8qIFRoZSBzZXJ2aWNlIHRoYXQgd2Ugc3VwcG9ydCAqLworCWludCBjbGllbnQ7ICAgICAgICAgICAgICAgLyogVHJ1ZSBpZiB3ZSBhcmUgYSBjbGllbnQgKi8KKwlMT0NBTF9GTE9XIGZsb3c7ICAgICAgICAgIC8qIElyVFRQIGZsb3cgc3RhdHVzICovCisKKwlpbnQgbGluZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJX191OCBkbHNhcF9zZWw7CisJX191OCBzbHNhcF9zZWw7CisKKwlfX3UzMiBzYWRkcjsKKwlfX3UzMiBkYWRkcjsKKworCV9fdTMyIG1heF9kYXRhX3NpemU7ICAgLyogTWF4IGRhdGEgd2UgY2FuIHRyYW5zbWl0IGluIG9uZSBwYWNrZXQgKi8KKwlfX3UzMiBtYXhfaGVhZGVyX3NpemU7IC8qIFRoZSBhbW91bnQgb2YgaGVhZGVyIHNwYWNlIHdlIG11c3QgcmVzZXJ2ZSAqLworCV9fdTMyIHR4X2RhdGFfc2l6ZTsJLyogTWF4IGRhdGEgc2l6ZSBvZiBjdXJyZW50IHR4X3NrYiAqLworCisJc3RydWN0IGlyaWFwX2NiICppcmlhcDsgLyogSW5zdGFuY2UgdXNlZCBmb3IgcXVlcnlpbmcgcmVtb3RlIElBUyAqLworCXN0cnVjdCBpYXNfb2JqZWN0KiBvYmo7CisJdm9pZCAqc2tleTsKKwl2b2lkICpja2V5OworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IGNsb3NlX3dhaXQ7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0ICB0cXVldWU7CisKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgY2xvc2VfZGVsYXk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgIGNsb3Npbmdfd2FpdDsgLyogdGltZSB0byB3YWl0IGJlZm9yZSBjbG9zaW5nICovCisKKwlpbnQgIG9wZW5fY291bnQ7CisJaW50ICBibG9ja2VkX29wZW47CS8qICMgb2YgYmxvY2tlZCBvcGVucyAqLworCisJLyogUHJvdGVjdCBjb25jdXJlbnQgYWNjZXNzIHRvIDoKKwkgKglvIHNlbGYtPm9wZW5fY291bnQKKwkgKglvIHNlbGYtPmN0cmxfc2tiCisJICoJbyBzZWxmLT50eF9za2IKKwkgKiBNYXliZSBvdGhlciB0aGluZ3MgbWF5IGdhaW4gdG8gYmUgcHJvdGVjdGVkIGFzIHdlbGwuLi4KKwkgKiBKZWFuIElJICovCisJc3BpbmxvY2tfdCBzcGlubG9jazsKK307CisKK3ZvaWQgaXJjb21tX3R0eV9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3ZvaWQgaXJjb21tX3R0eV9jaGVja19tb2RlbV9zdGF0dXMoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYpOworCitleHRlcm4gaW50IGlyY29tbV90dHlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOworZXh0ZXJuIGludCBpcmNvbW1fdHR5X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitleHRlcm4gaW50IGlyY29tbV90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIAorCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiB2b2lkIGlyY29tbV90dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgCisJCQkJICAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK2V4dGVybiBoYXNoYmluX3QgKmlyY29tbV90dHk7CisKKyNlbmRpZgorCisKKworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHlfYXR0YWNoLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHlfYXR0YWNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxYTU2OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3R0eV9hdHRhY2guaApAQCAtMCwwICsxLDk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyY29tbV90dHlfYXR0YWNoLmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBXZWQgSnVuICA5IDE1OjU1OjE4IDE5OTkKKyAqIE1vZGlmaWVkIGF0OiAgIEZyaSBEZWMgMTAgMjE6MDQ6NTUgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqICAgICBNQSAwMjExMS0xMzA3IFVTQQorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSQ09NTV9UVFlfQVRUQUNIX0gKKyNkZWZpbmUgSVJDT01NX1RUWV9BVFRBQ0hfSAorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJjb21tX3R0eS5oPgorCit0eXBlZGVmIGVudW0geworICAgICAgICBJUkNPTU1fVFRZX0lETEUsCisJSVJDT01NX1RUWV9TRUFSQ0gsCisgICAgICAgIElSQ09NTV9UVFlfUVVFUllfUEFSQU1FVEVSUywKKwlJUkNPTU1fVFRZX1FVRVJZX0xTQVBfU0VMLAorCUlSQ09NTV9UVFlfU0VUVVAsCisgICAgICAgIElSQ09NTV9UVFlfUkVBRFksCit9IElSQ09NTV9UVFlfU1RBVEU7CisKKy8qIElyQ09NTSBUVFkgRXZlbnRzICovCit0eXBlZGVmIGVudW0geworCUlSQ09NTV9UVFlfQVRUQUNIX0NBQkxFLAorCUlSQ09NTV9UVFlfREVUQUNIX0NBQkxFLAorCUlSQ09NTV9UVFlfREFUQV9SRVFVRVNULAorCUlSQ09NTV9UVFlfREFUQV9JTkRJQ0FUSU9OLAorCUlSQ09NTV9UVFlfRElTQ09WRVJZX1JFUVVFU1QsCisJSVJDT01NX1RUWV9ESVNDT1ZFUllfSU5ESUNBVElPTiwKKwlJUkNPTU1fVFRZX0NPTk5FQ1RfQ09ORklSTSwKKwlJUkNPTU1fVFRZX0NPTk5FQ1RfSU5ESUNBVElPTiwKKwlJUkNPTU1fVFRZX0RJU0NPTk5FQ1RfUkVRVUVTVCwKKwlJUkNPTU1fVFRZX0RJU0NPTk5FQ1RfSU5ESUNBVElPTiwKKwlJUkNPTU1fVFRZX1dEX1RJTUVSX0VYUElSRUQsCisJSVJDT01NX1RUWV9HT1RfUEFSQU1FVEVSUywKKwlJUkNPTU1fVFRZX0dPVF9MU0FQU0VMLAorfSBJUkNPTU1fVFRZX0VWRU5UOworCisvKiBVc2VkIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlIHN0YXRlLW1hY2hpbmUgKi8KK3N0cnVjdCBpcmNvbW1fdHR5X2luZm8geworICAgICAgICBfX3UzMiAgICAgc2FkZHI7ICAgICAgICAgICAgICAgLyogU291cmNlIGRldmljZSBhZGRyZXNzICovCisgICAgICAgIF9fdTMyICAgICBkYWRkcjsgICAgICAgICAgICAgICAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLworICAgICAgICBfX3U4ICAgICAgZGxzYXBfc2VsOworfTsKKworZXh0ZXJuIGNoYXIgKmlyY29tbV9zdGF0ZVtdOworZXh0ZXJuIGNoYXIgKmlyY29tbV90dHlfc3RhdGVbXTsKKworaW50IGlyY29tbV90dHlfZG9fZXZlbnQoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIElSQ09NTV9UVFlfRVZFTlQgZXZlbnQsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKTsKKworCitpbnQgIGlyY29tbV90dHlfYXR0YWNoX2NhYmxlKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmKTsKK3ZvaWQgaXJjb21tX3R0eV9kZXRhY2hfY2FibGUoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYpOwordm9pZCBpcmNvbW1fdHR5X2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKKwkJCQlzdHJ1Y3QgcW9zX2luZm8gKnFvcywgCisJCQkJX191MzIgbWF4X3NkdV9zaXplLCAKKwkJCQlfX3U4IG1heF9oZWFkZXJfc2l6ZSwgCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlyY29tbV90dHlfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorCQkJCSAgICAgIExNX1JFQVNPTiByZWFzb24sCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlyY29tbV90dHlfY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorCQkJCSAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCAKKwkJCQkgICBfX3UzMiBtYXhfc2R1X3NpemUsCisJCQkJICAgX191OCBtYXhfaGVhZGVyX3NpemUsIAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGlyY29tbV90dHlfc2VuZF9pbml0aWFsX3BhcmFtZXRlcnMoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYpOwordm9pZCBpcmNvbW1fdHR5X2xpbmtfZXN0YWJsaXNoZWQoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYpOworCisjZW5kaWYgLyogSVJDT01NX1RUWV9BVFRBQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE4NDA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJkYS5oCisgKiBWZXJzaW9uOiAgICAgICAxLjAKKyAqIERlc2NyaXB0aW9uOiAgIElyREEgY29tbW9uIGluY2x1ZGUgZmlsZSBmb3Iga2VybmVsIGludGVybmFsIHVzZQorICogU3RhdHVzOiAgICAgICAgU3RhYmxlCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBUdWUgRGVjICA5IDIxOjEzOjEyIDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIEZyaSBKYW4gMjggMTM6MTY6MzIgMjAwMAorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIAorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTkVUX0lSREFfSAorI2RlZmluZSBORVRfSVJEQV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4JCS8qIHN0cnVjdCBza19idWZmICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4JCQkvKiBzYV9mYW1pbHlfdCBpbiA8bGludXgvaXJkYS5oPiAqLworI2luY2x1ZGUgPGxpbnV4L2lyZGEuaD4KKwordHlwZWRlZiBfX3UzMiBtYWdpY190OworCisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAxCisjZW5kaWYKKworI2lmbmRlZiBGQUxTRSAKKyNkZWZpbmUgRkFMU0UgMAorI2VuZGlmCisKKy8qIEhhY2sgdG8gZG8gc21hbGwgYmFja29mZiB3aGVuIHNldHRpbmcgbWVkaWEgYnVzeSBpbiBJckxBUCAqLworI2lmbmRlZiBTTUFMTAorI2RlZmluZSBTTUFMTCA1CisjZW5kaWYKKworI2lmbmRlZiBJUkRBX01JTiAvKiBMZXRzIG5vdCBtaXggdGhpcyBNSU4gd2l0aCBvdGhlciBoZWFkZXIgZmlsZXMgKi8KKyNkZWZpbmUgSVJEQV9NSU4oYSwgYikgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQorI2VuZGlmCisKKyNpZm5kZWYgSVJEQV9BTElHTgorIyAgZGVmaW5lIElSREFfQUxJR04gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCkpCisjZW5kaWYKKyNpZm5kZWYgSVJEQV9QQUNLCisjICBkZWZpbmUgSVJEQV9QQUNLIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX0lSREFfREVCVUcKKworZXh0ZXJuIHVuc2lnbmVkIGludCBpcmRhX2RlYnVnOworCisvKiB1c2UgMCBmb3IgcHJvZHVjdGlvbiwgMSBmb3IgdmVyaWZpY2F0aW9uLCA+MiBmb3IgZGVidWcgKi8KKyNkZWZpbmUgSVJEQV9ERUJVR19MRVZFTCAwCisKKyNkZWZpbmUgSVJEQV9ERUJVRyhuLCBhcmdzLi4uKSBcCitkbyB7CWlmIChpcmRhX2RlYnVnID49IChuKSkgXAorCQlwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgSVJEQV9BU1NFUlQoZXhwciwgZnVuYykgXAorZG8geyBpZighKGV4cHIpKSB7IFwKKwlwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlczolczolZCAlc1xuIiwgXAorCQlfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5FX18sKCNleHByKSApOyBcCisJZnVuYyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIElSREFfQVNTRVJUX0xBQkVMKGxhYmVsKQlsYWJlbAorI2Vsc2UKKyNkZWZpbmUgSVJEQV9ERUJVRyhuLCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIElSREFfQVNTRVJUKGV4cHIsIGZ1bmMpIGRvIHsgKHZvaWQpKGV4cHIpOyB9IHdoaWxlICgwKQorI2RlZmluZSBJUkRBX0FTU0VSVF9MQUJFTChsYWJlbCkKKyNlbmRpZiAvKiBDT05GSUdfSVJEQV9ERUJVRyAqLworCisjZGVmaW5lIElSREFfV0FSTklORyhhcmdzLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIGFyZ3MpCisjZGVmaW5lIElSREFfTUVTU0FHRShhcmdzLi4uKSBwcmludGsoS0VSTl9JTkZPIGFyZ3MpCisjZGVmaW5lIElSREFfRVJST1IoYXJncy4uLikgICBwcmludGsoS0VSTl9FUlIgYXJncykKKworLyoKKyAqICBNYWdpYyBudW1iZXJzIHVzZWQgYnkgTGludXgtSXJEQS4gUmFuZG9tIG51bWJlcnMgd2hpY2ggbXVzdCBiZSB1bmlxdWUgdG8gCisgKiAgZ2l2ZSB0aGUgYmVzdCBwcm90ZWN0aW9uCisgKi8KKworI2RlZmluZSBJUlRUWV9NQUdJQyAgICAgICAgMHgyMzU3CisjZGVmaW5lIExBUF9NQUdJQyAgICAgICAgICAweDEzNTcKKyNkZWZpbmUgTE1QX01BR0lDICAgICAgICAgIDB4NDMyMQorI2RlZmluZSBMTVBfTFNBUF9NQUdJQyAgICAgMHg2OTMzMworI2RlZmluZSBMTVBfTEFQX01BR0lDICAgICAgMHgzNDMyCisjZGVmaW5lIElSREFfREVWSUNFX01BR0lDICAweDYzNDU0CisjZGVmaW5lIElBU19NQUdJQyAgICAgICAgICAweDAwNworI2RlZmluZSBUVFBfTUFHSUMgICAgICAgICAgMHgyNDExNjkKKyNkZWZpbmUgVFRQX1RTQVBfTUFHSUMgICAgIDB4NDM0NQorI2RlZmluZSBJUk9CRVhfTUFHSUMgICAgICAgMHgzNDEzMjQKKyNkZWZpbmUgSEJfTUFHSUMgICAgICAgICAgIDB4NjQ1MzQKKyNkZWZpbmUgSVJMQU5fTUFHSUMgICAgICAgIDB4NzU0CisjZGVmaW5lIElBU19PQkpFQ1RfTUFHSUMgICAweDM0MjM0CisjZGVmaW5lIElBU19BVFRSSUJfTUFHSUMgICAweDQ1MjMyCisjZGVmaW5lIElSREFfVEFTS19NQUdJQyAgICAweDM4NDIzCisKKyNkZWZpbmUgSUFTX0RFVklDRV9JRCAweDAwMDAgLyogRGVmaW5lZCBieSBJckRBLCBJckxNUCBzZWN0aW9uIDQuMSAocGFnZSA2OCkgKi8KKyNkZWZpbmUgSUFTX1BOUF9JRCAgICAweGQzNDIKKyNkZWZpbmUgSUFTX09CRVhfSUQgICAweDM0MzIzCisjZGVmaW5lIElBU19JUkxBTl9JRCAgMHgzNDIzNAorI2RlZmluZSBJQVNfSVJDT01NX0lEIDB4MjM0MworI2RlZmluZSBJQVNfSVJMUFRfSUQgIDB4OTg3NgorCisjZW5kaWYgLyogTkVUX0lSREFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjE2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmgKQEAgLTAsMCArMSwzMDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJkYV9kZXZpY2UuaAorICogVmVyc2lvbjogICAgICAgMC45CisgKiBEZXNjcmlwdGlvbjogICBDb250YWlucyB2YXJpb3VzIGRlY2xhcmF0aW9ucyB1c2VkIGJ5IHRoZSBkcml2ZXJzCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBUdWUgQXByIDE0IDEyOjQxOjQyIDE5OTgKKyAqIE1vZGlmaWVkIGF0OiAgIE1vbiBNYXIgMjAgMDk6MDg6NTcgMjAwMAorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4IFRob21hcyBEYXZpcywgPHJhdGJlcnRAcmFkaWtzLm5ldD4sCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgaGVhZGVyIGNvbnRhaW5zIGFsbCB0aGUgSXJEQSBkZWZpbml0aW9ucyBhIGRyaXZlciByZWFsbHkKKyAqIG5lZWRzLCBhbmQgdGhlcmVmb3JlIHRoZSBkcml2ZXIgc2hvdWxkIG5vdCBuZWVkIHRvIGluY2x1ZGUKKyAqIGFueSBvdGhlciBJckRBIGhlYWRlcnMgLSBKZWFuIElJCisgKi8KKworI2lmbmRlZiBJUkRBX0RFVklDRV9ICisjZGVmaW5lIElSREFfREVWSUNFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CQkvKiBzdHJ1Y3Qgc2tfYnVmZiAqLworI2luY2x1ZGUgPGxpbnV4L2lyZGEuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9xb3MuaD4JCS8qIHN0cnVjdCBxb3NfaW5mbyAqLworI2luY2x1ZGUgPG5ldC9pcmRhL2lycXVldWUuaD4JCS8qIGlyZGFfcXVldWVfdCAqLworCisvKiBBIGZldyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAodG8gbWFrZSBjb21waWxlciBoYXBweSkgKi8KK3N0cnVjdCBpcmxhcF9jYjsKKworLyogU29tZSBub24tc3RhbmRhcmQgaW50ZXJmYWNlIGZsYWdzIChzaG91bGQgbm90IGNvbmZsaWN0IHdpdGggYW55IGluIGlmLmgpICovCisjZGVmaW5lIElGRl9TSVIgCTB4MDAwMSAvKiBTdXBwb3J0cyBTSVIgc3BlZWRzICovCisjZGVmaW5lIElGRl9NSVIgCTB4MDAwMiAvKiBTdXBwb3J0cyBNSVIgc3BlZWRzICovCisjZGVmaW5lIElGRl9GSVIgCTB4MDAwNCAvKiBTdXBwb3J0cyBGSVIgc3BlZWRzICovCisjZGVmaW5lIElGRl9WRklSICAgICAgICAweDAwMDggLyogU3VwcG9ydHMgVkZJUiBzcGVlZHMgKi8KKyNkZWZpbmUgSUZGX1BJTyAgIAkweDAwMTAgLyogU3VwcG9ydHMgUElPIHRyYW5zZmVyIG9mIGRhdGEgKi8KKyNkZWZpbmUgSUZGX0RNQQkJMHgwMDIwIC8qIFN1cHBvcnRzIERNQSB0cmFuc2ZlciBvZiBkYXRhICovCisjZGVmaW5lIElGRl9TSE0gICAgICAgICAweDAwNDAgLyogU3VwcG9ydHMgc2hhcmVkIG1lbW9yeSBkYXRhIHRyYW5zZmVycyAqLworI2RlZmluZSBJRkZfRE9OR0xFICAgICAgMHgwMDgwIC8qIEludGVyZmFjZSBoYXMgYSBkb25nbGUgYXR0YWNoZWQgKi8KKyNkZWZpbmUgSUZGX0FJUiAgICAgICAgIDB4MDEwMCAvKiBTdXBwb3J0cyBBZHZhbmNlZCBJUiAoQUlSKSBzdGFuZGFyZHMgKi8KKworI2RlZmluZSBJT19YTUlUIDB4MDEKKyNkZWZpbmUgSU9fUkVDViAweDAyCisKK3R5cGVkZWYgZW51bSB7CisJSVJEQV9JUkxBUCwgLyogSXJEQSBtb2RlLCBhbmQgZGVsaXZlciB0byBJckxBUCAqLworCUlSREFfUkFXLCAgIC8qIElyREEgbW9kZSAqLworCVNIQVJQX0FTSywKKwlUVl9SRU1PVEUsICAvKiBBbHNvIGtub3duIGFzIENvbnN1bWVyIEVsZWN0cm9uaWNzIElSICovCit9IElORlJBUkVEX01PREU7CisKK3R5cGVkZWYgZW51bSB7CisJSVJEQV9UQVNLX0lOSVQsICAgICAgICAvKiBBbGwgdGFza3MgYXJlIGluaXRpYWxpemVkIHdpdGggdGhpcyBzdGF0ZSAqLworCUlSREFfVEFTS19ET05FLCAgICAgICAgLyogU2lnbmFscyB0aGF0IHRoZSB0YXNrIGlzIGZpbmlzaGVkICovCisJSVJEQV9UQVNLX1dBSVQsCisJSVJEQV9UQVNLX1dBSVQxLAorCUlSREFfVEFTS19XQUlUMiwKKwlJUkRBX1RBU0tfV0FJVDMsCisJSVJEQV9UQVNLX0NISUxEX0lOSVQsICAvKiBJbml0aWFsaXppbmcgY2hpbGQgdGFzayAqLworCUlSREFfVEFTS19DSElMRF9XQUlULCAgLyogV2FpdGluZyBmb3IgY2hpbGQgdGFzayB0byBmaW5pc2ggKi8KKwlJUkRBX1RBU0tfQ0hJTERfRE9ORSAgIC8qIENoaWxkIHRhc2sgaXMgZmluaXNoZWQgKi8KK30gSVJEQV9UQVNLX1NUQVRFOworCitzdHJ1Y3QgaXJkYV90YXNrOwordHlwZWRlZiBpbnQgKCpJUkRBX1RBU0tfQ0FMTEJBQ0spIChzdHJ1Y3QgaXJkYV90YXNrICp0YXNrKTsKKworc3RydWN0IGlyZGFfdGFzayB7CisJaXJkYV9xdWV1ZV90IHE7CisJbWFnaWNfdCBtYWdpYzsKKworCUlSREFfVEFTS19TVEFURSBzdGF0ZTsKKwlJUkRBX1RBU0tfQ0FMTEJBQ0sgZnVuY3Rpb247CisJSVJEQV9UQVNLX0NBTExCQUNLIGZpbmlzaGVkOworCisJc3RydWN0IGlyZGFfdGFzayAqcGFyZW50OworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCisJdm9pZCAqaW5zdGFuY2U7IC8qIEluc3RhbmNlIGJlaW5nIGNhbGxlZCAqLworCXZvaWQgKnBhcmFtOyAgICAvKiBQYXJhbWV0ZXIgdG8gYmUgdXNlZCBieSBpbnN0YW5jZSAqLworfTsKKworLyogRG9uZ2xlIGluZm8gKi8KK3N0cnVjdCBkb25nbGVfcmVnOwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCBkb25nbGVfcmVnICppc3N1ZTsgICAgIC8qIFJlZ2lzdHJhdGlvbiBpbmZvICovCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgICAgICAgICAgIC8qIERldmljZSB3ZSBhcmUgYXR0YWNoZWQgdG8gKi8KKwlzdHJ1Y3QgaXJkYV90YXNrICpzcGVlZF90YXNrOyAvKiBUYXNrIGhhbmRsaW5nIHNwZWVkIGNoYW5nZSAqLworCXN0cnVjdCBpcmRhX3Rhc2sgKnJlc2V0X3Rhc2s7IC8qIFRhc2sgaGFuZGxpbmcgcmVzZXQgKi8KKwlfX3UzMiBzcGVlZDsgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHNwZWVkICovCisKKwkvKiBDYWxsYmFja3MgdG8gdGhlIElyREEgZGV2aWNlIGRyaXZlciAqLworCWludCAoKnNldF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQgbW9kZSk7CisJaW50ICgqcmVhZCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCAqYnVmLCBpbnQgbGVuKTsKKwlpbnQgKCp3cml0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCAqYnVmLCBpbnQgbGVuKTsKKwlpbnQgKCpzZXRfZHRyX3J0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGR0ciwgaW50IHJ0cyk7Cit9IGRvbmdsZV90OworCisvKiBEb25nbGUgcmVnaXN0cmF0aW9uIGluZm8gKi8KK3N0cnVjdCBkb25nbGVfcmVnIHsKKwlpcmRhX3F1ZXVlX3QgcTsgICAgICAgICAvKiBNdXN0IGJlIGZpcnN0ICovCisJSVJEQV9ET05HTEUgdHlwZTsKKworCXZvaWQgKCpvcGVuKShkb25nbGVfdCAqZG9uZ2xlLCBzdHJ1Y3QgcW9zX2luZm8gKnFvcyk7CisJdm9pZCAoKmNsb3NlKShkb25nbGVfdCAqZG9uZ2xlKTsKKwlpbnQgICgqcmVzZXQpKHN0cnVjdCBpcmRhX3Rhc2sgKnRhc2spOworCWludCAgKCpjaGFuZ2Vfc3BlZWQpKHN0cnVjdCBpcmRhX3Rhc2sgKnRhc2spOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworLyogCisgKiBQZXItcGFja2V0IGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gaGlkZSBpbnNpZGUgc2tfYnVmZiAKKyAqIChtdXN0IG5vdCBleGNlZWQgNDggYnl0ZXMsIGNoZWNrIHdpdGggc3RydWN0IHNrX2J1ZmYpIAorICovCitzdHJ1Y3QgaXJkYV9za2JfY2IgeworCW1hZ2ljX3QgbWFnaWM7ICAgICAgIC8qIEJlIHN1cmUgdGhhdCB3ZSBjYW4gdHJ1c3QgdGhlIGluZm9ybWF0aW9uICovCisJX191MzIgICBuZXh0X3NwZWVkOyAgLyogVGhlIFNwZWVkIHRvIGJlIHNldCAqYWZ0ZXIqIHRoaXMgZnJhbWUgKi8KKwlfX3UxNiAgIG10dDsgICAgICAgICAvKiBNaW5pbXVtIHR1cm4gYXJvdW5kIHRpbWUgKi8KKwlfX3UxNiAgIHhib2ZzOyAgICAgICAvKiBOdW1iZXIgb2YgeGJvZnMgcmVxdWlyZWQsIHVzZWQgYnkgU0lSIG1vZGUgKi8KKwlfX3UxNiAgIG5leHRfeGJvZnM7ICAvKiBOdW1iZXIgb2YgeGJvZnMgcmVxdWlyZWQgKmFmdGVyKiB0aGlzIGZyYW1lICovCisJdm9pZCAgICAqY29udGV4dDsgICAgLyogTWF5IGJlIHVzZWQgYnkgZHJpdmVycyAqLworCXZvaWQgICAgKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsgLyogVXNlZCBmb3IgZmxvdyBjb250cm9sICovCisJX191MTYgICB4Ym9mc19kZWxheTsgLyogTnVtYmVyIG9mIHhib2ZzIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIG10dCAqLworCV9fdTggICAgbGluZTsgICAgICAgIC8qIFVzZWQgYnkgSXJDT01NIGluIElyTFBUIG1vZGUgKi8KK307CisKKy8qIENoaXAgc3BlY2lmaWMgaW5mbyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBjZmdfYmFzZTsgICAgICAgICAvKiBDb25maWcgcmVnaXN0ZXIgSU8gYmFzZSAqLworICAgICAgICBpbnQgc2lyX2Jhc2U7ICAgICAgICAgLyogU0lSIElPIGJhc2UgKi8KKwlpbnQgZmlyX2Jhc2U7ICAgICAgICAgLyogRklSIElPIGJhc2UgKi8KKwlpbnQgbWVtX2Jhc2U7ICAgICAgICAgLyogU2hhcmVkIG1lbW9yeSBiYXNlICovCisgICAgICAgIGludCBzaXJfZXh0OyAgICAgICAgICAvKiBMZW5ndGggb2YgU0lSIGlvYmFzZSAqLworCWludCBmaXJfZXh0OyAgICAgICAgICAvKiBMZW5ndGggb2YgRklSIGlvYmFzZSAqLworICAgICAgICBpbnQgaXJxLCBpcnEyOyAgICAgICAgLyogSW50ZXJydXB0cyB1c2VkICovCisgICAgICAgIGludCBkbWEsIGRtYTI7ICAgICAgICAvKiBETUEgY2hhbm5lbChzKSB1c2VkICovCisgICAgICAgIGludCBmaWZvX3NpemU7ICAgICAgICAvKiBGSUZPIHNpemUgKi8KKyAgICAgICAgaW50IGlycWZsYWdzOyAgICAgICAgIC8qIGludGVycnVwdCBmbGFncyAoaWUsIFNBX1NISVJRfFNBX0lOVEVSUlVQVCkgKi8KKwlpbnQgZGlyZWN0aW9uOyAgICAgICAgLyogTGluayBkaXJlY3Rpb24sIHVzZWQgYnkgc29tZSBGSVIgZHJpdmVycyAqLworCWludCBlbmFibGVkOyAgICAgICAgICAvKiBQb3dlcmVkIG9uPyAqLworCWludCBzdXNwZW5kZWQ7ICAgICAgICAvKiBTdXNwZW5kZWQgYnkgQVBNICovCisJX191MzIgc3BlZWQ7ICAgICAgICAgIC8qIEN1cnJlbnRseSB1c2VkIHNwZWVkICovCisJX191MzIgbmV3X3NwZWVkOyAgICAgIC8qIFNwZWVkIHdlIG11c3QgY2hhbmdlIHRvIHdoZW4gVHggaXMgZmluaXNoZWQgKi8KKwlpbnQgZG9uZ2xlX2lkOyAgICAgICAgLyogRG9uZ2xlIG9yIHRyYW5zY2VpdmVyIGN1cnJlbnRseSB1c2VkICovCit9IGNoaXBpb190OworCisvKiBJTyBidWZmZXIgc3BlY2lmaWMgaW5mbyAoaW5zcGlyZWQgYnkgc3RydWN0IHNrX2J1ZmYpICovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHN0YXRlOyAgICAgICAgICAgIC8qIFJlY2VpdmluZyBzdGF0ZSAodHJhbnNtaXQgc3RhdGUgbm90IHVzZWQpICovCisJaW50IGluX2ZyYW1lOyAgICAgICAgIC8qIFRydWUgaWYgcmVjZWl2aW5nIGZyYW1lICovCisKKwlfX3U4ICpoZWFkOwkgICAgICAvKiBzdGFydCBvZiBidWZmZXIgKi8KKwlfX3U4ICpkYXRhOwkgICAgICAvKiBzdGFydCBvZiBkYXRhIGluIGJ1ZmZlciAqLworCisJaW50IGxlbjsJICAgICAgLyogY3VycmVudCBsZW5ndGggb2YgZGF0YSAqLworCWludCB0cnVlc2l6ZTsJICAgICAgLyogdG90YWwgYWxsb2NhdGVkIHNpemUgb2YgYnVmZmVyICovCisJX191MTYgZmNzOworCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsJLyogWmVyb0NvcHkgUnggaW4gYXN5bmNfdW53cmFwX2NoYXIoKSAqLworfSBpb2J1ZmZfdDsKKworLyogTWF4aW11bSBTSVIgZnJhbWUgKHNrYikgdGhhdCB3ZSBleHBlY3QgdG8gcmVjZWl2ZSAqdW53cmFwcGVkKi4KKyAqIE1heCBMQVAgTVRVIChJIGZpZWxkKSBpcyAyMDQ4IGJ5dGVzIG1heCAoSXJMQVAgMS4xLCBjaGFwdCA2LjYuNSwgcDQwKS4KKyAqIE1heCBMQVAgaGVhZGVyIGlzIDIgYnl0ZXMgKGZvciBub3cpLgorICogTWF4IENSQyBpcyAyIGJ5dGVzIGF0IFNJUiwgNCBieXRlcyBhdCBGSVIuIAorICogTmVlZCAxIGJ5dGUgZm9yIHNrYl9yZXNlcnZlKCkgdG8gYWxpZ24gSVAgaGVhZGVyIGZvciBJckxBTi4KKyAqIEFkZCBhIGZldyBleHRyYSBieXRlcyBqdXN0IHRvIGJlIHNhZmUgKGJ1ZmZlciBpcyBwb3dlciBvZiB0d28gYW55d2F5KQorICogSmVhbiBJSSAqLworI2RlZmluZSBJUkRBX1NLQl9NQVhfTVRVCTIwNjQKKy8qIE1heGltdW0gU0lSIGZyYW1lIHRoYXQgd2UgZXhwZWN0IHRvIHNlbmQsIHdyYXBwZWQgKGkuZS4gd2l0aCBYQk9GUworICogYW5kIGVzY2FwZWQgY2hhcmFjdGVycyBvbiB0b3Agb2YgYWJvdmUpLiAqLworI2RlZmluZSBJUkRBX1NJUl9NQVhfRlJBTUUJNDI2OQorCisvKiBUaGUgU0lSIHVud3JhcHBlciBhc3luY191bndyYXBfY2hhcigpIHdpbGwgdXNlIGEgUngtY29weS1icmVhayBtZWNoYW5pc20KKyAqIHdoZW4gdXNpbmcgdGhlIG9wdGlvbmFsIFplcm9Db3B5IFJ4LCB3aGVyZSBvbmx5IHNtYWxsIGZyYW1lcyBhcmUgbWVtY3B5CisgKiB0byBhIHNtYWxsZXIgc2tiIHRvIHNhdmUgbWVtb3J5LiBUaGlzIGlzIHRoZSB0aHJlc2hvbGQgdW5kZXIgd2hpY2ggY29weQorICogd2lsbCBoYXBwZW4gKGFuZCBvdmVyIHdoaWNoIGl0IHdvbid0IGhhcHBlbikuCisgKiBTb21lIEZJUiBkcml2ZXJzIG1heSB1c2UgdGhpcyAjZGVmaW5lIGFzIHdlbGwuLi4KKyAqIFRoaXMgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdmFyaW91cyBFdGhlcm5ldCBkcml2ZXJzLiAtIEplYW4gSUkgKi8KKyNkZWZpbmUgSVJEQV9SWF9DT1BZX1RIUkVTSE9MRCAgMjU2CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2ludCAgaXJkYV9kZXZpY2VfaW5pdCh2b2lkKTsKK3ZvaWQgaXJkYV9kZXZpY2VfY2xlYW51cCh2b2lkKTsKKworLyogSXJMQVAgZW50cnkgcG9pbnRzIHVzZWQgYnkgdGhlIGRyaXZlcnMuCisgKiBXZSBkZWNsYXJlIHRoZW0gaGVyZSB0byBhdm9pZCB0aGUgZHJpdmVyIHB1bGxpbmcgYSB3aG9sZSBidW5jaCBzdGFjaworICogaGVhZGVycyB0aGV5IGRvbid0IHJlYWxseSBuZWVkIC0gSmVhbiBJSSAqLworc3RydWN0IGlybGFwX2NiICppcmxhcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAorCQkJICAgIGNvbnN0IGNoYXIgKmh3X25hbWUpOwordm9pZCBpcmxhcF9jbG9zZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpOworCisvKiBJbnRlcmZhY2UgdG8gYmUgdXNlcyBieSBJckxBUCAqLwordm9pZCBpcmRhX2RldmljZV9zZXRfbWVkaWFfYnVzeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RhdHVzKTsKK2ludCAgaXJkYV9kZXZpY2VfaXNfbWVkaWFfYnVzeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCAgaXJkYV9kZXZpY2VfaXNfcmVjZWl2aW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKiBJbnRlcmZhY2UgZm9yIGludGVybmFsIHVzZSAqLworc3RhdGljIGlubGluZSBpbnQgaXJkYV9kZXZpY2VfdHhxdWV1ZV9lbXB0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoc2tiX3F1ZXVlX2xlbigmZGV2LT5xZGlzYy0+cSkgPT0gMCk7Cit9CitpbnQgIGlyZGFfZGV2aWNlX3NldF9yYXdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSogc2VsZiwgaW50IHN0YXR1cyk7CitzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaXJkYWRldihpbnQgc2l6ZW9mX3ByaXYpOworCisvKiBEb25nbGUgaW50ZXJmYWNlICovCit2b2lkIGlyZGFfZGV2aWNlX3VucmVnaXN0ZXJfZG9uZ2xlKHN0cnVjdCBkb25nbGVfcmVnICpkb25nbGUpOworaW50ICBpcmRhX2RldmljZV9yZWdpc3Rlcl9kb25nbGUoc3RydWN0IGRvbmdsZV9yZWcgKmRvbmdsZSk7Citkb25nbGVfdCAqaXJkYV9kZXZpY2VfZG9uZ2xlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHR5cGUpOworaW50IGlyZGFfZGV2aWNlX2RvbmdsZV9jbGVhbnVwKGRvbmdsZV90ICpkb25nbGUpOworCisjaWZkZWYgQ09ORklHX0lTQQordm9pZCBpcmRhX3NldHVwX2RtYShpbnQgY2hhbm5lbCwgZG1hX2FkZHJfdCBidWZmZXIsIGludCBjb3VudCwgaW50IG1vZGUpOworI2VuZGlmCisKK3ZvaWQgaXJkYV90YXNrX2RlbGV0ZShzdHJ1Y3QgaXJkYV90YXNrICp0YXNrKTsKK3N0cnVjdCBpcmRhX3Rhc2sgKmlyZGFfdGFza19leGVjdXRlKHZvaWQgKmluc3RhbmNlLCAKKwkJCQkgICAgSVJEQV9UQVNLX0NBTExCQUNLIGZ1bmN0aW9uLCAKKwkJCQkgICAgSVJEQV9UQVNLX0NBTExCQUNLIGZpbmlzaGVkLCAKKwkJCQkgICAgc3RydWN0IGlyZGFfdGFzayAqcGFyZW50LCB2b2lkICpwYXJhbSk7Cit2b2lkIGlyZGFfdGFza19uZXh0X3N0YXRlKHN0cnVjdCBpcmRhX3Rhc2sgKnRhc2ssIElSREFfVEFTS19TVEFURSBzdGF0ZSk7CisKKy8qCisgKiBGdW5jdGlvbiBpcmRhX2dldF9tdHQgKHNrYikKKyAqCisgKiAgICBVdGlsaXR5IGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBtaW5pbXVtIHR1cm5hcm91bmQgdGltZSBvdXQgb2YgCisgKiAgICB0aGUgc2tiLCB3aGVyZSBpdCBoYXMgYmVlbiBoaWRkZW4gaW4gdGhlIGNiIGZpZWxkLgorICovCitzdGF0aWMgaW5saW5lIF9fdTE2IGlyZGFfZ2V0X210dChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbnN0IHN0cnVjdCBpcmRhX3NrYl9jYiAqY2IgPSAoY29uc3Qgc3RydWN0IGlyZGFfc2tiX2NiICopIHNrYi0+Y2I7CisJcmV0dXJuIChjYi0+bWFnaWMgPT0gTEFQX01BR0lDKSA/IGNiLT5tdHQgOiAxMDAwMDsKK30KKworLyoKKyAqIEZ1bmN0aW9uIGlyZGFfZ2V0X25leHRfc3BlZWQgKHNrYikKKyAqCisgKiAgICBFeHRyYWN0IHRoZSBzcGVlZCB0aGF0IHNob3VsZCBiZSBzZXQgKmFmdGVyKiB0aGlzIGZyYW1lIGZyb20gdGhlIHNrYgorICoKKyAqIE5vdGUgOiByZXR1cm4gLTEgZm9yIHVzZXIgc3BhY2UgZnJhbWVzCisgKi8KK3N0YXRpYyBpbmxpbmUgX191MzIgaXJkYV9nZXRfbmV4dF9zcGVlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbnN0IHN0cnVjdCBpcmRhX3NrYl9jYiAqY2IgPSAoY29uc3Qgc3RydWN0IGlyZGFfc2tiX2NiICopIHNrYi0+Y2I7CisJcmV0dXJuIChjYi0+bWFnaWMgPT0gTEFQX01BR0lDKSA/IGNiLT5uZXh0X3NwZWVkIDogLTE7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBpcmRhX2dldF9uZXh0X3hib2ZzIChza2IpCisgKgorICogICAgRXh0cmFjdCB0aGUgeGJvZnMgdGhhdCBzaG91bGQgYmUgc2V0IGZvciB0aGlzIGZyYW1lIGZyb20gdGhlIHNrYgorICoKKyAqIE5vdGUgOiBkZWZhdWx0IHRvIDEwIGZvciB1c2VyIHNwYWNlIGZyYW1lcworICovCitzdGF0aWMgaW5saW5lIF9fdTE2IGlyZGFfZ2V0X3hib2ZzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IGlyZGFfc2tiX2NiICpjYiA9IChjb25zdCBzdHJ1Y3QgaXJkYV9za2JfY2IgKikgc2tiLT5jYjsKKwlyZXR1cm4gKGNiLT5tYWdpYyA9PSBMQVBfTUFHSUMpID8gY2ItPnhib2ZzIDogMTA7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBpcmRhX2dldF9uZXh0X3hib2ZzIChza2IpCisgKgorICogICAgRXh0cmFjdCB0aGUgeGJvZnMgdGhhdCBzaG91bGQgYmUgc2V0ICphZnRlciogdGhpcyBmcmFtZSBmcm9tIHRoZSBza2IKKyAqCisgKiBOb3RlIDogcmV0dXJuIC0xIGZvciB1c2VyIHNwYWNlIGZyYW1lcworICovCitzdGF0aWMgaW5saW5lIF9fdTE2IGlyZGFfZ2V0X25leHRfeGJvZnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb25zdCBzdHJ1Y3QgaXJkYV9za2JfY2IgKmNiID0gKGNvbnN0IHN0cnVjdCBpcmRhX3NrYl9jYiAqKSBza2ItPmNiOworCXJldHVybiAoY2ItPm1hZ2ljID09IExBUF9NQUdJQykgPyBjYi0+bmV4dF94Ym9mcyA6IC0xOworfQorI2VuZGlmIC8qIElSREFfREVWSUNFX0ggKi8KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyaWFwLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyaWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwN2M1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJpYXAuaApAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmlhcC5oCisgKiBWZXJzaW9uOiAgICAgICAwLjUKKyAqIERlc2NyaXB0aW9uOiAgIEluZm9ybWF0aW9uIEFjY2VzcyBQcm90b2NvbCAoSUFQKQorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgVGh1IEF1ZyAyMSAwMDowMjowNyAxOTk3CisgKiBNb2RpZmllZCBhdDogICBTYXQgRGVjIDI1IDE2OjQyOjA5IDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5Ny0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJJQVBfSAorI2RlZmluZSBJUklBUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJpYXBfZXZlbnQuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmlhc19vYmplY3QuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcnF1ZXVlLmg+CQkvKiBpcmRhX3F1ZXVlX3QgKi8KKyNpbmNsdWRlIDxuZXQvaXJkYS90aW1lci5oPgkJLyogc3RydWN0IHRpbWVyX2xpc3QgKi8KKworI2RlZmluZSBJQVBfTFNUIDB4ODAKKyNkZWZpbmUgSUFQX0FDSyAweDQwCisKKyNkZWZpbmUgSUFTX1NFUlZFUiAwCisjZGVmaW5lIElBU19DTElFTlQgMQorCisvKiBJcklBUCBPcC1jb2RlcyAqLworI2RlZmluZSBHRVRfSU5GT19CQVNFICAgICAgMHgwMQorI2RlZmluZSBHRVRfT0JKRUNUUyAgICAgICAgMHgwMgorI2RlZmluZSBHRVRfVkFMVUUgICAgICAgICAgMHgwMworI2RlZmluZSBHRVRfVkFMVUVfQllfQ0xBU1MgMHgwNAorI2RlZmluZSBHRVRfT0JKRUNUX0lORk8gICAgMHgwNQorI2RlZmluZSBHRVRfQVRUUklCX05BTUVTICAgMHgwNgorCisjZGVmaW5lIElBU19TVUNDRVNTICAgICAgICAwCisjZGVmaW5lIElBU19DTEFTU19VTktOT1dOICAxCisjZGVmaW5lIElBU19BVFRSSUJfVU5LTk9XTiAyCisjZGVmaW5lIElBU19ESVNDT05ORUNUICAgICAxMAorCit0eXBlZGVmIHZvaWQgKCpDT05GSVJNX0NBTExCQUNLKShpbnQgcmVzdWx0LCBfX3UxNiBvYmpfaWQsIAorCQkJCSBzdHJ1Y3QgaWFzX3ZhbHVlICp2YWx1ZSwgdm9pZCAqcHJpdik7CisKK3N0cnVjdCBpcmlhcF9jYiB7CisJaXJkYV9xdWV1ZV90IHE7IC8qIE11c3QgYmUgZmlyc3QgKi8JCisJbWFnaWNfdCBtYWdpYzsgIC8qIE1hZ2ljIGNvb2tpZSAqLworCisJaW50ICAgICAgICAgIG1vZGU7ICAgLyogQ2xpZW50IG9yIHNlcnZlciAqLworCisJX191MzIgICAgICAgIHNhZGRyOworCV9fdTMyICAgICAgICBkYWRkcjsKKwlfX3U4ICAgICAgICAgb3BlcmF0aW9uOworCisJc3RydWN0IHNrX2J1ZmYgKnJlcXVlc3Rfc2tiOworCXN0cnVjdCBsc2FwX2NiICpsc2FwOworCV9fdTggc2xzYXBfc2VsOworCisJLyogQ2xpZW50IHN0YXRlcyAqLworCUlSSUFQX1NUQVRFIGNsaWVudF9zdGF0ZTsKKwlJUklBUF9TVEFURSBjYWxsX3N0YXRlOworCQorCS8qIFNlcnZlciBzdGF0ZXMgKi8KKwlJUklBUF9TVEFURSBzZXJ2ZXJfc3RhdGU7CisJSVJJQVBfU1RBVEUgcl9jb25uZWN0X3N0YXRlOworCQorCUNPTkZJUk1fQ0FMTEJBQ0sgY29uZmlybTsKKwl2b2lkICpwcml2OyAgICAgICAgICAgICAgICAvKiBVc2VkIHRvIGlkZW50aWZ5IGNsaWVudCAqLworCisJX191OCBtYXhfaGVhZGVyX3NpemU7CisJX191MzIgbWF4X2RhdGFfc2l6ZTsKKwkKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKK307CisKK2ludCAgaXJpYXBfaW5pdCh2b2lkKTsKK3ZvaWQgaXJpYXBfY2xlYW51cCh2b2lkKTsKKworc3RydWN0IGlyaWFwX2NiICppcmlhcF9vcGVuKF9fdTggc2xzYXBfc2VsLCBpbnQgbW9kZSwgdm9pZCAqcHJpdiwgCisJCQkgICAgQ09ORklSTV9DQUxMQkFDSyBjYWxsYmFjayk7Cit2b2lkIGlyaWFwX2Nsb3NlKHN0cnVjdCBpcmlhcF9jYiAqc2VsZik7CisKK2ludCBpcmlhcF9nZXR2YWx1ZWJ5Y2xhc3NfcmVxdWVzdChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIAorCQkJCSAgX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLAorCQkJCSAgY2hhciAqbmFtZSwgY2hhciAqYXR0cik7Cit2b2lkIGlyaWFwX2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYpOwordm9pZCBpcmlhcF9zZW5kX2Fjayggc3RydWN0IGlyaWFwX2NiICpzZWxmKTsKK3ZvaWQgaXJpYXBfY2FsbF9pbmRpY2F0aW9uKHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3ZvaWQgaXJpYXBfcmVnaXN0ZXJfc2VydmVyKHZvaWQpOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyaWFwX2V2ZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lyaWFwX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhM2QyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJpYXBfZXZlbnQuaApAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlyaWFwX2V2ZW50LmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gQXVnICA0IDIwOjQwOjUzIDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFN1biBPY3QgMzEgMjI6MDI6NTQgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUklBUF9GU01fSAorI2RlZmluZSBJUklBUF9GU01fSAorCisvKiBGb3J3YXJkIGJlY2F1c2Ugb2YgY2lyY3VsYXIgaW5jbHVkZSBkZXBlbmRlY2llcyAqLworc3RydWN0IGlyaWFwX2NiOworCisvKiBJcklBUCBzdGF0ZXMgKi8KK3R5cGVkZWYgZW51bSB7CisJLyogQ2xpZW50ICovCisJU19ESVNDT05ORUNULAorCVNfQ09OTkVDVElORywKKwlTX0NBTEwsCisKKwkvKiBTLUNhbGwgKi8KKwlTX01BS0VfQ0FMTCwKKwlTX0NBTExJTkcsCisJU19PVVRTVEFORElORywKKwlTX1JFUExZSU5HLAorCVNfV0FJVF9GT1JfQ0FMTCwKKwlTX1dBSVRfQUNUSVZFLAorCisJLyogU2VydmVyICovCisJUl9ESVNDT05ORUNULAorCVJfQ0FMTCwKKwkKKwkvKiBSLUNvbm5lY3QgKi8KKwlSX1dBSVRJTkcsCisJUl9XQUlUX0FDVElWRSwKKwlSX1JFQ0VJVklORywKKwlSX0VYRUNVVEUsCisJUl9SRVRVUk5JTkcsCit9IElSSUFQX1NUQVRFOworCit0eXBlZGVmIGVudW0geworCUlBUF9DQUxMX1JFUVVFU1QsCisJSUFQX0NBTExfUkVRVUVTVF9HVkJDLAorCUlBUF9DQUxMX1JFU1BPTlNFLAorCUlBUF9SRUNWX0ZfTFNULAorCUlBUF9MTV9ESVNDT05ORUNUX0lORElDQVRJT04sCisJSUFQX0xNX0NPTk5FQ1RfSU5ESUNBVElPTiwKKwlJQVBfTE1fQ09OTkVDVF9DT05GSVJNLAorfSBJUklBUF9FVkVOVDsKKwordm9pZCBpcmlhcF9uZXh0X2NsaWVudF9zdGF0ZSAgIChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIElSSUFQX1NUQVRFIHN0YXRlKTsKK3ZvaWQgaXJpYXBfbmV4dF9jYWxsX3N0YXRlICAgICAoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9TVEFURSBzdGF0ZSk7Cit2b2lkIGlyaWFwX25leHRfc2VydmVyX3N0YXRlICAgKHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgSVJJQVBfU1RBVEUgc3RhdGUpOwordm9pZCBpcmlhcF9uZXh0X3JfY29ubmVjdF9zdGF0ZShzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIElSSUFQX1NUQVRFIHN0YXRlKTsKKworCit2b2lkIGlyaWFwX2RvX2NsaWVudF9ldmVudChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIElSSUFQX0VWRU5UIGV2ZW50LCAKKwkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmlhcF9kb19jYWxsX2V2ZW50ICAoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9FVkVOVCBldmVudCwgCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwordm9pZCBpcmlhcF9kb19zZXJ2ZXJfZXZlbnQgICAoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9FVkVOVCBldmVudCwgCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJpYXBfZG9fcl9jb25uZWN0X2V2ZW50KHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgSVJJQVBfRVZFTlQgZXZlbnQsIAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKyNlbmRpZiAvKiBJUklBUF9GU01fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyaWFzX29iamVjdC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmlhc19vYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDExOTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmlhc19vYmplY3QuaApAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmlhc19vYmplY3QuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICAKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFRodSBPY3QgIDEgMjI6NDk6NTAgMTk5OAorICogTW9kaWZpZWQgYXQ6ICAgV2VkIERlYyAxNSAxMToyMDo1NyAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIExNX0lBU19PQkpFQ1RfSAorI2RlZmluZSBMTV9JQVNfT0JKRUNUX0gKKworI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcnF1ZXVlLmg+CisKKy8qIExNLUlBUyBBdHRyaWJ1dGUgdHlwZXMgKi8KKyNkZWZpbmUgSUFTX01JU1NJTkcgMAorI2RlZmluZSBJQVNfSU5URUdFUiAxCisjZGVmaW5lIElBU19PQ1RfU0VRIDIKKyNkZWZpbmUgSUFTX1NUUklORyAgMworCisvKiBPYmplY3Qgb3duZXJzaGlwIG9mIGF0dHJpYnV0ZXMgKHVzZXIgb3Iga2VybmVsKSAqLworI2RlZmluZSBJQVNfS0VSTkVMX0FUVFIJMAorI2RlZmluZSBJQVNfVVNFUl9BVFRSCTEKKworLyoKKyAqICBMTS1JQVMgT2JqZWN0CisgKi8KK3N0cnVjdCBpYXNfb2JqZWN0IHsKKwlpcmRhX3F1ZXVlX3QgcTsgICAgIC8qIE11c3QgYmUgZmlyc3QhICovCisJbWFnaWNfdCBtYWdpYzsKKwkKKwljaGFyICAqbmFtZTsKKwlpbnQgICBpZDsKKwloYXNoYmluX3QgKmF0dHJpYnM7Cit9OworCisvKgorICogIFZhbHVlcyB1c2VkIGJ5IExNLUlBUyBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBpYXNfdmFsdWUgeworICAgICAgICBfX3U4ICAgIHR5cGU7ICAgIC8qIFZhbHVlIGRlc2NyaXB0aW9uICovCisJX191OAlvd25lcjsJLyogTWFuYWdlZCBmcm9tIHVzZXIva2VybmVsIHNwYWNlICovCisJaW50ICAgICBjaGFyc2V0OyAvKiBPbmx5IHVzZWQgYnkgc3RyaW5nIHR5cGUgKi8KKyAgICAgICAgaW50ICAgICBsZW47CisJCisJLyogVmFsdWUgKi8KKwl1bmlvbiB7CisJCWludCBpbnRlZ2VyOworCQljaGFyICpzdHJpbmc7CisJCV9fdTggKm9jdF9zZXE7CisJfSB0OworfTsKKworLyoKKyAqICBBdHRyaWJ1dGVzIHVzZWQgYnkgTE0tSUFTIG9iamVjdHMKKyAqLworc3RydWN0IGlhc19hdHRyaWIgeworCWlyZGFfcXVldWVfdCBxOyAvKiBNdXN0IGJlIGZpcnN0ISAqLworCWludCBtYWdpYzsKKworICAgICAgICBjaGFyICpuYW1lOyAgIAkgICAgICAgICAvKiBBdHRyaWJ1dGUgbmFtZSAqLworCXN0cnVjdCBpYXNfdmFsdWUgKnZhbHVlOyAvKiBBdHRyaWJ1dGUgdmFsdWUgKi8KK307CisKK3N0cnVjdCBpYXNfb2JqZWN0ICppcmlhc19uZXdfb2JqZWN0KGNoYXIgKm5hbWUsIGludCBpZCk7Cit2b2lkIGlyaWFzX2luc2VydF9vYmplY3Qoc3RydWN0IGlhc19vYmplY3QgKm9iaik7CitpbnQgIGlyaWFzX2RlbGV0ZV9vYmplY3Qoc3RydWN0IGlhc19vYmplY3QgKm9iaik7CitpbnQgIGlyaWFzX2RlbGV0ZV9hdHRyaWIoc3RydWN0IGlhc19vYmplY3QgKm9iaiwgc3RydWN0IGlhc19hdHRyaWIgKmF0dHJpYiwKKwkJCSBpbnQgY2xlYW5vYmplY3QpOwordm9pZCBfX2lyaWFzX2RlbGV0ZV9vYmplY3Qoc3RydWN0IGlhc19vYmplY3QgKm9iaik7CisKK3ZvaWQgaXJpYXNfYWRkX2ludGVnZXJfYXR0cmliKHN0cnVjdCBpYXNfb2JqZWN0ICpvYmosIGNoYXIgKm5hbWUsIGludCB2YWx1ZSwKKwkJCSAgICAgIGludCB1c2VyKTsKK3ZvaWQgaXJpYXNfYWRkX3N0cmluZ19hdHRyaWIoc3RydWN0IGlhc19vYmplY3QgKm9iaiwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUsCisJCQkgICAgIGludCB1c2VyKTsKK3ZvaWQgaXJpYXNfYWRkX29jdHNlcV9hdHRyaWIoc3RydWN0IGlhc19vYmplY3QgKm9iaiwgY2hhciAqbmFtZSwgX191OCAqb2N0ZXRzLAorCQkJICAgICBpbnQgbGVuLCBpbnQgdXNlcik7CitpbnQgaXJpYXNfb2JqZWN0X2NoYW5nZV9hdHRyaWJ1dGUoY2hhciAqb2JqX25hbWUsIGNoYXIgKmF0dHJpYl9uYW1lLCAKKwkJCQkgIHN0cnVjdCBpYXNfdmFsdWUgKm5ld192YWx1ZSk7CitzdHJ1Y3QgaWFzX29iamVjdCAqaXJpYXNfZmluZF9vYmplY3QoY2hhciAqbmFtZSk7CitzdHJ1Y3QgaWFzX2F0dHJpYiAqaXJpYXNfZmluZF9hdHRyaWIoc3RydWN0IGlhc19vYmplY3QgKm9iaiwgY2hhciAqbmFtZSk7CisKK3N0cnVjdCBpYXNfdmFsdWUgKmlyaWFzX25ld19zdHJpbmdfdmFsdWUoY2hhciAqc3RyaW5nKTsKK3N0cnVjdCBpYXNfdmFsdWUgKmlyaWFzX25ld19pbnRlZ2VyX3ZhbHVlKGludCBpbnRlZ2VyKTsKK3N0cnVjdCBpYXNfdmFsdWUgKmlyaWFzX25ld19vY3RzZXFfdmFsdWUoX191OCAqb2N0c2VxICwgaW50IGxlbik7CitzdHJ1Y3QgaWFzX3ZhbHVlICppcmlhc19uZXdfbWlzc2luZ192YWx1ZSh2b2lkKTsKK3ZvaWQgaXJpYXNfZGVsZXRlX3ZhbHVlKHN0cnVjdCBpYXNfdmFsdWUgKnZhbHVlKTsKKworZXh0ZXJuIHN0cnVjdCBpYXNfdmFsdWUgaXJpYXNfbWlzc2luZzsKK2V4dGVybiBoYXNoYmluX3QgKmlyaWFzX29iamVjdHM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9jbGllbnQuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2ZGFiZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY2xpZW50LmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxhbl9jbGllbnQuaAorICogVmVyc2lvbjogICAgICAgMC4zCisgKiBEZXNjcmlwdGlvbjogICBJckRBIExBTiBhY2Nlc3MgbGF5ZXIKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFN1biBBdWcgMzEgMjA6MTQ6MzcgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgVGh1IEFwciAyMiAxNDoxMzozNCAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTggRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkxBTl9DTElFTlRfSAorI2RlZmluZSBJUkxBTl9DTElFTlRfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgPG5ldC9pcmRhL2lyaWFzX29iamVjdC5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFuX2V2ZW50Lmg+CisKK3ZvaWQgaXJsYW5fY2xpZW50X2Rpc2NvdmVyeV9pbmRpY2F0aW9uKGRpc2NpbmZvX3QgKiwgRElTQ09WRVJZX01PREUsIHZvaWQgKik7Cit2b2lkIGlybGFuX2NsaWVudF93YWtldXAoc3RydWN0IGlybGFuX2NiICpzZWxmLCBfX3UzMiBzYWRkciwgX191MzIgZGFkZHIpOworCit2b2lkIGlybGFuX2NsaWVudF9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmxhbl9jbGllbnRfZ2V0X3ZhbHVlX2NvbmZpcm0oaW50IHJlc3VsdCwgX191MTYgb2JqX2lkLCAKKwkJCQkgICAgc3RydWN0IGlhc192YWx1ZSAqdmFsdWUsIHZvaWQgKnByaXYpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2NvbW1vbi5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzczYmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9jb21tb24uaApAQCAtMCwwICsxLDIyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxhbl9jb21tb24uaAorICogVmVyc2lvbjogICAgICAgMC44CisgKiBEZXNjcmlwdGlvbjogICBJckRBIExBTiBhY2Nlc3MgbGF5ZXIKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFN1biBBdWcgMzEgMjA6MTQ6MzcgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgU3VuIE9jdCAzMSAxOTo0MToyNCAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKKyAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTEFOX0gKKyNkZWZpbmUgSVJMQU5fSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+ICAvKiBmb3IgSFogKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcnR0cC5oPgorCisjZGVmaW5lIElSTEFOX01UVSAgICAgICAgMTUxOAorI2RlZmluZSBJUkxBTl9USU1FT1VUICAgIDEwKkhaIC8qIDEwIHNlY29uZHMgKi8KKworLyogQ29tbWFuZCBwYWNrZXQgdHlwZXMgKi8KKyNkZWZpbmUgQ01EX0dFVF9QUk9WSURFUl9JTkZPICAgMAorI2RlZmluZSBDTURfR0VUX01FRElBX0NIQVIgICAgICAxCisjZGVmaW5lIENNRF9PUEVOX0RBVEFfQ0hBTk5FTCAgIDIKKyNkZWZpbmUgQ01EX0NMT1NFX0RBVEFfQ0hBTiAgICAgMworI2RlZmluZSBDTURfUkVDT05ORUNUX0RBVEFfQ0hBTiA0CisjZGVmaW5lIENNRF9GSUxURVJfT1BFUkFUSU9OICAgIDUKKworLyogU29tZSByZXNwb25zZXMgKi8KKyNkZWZpbmUgUlNQX1NVQ0NFU1MgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUlNQX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMgIDEKKyNkZWZpbmUgUlNQX0lOVkFMSURfQ09NTUFORF9GT1JNQVQgIDIKKyNkZWZpbmUgUlNQX0NPTU1BTkRfTk9UX1NVUFBPUlRFRCAgIDMKKyNkZWZpbmUgUlNQX1BBUkFNX05PVF9TVVBQT1JURUQgICAgIDQKKyNkZWZpbmUgUlNQX1ZBTFVFX05PVF9TVVBQT1JURUQgICAgIDUKKyNkZWZpbmUgUlNQX05PVF9PUEVOICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUlNQX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEIDcKKyNkZWZpbmUgUlNQX0lOVkFMSURfUEFTU1dPUkQgICAgICAgIDgKKyNkZWZpbmUgUlNQX1BST1RPQ09MX0VSUk9SICAgICAgICAgIDkKKyNkZWZpbmUgUlNQX0FTWU5DSFJPTk9VU19FUlJPUiAgICAyNTUKKworLyogTWVkaWEgdHlwZXMgKi8KKyNkZWZpbmUgTUVESUFfODAyXzMgMQorI2RlZmluZSBNRURJQV84MDJfNSAyCisKKy8qIEZpbHRlciBwYXJhbWV0ZXJzICovCisjZGVmaW5lIERBVEFfQ0hBTiAgIDEKKyNkZWZpbmUgRklMVEVSX1RZUEUgMgorI2RlZmluZSBGSUxURVJfTU9ERSAzCisKKy8qIEZpbHRlciB0eXBlcyAqLworI2RlZmluZSBJUkxBTl9ESVJFQ1RFRCAgIDB4MDEKKyNkZWZpbmUgSVJMQU5fRlVOQ1RJT05BTCAweDAyCisjZGVmaW5lIElSTEFOX0dST1VQICAgICAgMHgwNAorI2RlZmluZSBJUkxBTl9NQUNfRlJBTUUgIDB4MDgKKyNkZWZpbmUgSVJMQU5fTVVMVElDQVNUICAweDEwCisjZGVmaW5lIElSTEFOX0JST0FEQ0FTVCAgMHgyMAorI2RlZmluZSBJUkxBTl9JUFhfU09DS0VUIDB4NDAKKworLyogRmlsdGVyIG1vZGVzICovCisjZGVmaW5lIEFMTCAgICAgMQorI2RlZmluZSBGSUxURVIgIDIKKyNkZWZpbmUgTk9ORSAgICAzCisKKy8qIEZpbHRlciBvcGVyYXRpb25zICovCisjZGVmaW5lIEdFVCAgICAgMQorI2RlZmluZSBDTEVBUiAgIDIKKyNkZWZpbmUgQUREICAgICAzCisjZGVmaW5lIFJFTU9WRSAgNAorI2RlZmluZSBEWU5BTUlDIDUKKworLyogQWNjZXNzIHR5cGVzICovCisjZGVmaW5lIEFDQ0VTU19ESVJFQ1QgIDEKKyNkZWZpbmUgQUNDRVNTX1BFRVIgICAgMgorI2RlZmluZSBBQ0NFU1NfSE9TVEVEICAzCisKKyNkZWZpbmUgSVJMQU5fQllURSAgIDAKKyNkZWZpbmUgSVJMQU5fU0hPUlQgIDEKKyNkZWZpbmUgSVJMQU5fQVJSQVkgIDIKKworI2RlZmluZSBJUkxBTl9NQVhfSEVBREVSIChUVFBfSEVBREVSK0xNUF9IRUFERVIrTEFQX01BWF9IRUFERVIpCisKKy8qCisgKiAgSXJMQU4gY2xpZW50CisgKi8KK3N0cnVjdCBpcmxhbl9jbGllbnRfY2IgeworCWludCBzdGF0ZTsKKworCWludCBvcGVuX3JldHJpZXM7CisKKwlzdHJ1Y3QgdHNhcF9jYiAqdHNhcF9jdHJsOworCV9fdTMyIG1heF9zZHVfc2l6ZTsKKwlfX3U4ICBtYXhfaGVhZGVyX3NpemU7CisJCisJaW50IGFjY2Vzc190eXBlOyAgICAgICAgIC8qIEFjY2VzcyB0eXBlIG9mIHByb3ZpZGVyICovCisJX191OCByZWNvbm5lY3Rfa2V5WzI1NV07CisJX191OCBrZXlfbGVuOworCQorCV9fdTE2IHJlY3ZfYXJiX3ZhbDsKKwlfX3UxNiBtYXhfZnJhbWU7CisJaW50IGZpbHRlcl90eXBlOworCisJaW50IHVuaWNhc3Rfb3BlbjsKKwlpbnQgYnJvYWRjYXN0X29wZW47CisKKwlpbnQgdHhfYnVzeTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cTsgLyogVHJhbnNtaXQgY29udHJvbCBxdWV1ZSAqLworCisJc3RydWN0IGlyaWFwX2NiICppcmlhcDsKKworCXN0cnVjdCB0aW1lcl9saXN0IGtpY2tfdGltZXI7Cit9OworCisvKgorICogSXJMQU4gcHJvdmlkZXIKKyAqLworc3RydWN0IGlybGFuX3Byb3ZpZGVyX2NiIHsKKwlpbnQgc3RhdGU7CisJCisJc3RydWN0IHRzYXBfY2IgKnRzYXBfY3RybDsKKwlfX3UzMiBtYXhfc2R1X3NpemU7CisJX191OCAgbWF4X2hlYWRlcl9zaXplOworCisJLyoKKwkgKiAgU3RvcmUgc29tZSB2YWx1ZXMgaGVyZSB3aGljaCBhcmUgdXNlZCBieSB0aGUgcHJvdmlkZXIgdG8gcGFyc2UKKwkgKiAgdGhlIGZpbHRlciBvcGVyYXRpb25zCisJICovCisJaW50IGRhdGFfY2hhbjsKKwlpbnQgZmlsdGVyX3R5cGU7CisJaW50IGZpbHRlcl9tb2RlOworCWludCBmaWx0ZXJfb3BlcmF0aW9uOworCWludCBmaWx0ZXJfZW50cnk7CisJaW50IGFjY2Vzc190eXBlOyAgICAgLyogQWNjZXNzIHR5cGUgKi8KKwlfX3UxNiBzZW5kX2FyYl92YWw7CisKKwlfX3U4IG1hY19hZGRyZXNzWzZdOyAvKiBHZW5lcmF0ZWQgTUFDIGFkZHJlc3MgZm9yIHBlZXIgZGV2aWNlICovCit9OworCisvKgorICogIElyTEFOIGNvbnRyb2wgYmxvY2sKKyAqLworc3RydWN0IGlybGFuX2NiIHsKKwlpbnQgICAgbWFnaWM7CisJc3RydWN0IGxpc3RfaGVhZCAgZGV2X2xpc3Q7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgICAgICAgIC8qIEV0aGVybmV0IGRldmljZSBzdHJ1Y3R1cmUqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCisJX191MzIgc2FkZHI7ICAgICAgICAgICAgICAgLyogU291cmNlIGRldmljZSBhZGRyZXNzICovCisJX191MzIgZGFkZHI7ICAgICAgICAgICAgICAgLyogRGVzdGluYXRpb24gZGV2aWNlIGFkZHJlc3MgKi8KKwlpbnQgZGlzY29ubmVjdF9yZWFzb247ICAgICAvKiBXaHkgd2UgZ290IGRpc2Nvbm5lY3RlZCAqLworCQorCWludCBtZWRpYTsgICAgICAgICAgICAgICAgIC8qIE1lZGlhIHR5cGUgKi8KKwlfX3U4IHZlcnNpb25bMl07ICAgICAgICAgICAvKiBJckxBTiB2ZXJzaW9uICovCisJCisJc3RydWN0IHRzYXBfY2IgKnRzYXBfZGF0YTsgLyogRGF0YSBUU0FQICovCisKKwlpbnQgIHVzZV91ZGF0YTsgICAgICAgICAgICAvKiBVc2UgVW5pdCBEYXRhIHRyYW5zZmVycyAqLworCisJX191OCBzdHNhcF9zZWxfZGF0YTsgICAgICAgLyogU291cmNlIGRhdGEgVFNBUCBzZWxlY3RvciAqLworCV9fdTggZHRzYXBfc2VsX2RhdGE7ICAgICAgIC8qIERlc3RpbmF0aW9uIGRhdGEgVFNBUCBzZWxlY3RvciAqLworCV9fdTggZHRzYXBfc2VsX2N0cmw7ICAgICAgIC8qIERlc3RpbmF0aW9uIGN0cmwgVFNBUCBzZWxlY3RvciAqLworCisJc3RydWN0IGlybGFuX2NsaWVudF9jYiAgIGNsaWVudDsgICAvKiBDbGllbnQgc3BlY2lmaWMgZmllbGRzICovCisJc3RydWN0IGlybGFuX3Byb3ZpZGVyX2NiIHByb3ZpZGVyOyAvKiBQcm92aWRlciBzcGVjaWZpYyBmaWVsZHMgKi8KKworCV9fdTMyIG1heF9zZHVfc2l6ZTsKKwlfX3U4ICBtYXhfaGVhZGVyX3NpemU7CisJCisJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OworCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOworfTsKKwordm9pZCBpcmxhbl9jbG9zZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwordm9pZCBpcmxhbl9jbG9zZV90c2FwcyhzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOworCitpbnQgIGlybGFuX3JlZ2lzdGVyX25ldGRldihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwordm9pZCBpcmxhbl9pYXNfcmVnaXN0ZXIoc3RydWN0IGlybGFuX2NiICpzZWxmLCBfX3U4IHRzYXBfc2VsKTsKK3ZvaWQgaXJsYW5fc3RhcnRfd2F0Y2hkb2dfdGltZXIoc3RydWN0IGlybGFuX2NiICpzZWxmLCBpbnQgdGltZW91dCk7CisKK3ZvaWQgaXJsYW5fb3Blbl9kYXRhX3RzYXAoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKKworaW50IGlybGFuX3J1bl9jdHJsX3R4X3F1ZXVlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7CisKK3N0cnVjdCBpcmxhbl9jYiAqaXJsYW5fZ2V0X2FueSh2b2lkKTsKK3ZvaWQgaXJsYW5fZ2V0X3Byb3ZpZGVyX2luZm8oc3RydWN0IGlybGFuX2NiICpzZWxmKTsKK3ZvaWQgaXJsYW5fZ2V0X21lZGlhX2NoYXIoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKK3ZvaWQgaXJsYW5fb3Blbl9kYXRhX2NoYW5uZWwoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKK3ZvaWQgaXJsYW5fY2xvc2VfZGF0YV9jaGFubmVsKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7Cit2b2lkIGlybGFuX3NldF9tdWx0aWNhc3RfZmlsdGVyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IHN0YXR1cyk7Cit2b2lkIGlybGFuX3NldF9icm9hZGNhc3RfZmlsdGVyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IHN0YXR1cyk7CisKK2ludCBpcmxhbl9pbnNlcnRfYnl0ZV9wYXJhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpwYXJhbSwgX191OCB2YWx1ZSk7CitpbnQgaXJsYW5faW5zZXJ0X3Nob3J0X3BhcmFtKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKnBhcmFtLCBfX3UxNiB2YWx1ZSk7CitpbnQgaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpwYXJhbSwgY2hhciAqdmFsdWUpOworaW50IGlybGFuX2luc2VydF9hcnJheV9wYXJhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpuYW1lLCBfX3U4ICp2YWx1ZSwgCisJCQkgICAgIF9fdTE2IHZhbHVlX2xlbik7CisKK2ludCBpcmxhbl9leHRyYWN0X3BhcmFtKF9fdTggKmJ1ZiwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUsIF9fdTE2ICpsZW4pOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2V0aC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTliMzYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldGguaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlybGFuX2V0aC5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIAorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgVGh1IE9jdCAxNSAwODozNjo1OCAxOTk4CisgKiBNb2RpZmllZCBhdDogICBGcmkgTWF5IDE0IDIzOjI5OjAwIDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIAorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJMQU5fRVRIX0gKKyNkZWZpbmUgSVJMQU5fRVRIX0gKKworc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2lybGFuZGV2KGNvbnN0IGNoYXIgKm5hbWUpOworaW50ICBpcmxhbl9ldGhfcmVjZWl2ZSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwordm9pZCBpcmxhbl9ldGhfZmxvd19pbmRpY2F0aW9uKCB2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCBMT0NBTF9GTE9XIGZsb3cpOwordm9pZCBpcmxhbl9ldGhfc2VuZF9ncmF0dWl0b3VzX2FycChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldmVudC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmFhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2V2ZW50LmgKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxhbl9ldmVudC5oCisgKiBWZXJzaW9uOiAgICAgICAKKyAqIERlc2NyaXB0aW9uOiAgIExBTiBhY2Nlc3MKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFN1biBBdWcgMzEgMjA6MTQ6MzcgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgVHVlIEZlYiAgMiAwOTo0NToxNyAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTcgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkxBTl9FVkVOVF9ICisjZGVmaW5lIElSTEFOX0VWRU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fY29tbW9uLmg+CisKK3R5cGVkZWYgZW51bSB7CisJSVJMQU5fSURMRSwKKwlJUkxBTl9RVUVSWSwKKwlJUkxBTl9DT05OLCAKKwlJUkxBTl9JTkZPLAorCUlSTEFOX01FRElBLAorCUlSTEFOX09QRU4sCisJSVJMQU5fV0FJVCwKKwlJUkxBTl9BUkIsIAorCUlSTEFOX0RBVEEsCisJSVJMQU5fQ0xPU0UsCisJSVJMQU5fU1lOQworfSBJUkxBTl9TVEFURTsKKwordHlwZWRlZiBlbnVtIHsKKwlJUkxBTl9ESVNDT1ZFUllfSU5ESUNBVElPTiwKKwlJUkxBTl9JQVNfUFJPVklERVJfQVZBSUwsCisJSVJMQU5fSUFTX1BST1ZJREVSX05PVF9BVkFJTCwKKwlJUkxBTl9MQVBfRElTQ09OTkVDVCwKKwlJUkxBTl9MTVBfRElTQ09OTkVDVCwKKwlJUkxBTl9DT05ORUNUX0NPTVBMRVRFLAorCUlSTEFOX0RBVEFfSU5ESUNBVElPTiwKKwlJUkxBTl9EQVRBX0NPTk5FQ1RfSU5ESUNBVElPTiwKKwlJUkxBTl9SRVRSWV9DT05ORUNULAorCisJSVJMQU5fQ09OTkVDVF9JTkRJQ0FUSU9OLAorCUlSTEFOX0dFVF9JTkZPX0NNRCwKKwlJUkxBTl9HRVRfTUVESUFfQ01ELAorCUlSTEFOX09QRU5fREFUQV9DTUQsCisJSVJMQU5fRklMVEVSX0NPTkZJR19DTUQsCisKKwlJUkxBTl9DSEVDS19DT05fQVJCLAorCUlSTEFOX1BST1ZJREVSX1NJR05BTCwKKworCUlSTEFOX1dBVENIRE9HX1RJTUVPVVQsCit9IElSTEFOX0VWRU5UOworCitleHRlcm4gY2hhciAqaXJsYW5fc3RhdGVbXTsKKwordm9pZCBpcmxhbl9kb19jbGllbnRfZXZlbnQoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwgCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwordm9pZCBpcmxhbl9kb19wcm92aWRlcl9ldmVudChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LCAKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3ZvaWQgaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9TVEFURSBzdGF0ZSk7Cit2b2lkIGlybGFuX25leHRfcHJvdmlkZXJfc3RhdGUoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9TVEFURSBzdGF0ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9maWx0ZXIuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmZWI2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZmlsdGVyLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxhbl9maWx0ZXIuaAorICogVmVyc2lvbjogICAgICAgCisgKiBEZXNjcmlwdGlvbjogICAKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIEZyaSBKYW4gMjkgMTU6MjQ6MDggMTk5OQorICogTW9kaWZpZWQgYXQ6ICAgU3VuIEZlYiAgNyAyMzozNTozMSAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTggRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqICAgICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkxBTl9GSUxURVJfSAorI2RlZmluZSBJUkxBTl9GSUxURVJfSAorCit2b2lkIGlybGFuX2NoZWNrX2NvbW1hbmRfcGFyYW0oc3RydWN0IGlybGFuX2NiICpzZWxmLCBjaGFyICpwYXJhbSwgCisJCQkgICAgICAgY2hhciAqdmFsdWUpOwordm9pZCBpcmxhbl9maWx0ZXJfcmVxdWVzdChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGlybGFuX3ByaW50X2ZpbHRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgaW50IGZpbHRlcl90eXBlKTsKKworI2VuZGlmIC8qIElSTEFOX0ZJTFRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFuX3Byb3ZpZGVyLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX3Byb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1MWQ1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fcHJvdmlkZXIuaApAQCAtMCwwICsxLDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlybGFuX3Byb3ZpZGVyLmgKKyAqIFZlcnNpb246ICAgICAgIDAuMQorICogRGVzY3JpcHRpb246ICAgSXJEQSBMQU4gYWNjZXNzIGxheWVyCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTdW4gQXVnIDMxIDIwOjE0OjM3IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFN1biBNYXkgIDkgMTI6MjY6MTEgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBJUkxBTl9TRVJWRVJfSAorI2RlZmluZSBJUkxBTl9TRVJWRVJfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFuX2NvbW1vbi5oPgorCit2b2lkIGlybGFuX3Byb3ZpZGVyX2N0cmxfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorCQkJCQkgICAgICAgTE1fUkVBU09OIHJlYXNvbiwgCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCit2b2lkIGlybGFuX3Byb3ZpZGVyX2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IGlybGFuX2NiICosIHN0cnVjdCB0c2FwX2NiICopOworCitpbnQgaXJsYW5fcGFyc2Vfb3Blbl9kYXRhX2NtZChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGlybGFuX3Byb3ZpZGVyX3BhcnNlX2NvbW1hbmQoc3RydWN0IGlybGFuX2NiICpzZWxmLCBpbnQgY21kLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwordm9pZCBpcmxhbl9wcm92aWRlcl9zZW5kX3JlcGx5KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IGNvbW1hbmQsIAorCQkJICAgICAgIGludCByZXRfY29kZSk7CitpbnQgaXJsYW5fcHJvdmlkZXJfb3Blbl9jdHJsX3RzYXAoc3RydWN0IGlybGFuX2NiICpzZWxmKTsKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NWU4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmgKQEAgLTAsMCArMSwyOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJsYXAuaAorICogVmVyc2lvbjogICAgICAgMC44CisgKiBEZXNjcmlwdGlvbjogICBBbiBJckRBIExBUCBkcml2ZXIgZm9yIExpbnV4CisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gQXVnICA0IDIwOjQwOjUzIDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIEZyaSBEZWMgMTAgMTM6MjE6MTcgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJMQVBfSAorI2RlZmluZSBJUkxBUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcnF1ZXVlLmg+CQkvKiBpcmRhX3F1ZXVlX3QgKi8KKyNpbmNsdWRlIDxuZXQvaXJkYS9xb3MuaD4JCS8qIHN0cnVjdCBxb3NfaW5mbyAqLworI2luY2x1ZGUgPG5ldC9pcmRhL2Rpc2NvdmVyeS5oPgkJLyogZGlzY292ZXJ5X3QgKi8KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhcF9ldmVudC5oPgkvKiBJUkxBUF9TVEFURSwgLi4uICovCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJtb2QuaD4JCS8qIHN0cnVjdCBub3RpZnlfdCAqLworCisjZGVmaW5lIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XIDEKKworI2RlZmluZSBMQVBfUkVMSUFCTEUgICAxCisjZGVmaW5lIExBUF9VTlJFTElBQkxFIDAKKworI2RlZmluZSBMQVBfQUREUl9IRUFERVIgMSAgLyogSXJMQVAgQWRkcmVzcyBIZWFkZXIgKi8KKyNkZWZpbmUgTEFQX0NUUkxfSEVBREVSIDEgIC8qIElyTEFQIENvbnRyb2wgSGVhZGVyICovCisKKy8qIE1heSBiZSBkaWZmZXJlbnQgd2hlbiB3ZSBnZXQgVkZJUiAqLworI2RlZmluZSBMQVBfTUFYX0hFQURFUiAoTEFQX0FERFJfSEVBREVSICsgTEFQX0NUUkxfSEVBREVSKQorCisjZGVmaW5lIEJST0FEQ0FTVCAgMHhmZmZmZmZmZiAvKiBCcm9hZGNhc3QgZGV2aWNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0JST0FEQ0FTVCAweGZlICAgICAgIC8qIENvbm5lY3Rpb24gYnJvYWRjYXN0IGFkZHJlc3MgKi8KKyNkZWZpbmUgWElEX0ZPUk1BVCAweDAxICAgICAgIC8qIERpc2NvdmVyeSBYSUQgZm9ybWF0ICovCisKKy8qIE5vYm9keSBzZWVtcyB0byB1c2UgdGhpcyBjb25zdGFudC4gKi8KKyNkZWZpbmUgTEFQX1dJTkRPV19TSVpFIDgKKy8qIFdlIGtlZXAgdGhlIExBUCBxdWV1ZSB2ZXJ5IHNtYWxsIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgYnVmZmVyaW5nLgorICogdGhpcyBpbXByb3ZlIGxhdGVuY3kgYW5kIHJlZHVjZSByZXNvdXJjZSBjb25zdW1wdGlvbi4KKyAqIFRoaXMgd29yayBvbmx5IGJlY2F1c2Ugd2UgaGF2ZSBzeW5jaHJvbm91cyByZWZpbGxpbmcgb2YgSXJMQVAgdGhyb3VnaAorICogdGhlIGZsb3cgY29udHJvbCBtZWNoYW5pc20gKHZpYSBzY2hlZHVsZXIgYW5kIElyVFRQKS4KKyAqIDIgYnVmZmVycyBpcyB0aGUgbWluaW11bSB3ZSBjYW4gd29yayB3aXRoLCBvbmUgdGhhdCB3ZSBzZW5kIHdoaWxlIHBvbGxpbmcKKyAqIElyVFRQLCBhbmQgYW5vdGhlciB0byBrbm93IHRoYXQgd2Ugc2hvdWxkIG5vdCBzZW5kIHRoZSBwZiBiaXQuCisgKiBKZWFuIElJICovCisjZGVmaW5lIExBUF9ISUdIX1RIUkVTSE9MRCAgICAgMgorLyogU29tZSByYXJlIG5vbiBUVFAgY2xpZW50cyBkb24ndCBpbXBsZW1lbnQgZmxvdyBjb250cm9sLCBhbmQKKyAqIHNvIGRvbid0IGNvbXBseSB3aXRoIHRoZSBhYm92ZSBsaW1pdCAoYW5kIG5laXRoZXIgd2l0aCB0aGlzIG9uZSkuCisgKiBGb3IgSUFQIGFuZCBtYW5hZ2VtZW50LCBpdCBkb2Vzbid0IG1hdHRlciwgYmVjYXVzZSB0aGV5IG5ldmVyIHRyYW5zbWl0IG11Y2guCisgKi5Gb3IgSXJMUFQsIHRoaXMgc2hvdWxkIGJlIGZpeGVkLgorICogLSBKZWFuIElJICovCisjZGVmaW5lIExBUF9NQVhfUVVFVUUgMTAKKy8qIFBsZWFzZSBub3RlIHRoYXQgYWxsIElyREEgbWFuYWdlbWVudCBmcmFtZXMgKExNUC9UVFAgY29ubiByZXEvZGlzYyBhbmQKKyAqIElBUyBxdWVyaWVzKSBmYWxsIGluIHRoZSBzZWNvbmQgY2F0ZWdvcnkgYW5kIGFyZSBzZW50IHRvIExBUCBldmVuIGlmIFRUUAorICogaXMgc3RvcHBlZC4gVGhpcyBtZWFucyB0aGF0IHRob3NlIGZyYW1lcyB3aWxsIHdhaXQgb25seSBhIG1heGltdW0gb2YKKyAqIHR3byAoMikgZGF0YSBmcmFtZXMgYmVmb3JlIGJlZWluZyBzZW50IG9uIHRoZSAid2lyZSIsIHdoaWNoIHNwZWVkIHVwCisgKiBuZXcgc29ja2V0IHNldHVwIHdoZW4gdGhlIGxpbmsgaXMgc2F0dXJhdGVkLgorICogU2FtZSBzdG9yeSBmb3IgdHdvIHNvY2tldHMgY29tcGV0aW5nIGZvciB0aGUgbWVkaXVtIDogaWYgb25lIHNhdHVyYXRlcworICogdGhlIExBUCwgd2hlbiB0aGUgb3RoZXIgd2FudCB0byB0cmFuc21pdCBpdCBvbmx5IGhhcyB0byB3YWl0IGZvcgorICogbWF4aW11bSB0aHJlZSAoMykgcGFja2V0cyAoMiArIG9uZSBzY2hlZHVsaW5nKSwgd2hpY2ggaW1wcm92ZSBwZXJmb3JtYW5jZQorICogb2YgZGVsYXkgc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucy4KKyAqIEplYW4gSUkgKi8KKworI2RlZmluZSBOUl9FWFBFQ1RFRCAgICAgMQorI2RlZmluZSBOUl9VTkVYUEVDVEVEICAgMAorI2RlZmluZSBOUl9JTlZBTElEICAgICAtMQorCisjZGVmaW5lIE5TX0VYUEVDVEVEICAgICAxCisjZGVmaW5lIE5TX1VORVhQRUNURUQgICAwCisjZGVmaW5lIE5TX0lOVkFMSUQgICAgIC0xCisKKy8qCisgKiAgTWV0YSBpbmZvcm1hdGlvbiBwYXNzZWQgd2l0aGluIHRoZSBJckxBUCBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0cnVjdCBpcmxhcF9pbmZvIHsKKwlfX3U4IGNhZGRyOyAgIC8qIENvbm5lY3Rpb24gYWRkcmVzcyAqLworCV9fdTggY29udHJvbDsgLyogRnJhbWUgdHlwZSAqLworICAgICAgICBfX3U4IGNtZDsKKworCV9fdTMyIHNhZGRyOworCV9fdTMyIGRhZGRyOworCQorCWludCBwZjsgICAgICAgIC8qIFBvbGwvZmluYWwgYml0IHNldCAqLworCisJX191OCAgbnI7ICAgICAgLyogU2VxdWVuY2UgbnVtYmVyIG9mIG5leHQgZnJhbWUgZXhwZWN0ZWQgKi8KKwlfX3U4ICBuczsgICAgICAvKiBTZXF1ZW5jZSBudW1iZXIgb2YgZnJhbWUgc2VudCAqLworCisJaW50ICBTOyAgICAgICAgLyogTnVtYmVyIG9mIHNsb3RzICovCisJaW50ICBzbG90OyAgICAgLyogUmFuZG9tIGNob3NlbiBzbG90ICovCisJaW50ICBzOyAgICAgICAgLyogQ3VycmVudCBzbG90ICovCisKKwlkaXNjb3ZlcnlfdCAqZGlzY292ZXJ5OyAvKiBEaXNjb3ZlcnkgaW5mb3JtYXRpb24gKi8KK307CisKKy8qIE1haW4gc3RydWN0dXJlIG9mIElyTEFQICovCitzdHJ1Y3QgaXJsYXBfY2IgeworCWlyZGFfcXVldWVfdCBxOyAgICAgLyogTXVzdCBiZSBmaXJzdCAqLworCW1hZ2ljX3QgbWFnaWM7CisKKwkvKiBEZXZpY2Ugd2UgYXJlIGF0dGFjaGVkIHRvICovCisJc3RydWN0IG5ldF9kZXZpY2UgICpuZXRkZXY7CisJY2hhcgkJaHdfbmFtZVsyKklGTkFNU0laICsgMV07CisKKwkvKiBDb25uZWN0aW9uIHN0YXRlICovCisJdm9sYXRpbGUgSVJMQVBfU1RBVEUgc3RhdGU7ICAgICAgIC8qIEN1cnJlbnQgc3RhdGUgKi8KKworCS8qIFRpbWVycyB1c2VkIGJ5IElyTEFQICovCisJc3RydWN0IHRpbWVyX2xpc3QgcXVlcnlfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3Qgc2xvdF90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBkaXNjb3ZlcnlfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgZmluYWxfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3ZF90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBiYWNrb2ZmX3RpbWVyOworCisJLyogTWVkaWEgYnVzeSBzdHVmZiAqLworCXN0cnVjdCB0aW1lcl9saXN0IG1lZGlhX2J1c3lfdGltZXI7CisJaW50IG1lZGlhX2J1c3k7CisKKwkvKiBUaW1lb3V0cyB3aGljaCB3aWxsIGJlIGRpZmZlcmVudCB3aXRoIGRpZmZlcmVudCB0dXJuIHRpbWUgKi8KKwlpbnQgc2xvdF90aW1lb3V0OworCWludCBwb2xsX3RpbWVvdXQ7CisJaW50IGZpbmFsX3RpbWVvdXQ7CisJaW50IHdkX3RpbWVvdXQ7CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cTsgIC8qIEZyYW1lcyB0byBiZSB0cmFuc21pdHRlZCAqLworCXN0cnVjdCBza19idWZmX2hlYWQgdHhxX3VsdHJhOworCisgCV9fdTggICAgY2FkZHI7ICAgICAgICAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KKwlfX3UzMiAgIHNhZGRyOyAgICAgICAgLyogU291cmNlIGRldmljZSBhZGRyZXNzICovCisJX191MzIgICBkYWRkcjsgICAgICAgIC8qIERlc3RpbmF0aW9uIGRldmljZSBhZGRyZXNzICovCisKKwlpbnQgICAgIHJldHJ5X2NvdW50OyAgLyogVGltZXMgdHJpZWQgdG8gZXN0YWJsaXNoIGNvbm5lY3Rpb24gKi8KKwlpbnQgICAgIGFkZF93YWl0OyAgICAgLyogVHJ1ZSBpZiB3ZSBhcmUgd2FpdGluZyBmb3IgZnJhbWUgKi8KKworCV9fdTggICAgY29ubmVjdF9wZW5kaW5nOworCV9fdTggICAgZGlzY29ubmVjdF9wZW5kaW5nOworCisJLyogIFRvIHNlbmQgYSBmYXN0ZXIgUlIgaWYgdHggcXVldWUgZW1wdHkgKi8KKyNpZmRlZiBDT05GSUdfSVJEQV9GQVNUX1JSCisJaW50ICAgICBmYXN0X1JSX3RpbWVvdXQ7CisJaW50ICAgICBmYXN0X1JSOyAgICAgIAorI2VuZGlmIC8qIENPTkZJR19JUkRBX0ZBU1RfUlIgKi8KKwkKKwlpbnQgTjE7IC8qIE4xICogRi10aW1lciA9IE5lZ2l0aWF0ZWQgbGluayBkaXNjb25uZWN0IHdhcm5pbmcgdGhyZXNob2xkICovCisJaW50IE4yOyAvKiBOMiAqIEYtdGltZXIgPSBOZWdpdGlhdGVkIGxpbmsgZGlzY29ubmVjdCB0aW1lICovCisJaW50IE4zOyAvKiBDb25uZWN0aW9uIHJldHJ5IGNvdW50ICovCisKKwlpbnQgICAgIGxvY2FsX2J1c3k7CisJaW50ICAgICByZW1vdGVfYnVzeTsKKwlpbnQgICAgIHhtaXRmbGFnOworCisJX191OCAgICB2czsgICAgICAgICAgICAvKiBOZXh0IGZyYW1lIHRvIGJlIHNlbnQgKi8KKwlfX3U4ICAgIHZyOyAgICAgICAgICAgIC8qIE5leHQgZnJhbWUgdG8gYmUgcmVjZWl2ZWQgKi8KKwlfX3U4ICAgIHZhOyAgICAgICAgICAgIC8qIExhc3QgZnJhbWUgYWNrZWQgKi8KKyAJaW50ICAgICB3aW5kb3c7ICAgICAgICAvKiBOciBvZiBJLWZyYW1lcyBhbGxvd2VkIHRvIHNlbmQgKi8KKwlpbnQgICAgIHdpbmRvd19zaXplOyAgIC8qIEN1cnJlbnQgbmVnb3RpYXRlZCB3aW5kb3cgc2l6ZSAqLworCisjaWZkZWYgQ09ORklHX0lSREFfRFlOQU1JQ19XSU5ET1cKKwlfX3UzMiAgIGxpbmVfY2FwYWNpdHk7IC8qIE51bWJlciBvZiBieXRlcyBhbGxvd2VkIHRvIHNlbmQgKi8KKwlfX3UzMiAgIGJ5dGVzX2xlZnQ7ICAgIC8qIE51bWJlciBvZiBieXRlcyBzdGlsbCBhbGxvd2VkIHRvIHRyYW5zbWl0ICovCisjZW5kaWYgLyogQ09ORklHX0lSREFfRFlOQU1JQ19XSU5ET1cgKi8KKworCXN0cnVjdCBza19idWZmX2hlYWQgd3hfbGlzdDsKKworCV9fdTggICAgYWNrX3JlcXVpcmVkOworCQorCS8qIFhJRCBwYXJhbWV0ZXJzICovCisgCV9fdTggICAgUzsgICAgICAgICAgIC8qIE51bWJlciBvZiBzbG90cyAqLworCV9fdTggICAgc2xvdDsgICAgICAgIC8qIFJhbmRvbSBjaG9zZW4gc2xvdCAqLworIAlfX3U4ICAgIHM7ICAgICAgICAgICAvKiBDdXJyZW50IHNsb3QgKi8KKwlpbnQgICAgIGZyYW1lX3NlbnQ7ICAvKiBIYXZlIHdlIHNlbnQgcmVwbHk/ICovCisKKwloYXNoYmluX3QgICAqZGlzY292ZXJ5X2xvZzsKKyAJZGlzY292ZXJ5X3QgKmRpc2NvdmVyeV9jbWQ7CisKKwlfX3UzMiBzcGVlZDsJCS8qIExpbmsgc3BlZWQgKi8KKworCXN0cnVjdCBxb3NfaW5mbyAgcW9zX3R4OyAgIC8qIFFvUyByZXF1ZXN0ZWQgYnkgcGVlciAqLworCXN0cnVjdCBxb3NfaW5mbyAgcW9zX3J4OyAgIC8qIFFvUyByZXF1ZXN0ZWQgYnkgc2VsZiAqLworCXN0cnVjdCBxb3NfaW5mbyAqcW9zX2RldjsgIC8qIFFvUyBzdXBwb3J0ZWQgYnkgZGV2aWNlICovCisKKwlub3RpZnlfdCBub3RpZnk7IC8qIENhbGxiYWNrcyB0byBJckxNUCAqLworCisJaW50ICAgIG10dF9yZXF1aXJlZDsgIC8qIE1pbnVtdW0gdHVybmFyb3VuZCB0aW1lIHJlcXVpcmVkICovCisJaW50ICAgIHhib2ZzX2RlbGF5OyAgIC8qIE5yIG9mIFhCT0YncyB1c2VkIHRvIE1UVCAqLworCWludCAgICBib2ZzX2NvdW50OyAgICAvKiBOZWdvdGlhdGVkIGV4dHJhIEJPRnMgKi8KKwlpbnQgICAgbmV4dF9ib2ZzOyAgICAgLyogTmVnb3RpYXRlZCBleHRyYSBCT0ZzIGFmdGVyIG5leHQgZnJhbWUgKi8KK307CisKKy8qIAorICogIEZ1bmN0aW9uIHByb3RvdHlwZXMgCisgKi8KK2ludCBpcmxhcF9pbml0KHZvaWQpOwordm9pZCBpcmxhcF9jbGVhbnVwKHZvaWQpOworCitzdHJ1Y3QgaXJsYXBfY2IgKmlybGFwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHFvc19pbmZvICpxb3MsCisJCQkgICAgY29uc3QgY2hhciAqaHdfbmFtZSk7Cit2b2lkIGlybGFwX2Nsb3NlKHN0cnVjdCBpcmxhcF9jYiAqc2VsZik7CisKK3ZvaWQgaXJsYXBfY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgX191MzIgZGFkZHIsIAorCQkJICAgc3RydWN0IHFvc19pbmZvICpxb3MsIGludCBzbmlmZik7Cit2b2lkIGlybGFwX2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IGlybGFwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJsYXBfY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlybGFwX2Nvbm5lY3RfY29uZmlybShzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3ZvaWQgaXJsYXBfZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQgdW5yZWxpYWJsZSk7Cit2b2lkIGlybGFwX2RhdGFfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50IHVucmVsaWFibGUpOworCisjaWZkZWYgQ09ORklHX0lSREFfVUxUUkEKK3ZvaWQgaXJsYXBfdW5pdGRhdGFfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7Cit2b2lkIGlybGFwX3VuaXRkYXRhX2luZGljYXRpb24oc3RydWN0IGlybGFwX2NiICosIHN0cnVjdCBza19idWZmICopOworI2VuZGlmIC8qIENPTkZJR19JUkRBX1VMVFJBICovCisKK3ZvaWQgaXJsYXBfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmxhcF9jYiAqKTsKK3ZvaWQgaXJsYXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqLCBMQVBfUkVBU09OIHJlYXNvbik7CisKK3ZvaWQgaXJsYXBfc3RhdHVzX2luZGljYXRpb24oc3RydWN0IGlybGFwX2NiICosIGludCBxdWFsaXR5X29mX2xpbmspOworCit2b2lkIGlybGFwX3Rlc3RfcmVxdWVzdChfX3U4ICppbmZvLCBpbnQgbGVuKTsKKwordm9pZCBpcmxhcF9kaXNjb3ZlcnlfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKiwgZGlzY292ZXJ5X3QgKmRpc2NvdmVyeSk7Cit2b2lkIGlybGFwX2Rpc2NvdmVyeV9jb25maXJtKHN0cnVjdCBpcmxhcF9jYiAqLCBoYXNoYmluX3QgKmRpc2NvdmVyeV9sb2cpOwordm9pZCBpcmxhcF9kaXNjb3ZlcnlfaW5kaWNhdGlvbihzdHJ1Y3QgaXJsYXBfY2IgKiwgZGlzY292ZXJ5X3QgKmRpc2NvdmVyeSk7CisKK3ZvaWQgaXJsYXBfcmVzZXRfaW5kaWNhdGlvbihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpOwordm9pZCBpcmxhcF9yZXNldF9jb25maXJtKHZvaWQpOworCit2b2lkIGlybGFwX3VwZGF0ZV9ucl9yZWNlaXZlZChzdHJ1Y3QgaXJsYXBfY2IgKiwgaW50IG5yKTsKK2ludCBpcmxhcF92YWxpZGF0ZV9ucl9yZWNlaXZlZChzdHJ1Y3QgaXJsYXBfY2IgKiwgaW50IG5yKTsKK2ludCBpcmxhcF92YWxpZGF0ZV9uc19yZWNlaXZlZChzdHJ1Y3QgaXJsYXBfY2IgKiwgaW50IG5zKTsKKworaW50ICBpcmxhcF9nZW5lcmF0ZV9yYW5kX3RpbWVfc2xvdChpbnQgUywgaW50IHMpOwordm9pZCBpcmxhcF9pbml0aWF0ZV9jb25uZWN0aW9uX3N0YXRlKHN0cnVjdCBpcmxhcF9jYiAqKTsKK3ZvaWQgaXJsYXBfZmx1c2hfYWxsX3F1ZXVlcyhzdHJ1Y3QgaXJsYXBfY2IgKik7Cit2b2lkIGlybGFwX3dhaXRfbWluX3R1cm5fYXJvdW5kKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3QgcW9zX2luZm8gKik7CisKK3ZvaWQgaXJsYXBfYXBwbHlfZGVmYXVsdF9jb25uZWN0aW9uX3BhcmFtZXRlcnMoc3RydWN0IGlybGFwX2NiICpzZWxmKTsKK3ZvaWQgaXJsYXBfYXBwbHlfY29ubmVjdGlvbl9wYXJhbWV0ZXJzKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IG5vdyk7CisKKyNkZWZpbmUgSVJMQVBfR0VUX0hFQURFUl9TSVpFKHNlbGYpIChMQVBfTUFYX0hFQURFUikKKyNkZWZpbmUgSVJMQVBfR0VUX1RYX1FVRVVFX0xFTihzZWxmKSBza2JfcXVldWVfbGVuKCZzZWxmLT50eHEpCisKKy8qIFJldHVybiBUUlVFIGlmIHRoZSBub2RlIGlzIGluIHByaW1hcnkgbW9kZSAoaS5lLiBtYXN0ZXIpCisgKiAtIEplYW4gSUkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlybGFwX2lzX3ByaW1hcnkoc3RydWN0IGlybGFwX2NiICpzZWxmKQoreworCWludCByZXQ7CisJc3dpdGNoKHNlbGYtPnN0YXRlKSB7CisJY2FzZSBMQVBfWE1JVF9QOgorCWNhc2UgTEFQX05STV9QOgorCQlyZXQgPSAxOworCQlicmVhazsKKwljYXNlIExBUF9YTUlUX1M6CisJY2FzZSBMQVBfTlJNX1M6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOworCX0KKwlyZXR1cm4ocmV0KTsKK30KKworLyogQ2xlYXIgYSBwZW5kaW5nIElyTEFQIGRpc2Nvbm5lY3QuIC0gSmVhbiBJSSAqLworc3RhdGljIGlubGluZSB2b2lkIGlybGFwX2NsZWFyX2Rpc2Nvbm5lY3Qoc3RydWN0IGlybGFwX2NiICpzZWxmKQoreworCXNlbGYtPmRpc2Nvbm5lY3RfcGVuZGluZyA9IEZBTFNFOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWUyZTExOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaApAQCAtMCwwICsxLDEzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlybGFwX2V2ZW50LmgKKyAqIFZlcnNpb246ICAgICAgIDAuMQorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTYXQgQXVnIDE2IDAwOjU5OjI5IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFR1ZSBEZWMgMjEgMTE6MjA6MzAgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIAorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIAorICogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIAorICogICAgIE1BIDAyMTExLTEzMDcgVVNBCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJMQVBfRVZFTlRfSAorI2RlZmluZSBJUkxBUF9FVkVOVF9ICisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisKKy8qIEEgZmV3IGZvcndhcmQgZGVjbGFyYXRpb25zICh0byBtYWtlIGNvbXBpbGVyIGhhcHB5KSAqLworc3RydWN0IGlybGFwX2NiOworc3RydWN0IGlybGFwX2luZm87CisKKy8qIElyTEFQIFN0YXRlcyAqLwordHlwZWRlZiBlbnVtIHsKKwlMQVBfTkRNLCAgICAgICAgIC8qIE5vcm1hbCBkaXNjb25uZWN0ZWQgbW9kZSAqLworCUxBUF9RVUVSWSwKKwlMQVBfUkVQTFksCisJTEFQX0NPTk4sICAgICAgICAvKiBDb25uZWN0IGluZGljYXRpb24gKi8KKwlMQVBfU0VUVVAsICAgICAgIC8qIFNldHRpbmcgdXAgY29ubmVjdGlvbiAqLworCUxBUF9PRkZMSU5FLCAgICAgLyogQSByZWFsbHkgYm9yaW5nIHN0YXRlICovCisJTEFQX1hNSVRfUCwKKwlMQVBfUENMT1NFLAorCUxBUF9OUk1fUCwgICAgICAgLyogTm9ybWFsIHJlc3BvbnNlIG1vZGUgYXMgcHJpbWFyeSAqLworCUxBUF9SRVNFVF9XQUlULAorCUxBUF9SRVNFVCwKKwlMQVBfTlJNX1MsICAgICAgIC8qIE5vcm1hbCByZXNwb25zZSBtb2RlIGFzIHNlY29uZGFyeSAqLworCUxBUF9YTUlUX1MsCisJTEFQX1NDTE9TRSwKKwlMQVBfUkVTRVRfQ0hFQ0ssCit9IElSTEFQX1NUQVRFOworCisvKiBJckxBUCBFdmVudHMgKi8KK3R5cGVkZWYgZW51bSB7CisJLyogU2VydmljZXMgZXZlbnRzICovCisJRElTQ09WRVJZX1JFUVVFU1QsCisJQ09OTkVDVF9SRVFVRVNULAorCUNPTk5FQ1RfUkVTUE9OU0UsCisJRElTQ09OTkVDVF9SRVFVRVNULAorCURBVEFfUkVRVUVTVCwKKwlSRVNFVF9SRVFVRVNULAorCVJFU0VUX1JFU1BPTlNFLAorCisJLyogU2VuZCBldmVudHMgKi8KKwlTRU5EX0lfQ01ELAorCVNFTkRfVUlfRlJBTUUsCisKKwkvKiBSZWNlaXZlIGV2ZW50cyAqLworCVJFQ1ZfRElTQ09WRVJZX1hJRF9DTUQsCisJUkVDVl9ESVNDT1ZFUllfWElEX1JTUCwKKwlSRUNWX1NOUk1fQ01ELAorCVJFQ1ZfVEVTVF9DTUQsCisJUkVDVl9URVNUX1JTUCwKKwlSRUNWX1VBX1JTUCwKKwlSRUNWX0RNX1JTUCwKKwlSRUNWX1JEX1JTUCwKKwlSRUNWX0lfQ01ELAorCVJFQ1ZfSV9SU1AsCisJUkVDVl9VSV9GUkFNRSwKKwlSRUNWX0ZSTVJfUlNQLAorCVJFQ1ZfUlJfQ01ELAorCVJFQ1ZfUlJfUlNQLAorCVJFQ1ZfUk5SX0NNRCwKKwlSRUNWX1JOUl9SU1AsCisJUkVDVl9SRUpfQ01ELAorCVJFQ1ZfUkVKX1JTUCwKKwlSRUNWX1NSRUpfQ01ELAorCVJFQ1ZfU1JFSl9SU1AsCisJUkVDVl9ESVNDX0NNRCwKKworCS8qIFRpbWVyIGV2ZW50cyAqLworCVNMT1RfVElNRVJfRVhQSVJFRCwKKwlRVUVSWV9USU1FUl9FWFBJUkVELAorCUZJTkFMX1RJTUVSX0VYUElSRUQsCisJUE9MTF9USU1FUl9FWFBJUkVELAorCURJU0NPVkVSWV9USU1FUl9FWFBJUkVELAorCVdEX1RJTUVSX0VYUElSRUQsCisJQkFDS09GRl9USU1FUl9FWFBJUkVELAorCU1FRElBX0JVU1lfVElNRVJfRVhQSVJFRCwKK30gSVJMQVBfRVZFTlQ7CisKKy8qCisgKiBEaXNjb25uZWN0IHJlYXNvbiBjb2RlCisgKi8KK3R5cGVkZWYgZW51bSB7IC8qIEZJWE1FIGNoZWNrIHRoZSB0d28gZmlyc3QgcmVhc29uIGNvZGVzICovCisJTEFQX0RJU0NfSU5ESUNBVElPTj0xLCAvKiBSZWNlaXZlZCBhIGRpc2Nvbm5lY3QgcmVxdWVzdCBmcm9tIHBlZXIgKi8KKwlMQVBfTk9fUkVTUE9OU0UsICAgICAgIC8qIFRvIG1hbnkgcmV0cmFuc21pdHMgd2l0aG91dCByZXNwb25zZSAqLworCUxBUF9SRVNFVF9JTkRJQ0FUSU9OLCAgLyogVG8gbWFueSByZXRyYW5zbWl0cywgb3IgaW52YWxpZCBuci9ucyAqLworCUxBUF9GT1VORF9OT05FLCAgICAgICAgLyogTm8gZGV2aWNlcyB3ZXJlIGRpc2NvdmVyZWQgKi8KKwlMQVBfTUVESUFfQlVTWSwKKwlMQVBfUFJJTUFSWV9DT05GTElDVCwKK30gTEFQX1JFQVNPTjsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmlybGFwX3N0YXRlW107CisKK3ZvaWQgaXJsYXBfZG9fZXZlbnQoc3RydWN0IGlybGFwX2NiICpzZWxmLCBJUkxBUF9FVkVOVCBldmVudCwgCisJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJsYXBfaW5mbyAqaW5mbyk7Cit2b2lkIGlybGFwX3ByaW50X2V2ZW50KElSTEFQX0VWRU5UIGV2ZW50KTsKKworZXh0ZXJuIGludCBpcmxhcF9xb3NfbmVnb3RpYXRlKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2ZyYW1lLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJsYXBfZnJhbWUuaAorICogVmVyc2lvbjogICAgICAgMC45CisgKiBEZXNjcmlwdGlvbjogICBJckxBUCBmcmFtZSBkZWNsYXJhdGlvbnMKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFR1ZSBBdWcgMTkgMTA6Mjc6MjYgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgU2F0IERlYyAyNSAyMTowNzoyNiAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqICAgICBNQSAwMjExMS0xMzA3IFVTQQorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTEFQX0ZSQU1FX0gKKyNkZWZpbmUgSVJMQVBfRlJBTUVfSAorCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisKKy8qIEEgZmV3IGZvcndhcmQgZGVjbGFyYXRpb25zICh0byBtYWtlIGNvbXBpbGVyIGhhcHB5KSAqLworc3RydWN0IGlybGFwX2NiOworc3RydWN0IGRpc2NvdmVyeV90OworCisvKiBGcmFtZSB0eXBlcyBhbmQgdGVtcGxhdGVzICovCisjZGVmaW5lIElOVkFMSUQgICAweGZmCisKKy8qIFVubnVtYmVyZWQgKFUpIGNvbW1hbmRzICovCisjZGVmaW5lIFNOUk1fQ01EICAweDgzIC8qIFNldCBOb3JtYWwgUmVzcG9uc2UgTW9kZSAqLworI2RlZmluZSBESVNDX0NNRCAgMHg0MyAvKiBEaXNjb25uZWN0ICovCisjZGVmaW5lIFhJRF9DTUQgICAweDJmIC8qIEV4Y2hhbmdlIFN0YXRpb24gSWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgVEVTVF9DTUQgIDB4ZTMgLyogVGVzdCAqLworCisvKiBVbm51bWJlcmVkIHJlc3BvbnNlcyAqLworI2RlZmluZSBSTlJNX1JTUCAgMHg4MyAvKiBSZXF1ZXN0IE5vcm1hbCBSZXNwb25zZSBNb2RlICovCisjZGVmaW5lIFVBX1JTUCAgICAweDYzIC8qIFVubnVtYmVyZWQgQWNrbm93bGVkZ2VtZW50ICovCisjZGVmaW5lIEZSTVJfUlNQICAweDg3IC8qIEZyYW1lIFJlamVjdCAqLworI2RlZmluZSBETV9SU1AgICAgMHgwZiAvKiBEaXNjb25uZWN0IE1vZGUgKi8KKyNkZWZpbmUgUkRfUlNQICAgIDB4NDMgLyogUmVxdWVzdCBEaXNjb25uZWN0aW9uICovCisjZGVmaW5lIFhJRF9SU1AgICAweGFmIC8qIEV4Y2hhbmdlIFN0YXRpb24gSWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgVEVTVF9SU1AgIDB4ZTMgLyogVGVzdCBmcmFtZSAqLworCisvKiBTdXBlcnZpc29yeSAoUykgKi8KKyNkZWZpbmUgUlIgICAgICAgIDB4MDEgLyogUmVjZWl2ZSBSZWFkeSAqLworI2RlZmluZSBSRUogICAgICAgMHgwOSAvKiBSZWplY3QgKi8KKyNkZWZpbmUgUk5SICAgICAgIDB4MDUgLyogUmVjZWl2ZSBOb3QgUmVhZHkgKi8KKyNkZWZpbmUgU1JFSiAgICAgIDB4MGQgLyogU2VsZWN0aXZlIFJlamVjdCAqLworCisvKiBJbmZvcm1hdGlvbiAoSSkgKi8KKyNkZWZpbmUgSV9GUkFNRSAgIDB4MDAgLyogSW5mb3JtYXRpb24gRm9ybWF0ICovCisjZGVmaW5lIFVJX0ZSQU1FICAweDAzIC8qIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gKi8KKworI2RlZmluZSBDTURfRlJBTUUgMHgwMQorI2RlZmluZSBSU1BfRlJBTUUgMHgwMAorCisjZGVmaW5lIFBGX0JJVCAgICAweDEwIC8qIFBvbGwvZmluYWwgYml0ICovCisKK3N0cnVjdCB4aWRfZnJhbWUgeworCV9fdTggIGNhZGRyOyAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KKwlfX3U4ICBjb250cm9sOworCV9fdTggIGlkZW50OyAvKiBTaG91bGQgYWx3YXlzIGJlIFhJRF9GT1JNQVQgKi8gCisJX191MzIgc2FkZHI7IC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworCV9fdTMyIGRhZGRyOyAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLworCV9fdTggIGZsYWdzOyAvKiBEaXNjb3ZlcnkgZmxhZ3MgKi8KKwlfX3U4ICBzbG90bnI7CisJX191OCAgdmVyc2lvbjsKK30gSVJEQV9QQUNLOworCitzdHJ1Y3QgdGVzdF9mcmFtZSB7CisJX191OCBjYWRkcjsgICAgICAgICAgLyogQ29ubmVjdGlvbiBhZGRyZXNzICovCisJX191OCBjb250cm9sOworCV9fdTMyIHNhZGRyOyAgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworCV9fdTMyIGRhZGRyOyAgICAgICAgIC8qIERlc3RpbmF0aW9uIGRldmljZSBhZGRyZXNzICovCit9IElSREFfUEFDSzsKKworc3RydWN0IHVhX2ZyYW1lIHsKKwlfX3U4IGNhZGRyOworCV9fdTggY29udHJvbDsKKworCV9fdTMyIHNhZGRyOyAvKiBTb3VyY2UgZGV2aWNlIGFkZHJlc3MgKi8KKwlfX3UzMiBkYWRkcjsgLyogRGVzdCBkZXZpY2UgYWRkcmVzcyAqLworfSBJUkRBX1BBQ0s7CisJCitzdHJ1Y3QgaV9mcmFtZSB7CisJX191OCBjYWRkcjsKKwlfX3U4IGNvbnRyb2w7Cit9IElSREFfUEFDSzsKKworc3RydWN0IHNucm1fZnJhbWUgeworCV9fdTggIGNhZGRyOworCV9fdTggIGNvbnRyb2w7CisJX191MzIgc2FkZHI7CisJX191MzIgZGFkZHI7CisJX191OCAgbmNhZGRyOworfSBJUkRBX1BBQ0s7CisKK3ZvaWQgaXJsYXBfcXVldWVfeG1pdChzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmxhcF9zZW5kX2Rpc2NvdmVyeV94aWRfZnJhbWUoc3RydWN0IGlybGFwX2NiICosIGludCBTLCBfX3U4IHMsIAorCQkJCSAgICBfX3U4IGNvbW1hbmQsCisJCQkJICAgIHN0cnVjdCBkaXNjb3ZlcnlfdCAqZGlzY292ZXJ5KTsKK3ZvaWQgaXJsYXBfc2VuZF9zbnJtX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3QgcW9zX2luZm8gKik7Cit2b2lkIGlybGFwX3NlbmRfdGVzdF9mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIF9fdTggY2FkZHIsIF9fdTMyIGRhZGRyLCAKKwkJCSAgIHN0cnVjdCBza19idWZmICpjbWQpOwordm9pZCBpcmxhcF9zZW5kX3VhX3Jlc3BvbnNlX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3QgcW9zX2luZm8gKik7Cit2b2lkIGlybGFwX3NlbmRfZG1fZnJhbWUoc3RydWN0IGlybGFwX2NiICpzZWxmKTsKK3ZvaWQgaXJsYXBfc2VuZF9yZF9mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpOwordm9pZCBpcmxhcF9zZW5kX2Rpc2NfZnJhbWUoc3RydWN0IGlybGFwX2NiICpzZWxmKTsKK3ZvaWQgaXJsYXBfc2VuZF9ycl9mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCBjb21tYW5kKTsKKwordm9pZCBpcmxhcF9zZW5kX2RhdGFfcHJpbWFyeShzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7Cit2b2lkIGlybGFwX3NlbmRfZGF0YV9wcmltYXJ5X3BvbGwoc3RydWN0IGlybGFwX2NiICosIHN0cnVjdCBza19idWZmICopOwordm9pZCBpcmxhcF9zZW5kX2RhdGFfc2Vjb25kYXJ5KHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3ZvaWQgaXJsYXBfc2VuZF9kYXRhX3NlY29uZGFyeV9maW5hbChzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7Cit2b2lkIGlybGFwX3Jlc2VuZF9yZWplY3RlZF9mcmFtZXMoc3RydWN0IGlybGFwX2NiICosIGludCBjb21tYW5kKTsKK3ZvaWQgaXJsYXBfcmVzZW5kX3JlamVjdGVkX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IGNvbW1hbmQpOworCit2b2lkIGlybGFwX3NlbmRfdWlfZnJhbWUoc3RydWN0IGlybGFwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIF9fdTggY2FkZHIsIGludCBjb21tYW5kKTsKKworZXh0ZXJuIGludCBpcmxhcF9pbnNlcnRfcW9zX25lZ290aWF0aW9uX3BhcmFtcyhzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIAorCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YWVmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmgKQEAgLTAsMCArMSwyOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJsbXAuaAorICogVmVyc2lvbjogICAgICAgMC45CisgKiBEZXNjcmlwdGlvbjogICBJckRBIExpbmsgTWFuYWdlbWVudCBQcm90b2NvbCAoTE1QKSBsYXllcgorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogQ3JlYXRlZCBhdDogICAgU3VuIEF1ZyAxNyAyMDo1NDozMiAxOTk3CisgKiBNb2RpZmllZCBhdDogICBGcmkgRGVjIDEwIDEzOjIzOjAxIDE5OTkKKyAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIAorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTE1QX0gKKyNkZWZpbmUgSVJMTVBfSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+ICAvKiBmb3IgSFogKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvcW9zLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYXAuaD4JCS8qIExBUF9NQVhfSEVBREVSLCAuLi4gKi8KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmxtcF9ldmVudC5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lycXVldWUuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9kaXNjb3ZlcnkuaD4KKworLyogTFNBUC1TRUwncyAqLworI2RlZmluZSBMU0FQX01BU0sgICAgIDB4N2YKKyNkZWZpbmUgTFNBUF9JQVMgICAgICAweDAwCisjZGVmaW5lIExTQVBfQU5ZICAgICAgMHhmZgorI2RlZmluZSBMU0FQX01BWCAgICAgIDB4NmYgLyogMHg3MC0weDdmIGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBMU0FQX0NPTk5MRVNTIDB4NzAgLyogQ29ubmVjdGlvbmxlc3MgTFNBUCwgbW9zdGx5IHVzZWQgZm9yIFVsdHJhICovCisKKyNkZWZpbmUgREVWX0FERFJfQU5ZICAweGZmZmZmZmZmCisKKyNkZWZpbmUgTE1QX0hFQURFUiAgICAgICAgICAyICAgIC8qIERlc3QgTFNBUCArIFNvdXJjZSBMU0FQICovCisjZGVmaW5lIExNUF9DT05UUk9MX0hFQURFUiAgNAorI2RlZmluZSBMTVBfUElEX0hFQURFUiAgICAgIDEgICAgLyogVXNlZCBieSBVbHRyYSAqLworI2RlZmluZSBMTVBfTUFYX0hFQURFUiAgICAgIChMTVBfQ09OVFJPTF9IRUFERVIrTEFQX01BWF9IRUFERVIpCisKKyNkZWZpbmUgTE1fTUFYX0NPTk5FQ1RJT05TICAxMAorCisjZGVmaW5lIExNX0lETEVfVElNRU9VVCAgICAgMipIWiAvKiAyIHNlY29uZHMgZm9yIG5vdyAqLworCit0eXBlZGVmIGVudW0geworCVNfUE5QID0gMCwKKwlTX1BEQSwKKwlTX0NPTVBVVEVSLAorCVNfUFJJTlRFUiwKKwlTX01PREVNLAorCVNfRkFYLAorCVNfTEFOLAorCVNfVEVMRVBIT05ZLAorCVNfQ09NTSwKKwlTX09CRVgsCisJU19BTlksCisJU19FTkQsCit9IFNFUlZJQ0U7CisKKy8qIEZvciBzZWxlY3RpdmUgZGlzY292ZXJ5ICovCit0eXBlZGVmIHZvaWQgKCpESVNDT1ZFUllfQ0FMTEJBQ0sxKSAoZGlzY2luZm9fdCAqLCBESVNDT1ZFUllfTU9ERSwgdm9pZCAqKTsKKy8qIEZvciBleHBpcnkgKHRoZSBzYW1lKSAqLwordHlwZWRlZiB2b2lkICgqRElTQ09WRVJZX0NBTExCQUNLMikgKGRpc2NpbmZvX3QgKiwgRElTQ09WRVJZX01PREUsIHZvaWQgKik7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpcmRhX3F1ZXVlX3QgcXVldWU7IC8qIE11c3QgYmUgZmlyc3QgKi8KKworCV9fdTE2X2hvc3Rfb3JkZXIgaGludHM7IC8qIEhpbnQgYml0cyAqLworfSBpcmxtcF9zZXJ2aWNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpcmRhX3F1ZXVlX3QgcXVldWU7IC8qIE11c3QgYmUgZmlyc3QgKi8KKworCV9fdTE2X2hvc3Rfb3JkZXIgaGludF9tYXNrOworCisJRElTQ09WRVJZX0NBTExCQUNLMSBkaXNjb19jYWxsYmFjazsJLyogU2VsZWN0aXZlIGRpc2NvdmVyeSAqLworCURJU0NPVkVSWV9DQUxMQkFDSzIgZXhwaXJfY2FsbGJhY2s7CS8qIFNlbGVjdGl2ZSBleHBpcmF0aW9uICovCisJdm9pZCAqcHJpdjsgICAgICAgICAgICAgICAgLyogVXNlZCB0byBpZGVudGlmeSBjbGllbnQgKi8KK30gaXJsbXBfY2xpZW50X3Q7CisKKy8qCisgKiAgSW5mb3JtYXRpb24gYWJvdXQgZWFjaCBsb2dpY2FsIExTQVAgY29ubmVjdGlvbgorICovCitzdHJ1Y3QgbHNhcF9jYiB7CisJaXJkYV9xdWV1ZV90IHF1ZXVlOyAgICAgIC8qIE11c3QgYmUgZmlyc3QgKi8KKwltYWdpY190IG1hZ2ljOworCisJdW5zaWduZWQgbG9uZyBjb25uZWN0ZWQ7CS8qIHNldF9iaXQgdXNlZCBvbiB0aGlzICovCisJaW50ICBwZXJzaXN0ZW50OworCisJX191OCBzbHNhcF9zZWw7ICAgLyogU291cmNlICh0aGlzKSBMU0FQIGFkZHJlc3MgKi8KKwlfX3U4IGRsc2FwX3NlbDsgICAvKiBEZXN0aW5hdGlvbiBMU0FQIGFkZHJlc3MgKGlmIGNvbm5lY3RlZCkgKi8KKyNpZmRlZiBDT05GSUdfSVJEQV9VTFRSQQorCV9fdTggcGlkOyAgICAgICAgIC8qIFVzZWQgYnkgY29ubmVjdGlvbmxlc3MgTFNBUCAqLworI2VuZGlmIC8qIENPTkZJR19JUkRBX1VMVFJBICovCisJc3RydWN0IHNrX2J1ZmYgKmNvbm5fc2tiOyAvKiBTdG9yZSBza2IgaGVyZSB3aGlsZSBjb25uZWN0aW5nICovCisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKKworCUlSTE1QX1NUQVRFICAgICBsc2FwX3N0YXRlOyAgLyogQ29ubmVjdGlvbiBzdGF0ZSAqLworCW5vdGlmeV90ICAgICAgICBub3RpZnk7ICAgICAgLyogSW5kaWNhdGlvbi9Db25maXJtIGVudHJ5IHBvaW50cyAqLworCXN0cnVjdCBxb3NfaW5mbyBxb3M7ICAgICAgICAgLyogUW9TIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KKworCXN0cnVjdCBsYXBfY2IgKmxhcDsgLyogUG9pbnRlciB0byBMQVAgY29ubmVjdGlvbiBzdHJ1Y3R1cmUgKi8KK307CisKKy8qCisgKiAgVXNlZCBmb3IgY2FjaGluZyB0aGUgbGFzdCBzbHNhcC0+ZGxzYXAtPmhhbmRsZSBtYXBwaW5nCisgKgorICogV2UgZG9uJ3QgbmVlZCB0byBrZWVwL21hdGNoIHRoZSByZW1vdGUgYWRkcmVzcyBpbiB0aGUgY2FjaGUgYmVjYXVzZQorICogd2UgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIExBUCAod2hpY2ggaW1wbGllcyBpdCkuCisgKiBKZWFuIElJCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgdmFsaWQ7CisKKwlfX3U4IHNsc2FwX3NlbDsKKwlfX3U4IGRsc2FwX3NlbDsKKwlzdHJ1Y3QgbHNhcF9jYiAqbHNhcDsKK30gQ0FDSEVfRU5UUlk7CisKKy8qCisgKiAgSW5mb3JtYXRpb24gYWJvdXQgZWFjaCByZWdpc3RyZWQgSXJMQVAgbGF5ZXIKKyAqLworc3RydWN0IGxhcF9jYiB7CisJaXJkYV9xdWV1ZV90IHF1ZXVlOyAvKiBNdXN0IGJlIGZpcnN0ICovCisJbWFnaWNfdCBtYWdpYzsKKworCWludCByZWFzb247ICAgIC8qIExBUCBkaXNjb25uZWN0IHJlYXNvbiAqLworCisJSVJMTVBfU1RBVEUgbGFwX3N0YXRlOworCisJc3RydWN0IGlybGFwX2NiICppcmxhcDsgICAvKiBJbnN0YW5jZSBvZiBJckxBUCBsYXllciAqLworCWhhc2hiaW5fdCAqbHNhcHM7ICAgICAgICAgLyogTFNBUCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsaW5rICovCisJc3RydWN0IGxzYXBfY2IgKmZsb3dfbmV4dDsJLyogTmV4dCBsc2FwIHRvIGJlIHBvbGxlZCBmb3IgVHggKi8KKworCV9fdTggIGNhZGRyOyAgLyogQ29ubmVjdGlvbiBhZGRyZXNzICovCisgCV9fdTMyIHNhZGRyOyAgLyogU291cmNlIGRldmljZSBhZGRyZXNzICovCisgCV9fdTMyIGRhZGRyOyAgLyogRGVzdGluYXRpb24gZGV2aWNlIGFkZHJlc3MgKi8KKwkKKwlzdHJ1Y3QgcW9zX2luZm8gKnFvczsgIC8qIExBUCBRb1MgZm9yIHRoaXMgc2Vzc2lvbiAqLworCXN0cnVjdCB0aW1lcl9saXN0IGlkbGVfdGltZXI7CisJCisjaWZkZWYgQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQCisJLyogVGhlIGxzYXAgY2FjaGUgd2FzIG1vdmVkIGZyb20gc3RydWN0IGlybG1wX2NiIHRvIGhlcmUgYmVjYXVzZQorCSAqIGl0IG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpYyBMQVAuIEFsc28sIHRoaXMKKwkgKiBpbXByb3ZlcyBwZXJmb3JtYW5jZS4gLSBKZWFuIElJICovCisJQ0FDSEVfRU5UUlkgY2FjaGU7ICAvKiBDYWNoaW5nIGxhc3Qgc2xzYXAtPmRsc2FwLT5oYW5kbGUgbWFwcGluZyAqLworI2VuZGlmCit9OworCisvKgorICogIE1haW4gc3RydWN0dXJlIGZvciBJckxNUAorICovCitzdHJ1Y3QgaXJsbXBfY2IgeworCW1hZ2ljX3QgbWFnaWM7CisKKwlfX3U4IGNvbmZsaWN0X2ZsYWc7CisJCisJZGlzY292ZXJ5X3QgZGlzY292ZXJ5X2NtZDsgLyogRGlzY292ZXJ5IGNvbW1hbmQgdG8gdXNlIGJ5IElyTEFQICovCisJZGlzY292ZXJ5X3QgZGlzY292ZXJ5X3JzcDsgLyogRGlzY292ZXJ5IHJlc3BvbnNlIHRvIHVzZSBieSBJckxBUCAqLworCisJLyogTGFzdCBsc2FwIHBpY2tlZCBhdXRvbWF0aWNhbGx5IGJ5IGlybG1wX2ZpbmRfZnJlZV9zbHNhcCgpICovCisJaW50CWxhc3RfbHNhcF9zZWw7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCBkaXNjb3ZlcnlfdGltZXI7CisKKyAJaGFzaGJpbl90ICpsaW5rczsgICAgICAgICAvKiBJckxBUCBjb25uZWN0aW9uIHRhYmxlICovCisJaGFzaGJpbl90ICp1bmNvbm5lY3RlZF9sc2FwczsKKyAJaGFzaGJpbl90ICpjbGllbnRzOworCWhhc2hiaW5fdCAqc2VydmljZXM7CisKKwloYXNoYmluX3QgKmNhY2hlbG9nOwkvKiBDdXJyZW50IGRpc2NvdmVyeSBsb2cgKi8KKworCWludCBydW5uaW5nOworCisJX191MTZfaG9zdF9vcmRlciBoaW50czsgLyogSGludCBiaXRzICovCit9OworCisvKiBQcm90b3R5cGUgZGVjbGFyYXRpb25zICovCitpbnQgIGlybG1wX2luaXQodm9pZCk7Cit2b2lkIGlybG1wX2NsZWFudXAodm9pZCk7CitzdHJ1Y3QgbHNhcF9jYiAqaXJsbXBfb3Blbl9sc2FwKF9fdTggc2xzYXAsIG5vdGlmeV90ICpub3RpZnksIF9fdTggcGlkKTsKK3ZvaWQgaXJsbXBfY2xvc2VfbHNhcCggc3RydWN0IGxzYXBfY2IgKnNlbGYpOworCitfX3UxNiBpcmxtcF9zZXJ2aWNlX3RvX2hpbnQoaW50IHNlcnZpY2UpOwordm9pZCAqaXJsbXBfcmVnaXN0ZXJfc2VydmljZShfX3UxNiBoaW50cyk7CitpbnQgaXJsbXBfdW5yZWdpc3Rlcl9zZXJ2aWNlKHZvaWQgKmhhbmRsZSk7Cit2b2lkICppcmxtcF9yZWdpc3Rlcl9jbGllbnQoX191MTYgaGludF9tYXNrLCBESVNDT1ZFUllfQ0FMTEJBQ0sxIGRpc2NvX2NsYiwKKwkJCSAgICBESVNDT1ZFUllfQ0FMTEJBQ0syIGV4cGlyX2NsYiwgdm9pZCAqcHJpdik7CitpbnQgaXJsbXBfdW5yZWdpc3Rlcl9jbGllbnQodm9pZCAqaGFuZGxlKTsKK2ludCBpcmxtcF91cGRhdGVfY2xpZW50KHZvaWQgKmhhbmRsZSwgX191MTYgaGludF9tYXNrLCAKKwkJCURJU0NPVkVSWV9DQUxMQkFDSzEgZGlzY29fY2xiLAorCQkJRElTQ09WRVJZX0NBTExCQUNLMiBleHBpcl9jbGIsIHZvaWQgKnByaXYpOworCit2b2lkIGlybG1wX3JlZ2lzdGVyX2xpbmsoc3RydWN0IGlybGFwX2NiICosIF9fdTMyIHNhZGRyLCBub3RpZnlfdCAqKTsKK3ZvaWQgaXJsbXBfdW5yZWdpc3Rlcl9saW5rKF9fdTMyIHNhZGRyKTsKKworaW50ICBpcmxtcF9jb25uZWN0X3JlcXVlc3Qoc3RydWN0IGxzYXBfY2IgKiwgX191OCBkbHNhcF9zZWwsIAorCQkJICAgX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLAorCQkJICAgc3RydWN0IHFvc19pbmZvICosIHN0cnVjdCBza19idWZmICopOwordm9pZCBpcmxtcF9jb25uZWN0X2luZGljYXRpb24oc3RydWN0IGxzYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50ICBpcmxtcF9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBsc2FwX2NiICosIHN0cnVjdCBza19idWZmICopOwordm9pZCBpcmxtcF9jb25uZWN0X2NvbmZpcm0oc3RydWN0IGxzYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitzdHJ1Y3QgbHNhcF9jYiAqaXJsbXBfZHVwKHN0cnVjdCBsc2FwX2NiICpzZWxmLCB2b2lkICppbnN0YW5jZSk7CisKK3ZvaWQgaXJsbXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBsc2FwX2NiICpzZWxmLCBMTV9SRUFTT04gcmVhc29uLCAKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKTsKK2ludCAgaXJsbXBfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBsc2FwX2NiICosIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSk7CisKK3ZvaWQgaXJsbXBfZGlzY292ZXJ5X2NvbmZpcm0oaGFzaGJpbl90ICpkaXNjb3ZlcnlfbG9nLCBESVNDT1ZFUllfTU9ERSBtb2RlKTsKK3ZvaWQgaXJsbXBfZGlzY292ZXJ5X3JlcXVlc3QoaW50IG5zbG90cyk7CitkaXNjaW5mb190ICppcmxtcF9nZXRfZGlzY292ZXJpZXMoaW50ICpwbiwgX191MTYgbWFzaywgaW50IG5zbG90cyk7Cit2b2lkIGlybG1wX2RvX2V4cGlyeSh2b2lkKTsKK3ZvaWQgaXJsbXBfZG9fZGlzY292ZXJ5KGludCBuc2xvdHMpOworZGlzY292ZXJ5X3QgKmlybG1wX2dldF9kaXNjb3ZlcnlfcmVzcG9uc2Uodm9pZCk7Cit2b2lkIGlybG1wX2Rpc2NvdmVyeV9leHBpcnkoZGlzY2luZm9fdCAqZXhwaXJ5LCBpbnQgbnVtYmVyKTsKKworaW50ICBpcmxtcF9kYXRhX3JlcXVlc3Qoc3RydWN0IGxzYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7Cit2b2lkIGlybG1wX2RhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgbHNhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworaW50ICBpcmxtcF91ZGF0YV9yZXF1ZXN0KHN0cnVjdCBsc2FwX2NiICosIHN0cnVjdCBza19idWZmICopOwordm9pZCBpcmxtcF91ZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBsc2FwX2NiICosIHN0cnVjdCBza19idWZmICopOworCisjaWZkZWYgQ09ORklHX0lSREFfVUxUUkEKK2ludCAgaXJsbXBfY29ubmxlc3NfZGF0YV9yZXF1ZXN0KHN0cnVjdCBsc2FwX2NiICosIHN0cnVjdCBza19idWZmICosIF9fdTgpOwordm9pZCBpcmxtcF9jb25ubGVzc19kYXRhX2luZGljYXRpb24oc3RydWN0IGxzYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7CisjZW5kaWYgLyogQ09ORklHX0lSREFfVUxUUkEgKi8KKwordm9pZCBpcmxtcF9zdGF0dXNfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwX2NiICosIExJTktfU1RBVFVTIGxpbmssIExPQ0tfU1RBVFVTIGxvY2spOwordm9pZCBpcmxtcF9mbG93X2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqc2VsZiwgTE9DQUxfRkxPVyBmbG93KTsKKworTE1fUkVBU09OIGlybG1wX2NvbnZlcnRfbGFwX3JlYXNvbihMQVBfUkVBU09OKTsKKworc3RhdGljIGlubGluZSBfX3UzMiBpcmxtcF9nZXRfc2FkZHIoY29uc3Qgc3RydWN0IGxzYXBfY2IgKnNlbGYpCit7CisJcmV0dXJuIChzZWxmICYmIHNlbGYtPmxhcCkgPyBzZWxmLT5sYXAtPnNhZGRyIDogMDsKK30KKworc3RhdGljIGlubGluZSBfX3UzMiBpcmxtcF9nZXRfZGFkZHIoY29uc3Qgc3RydWN0IGxzYXBfY2IgKnNlbGYpCit7CisJcmV0dXJuIChzZWxmICYmIHNlbGYtPmxhcCkgPyBzZWxmLT5sYXAtPmRhZGRyIDogMDsKK30KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmlybG1wX3JlYXNvbnNbXTsKK2V4dGVybiBpbnQgc3lzY3RsX2Rpc2NvdmVyeV90aW1lb3V0OworZXh0ZXJuIGludCBzeXNjdGxfZGlzY292ZXJ5X3Nsb3RzOworZXh0ZXJuIGludCBzeXNjdGxfZGlzY292ZXJ5OworZXh0ZXJuIGludCBzeXNjdGxfbGFwX2tlZXBhbGl2ZV90aW1lOwkvKiBpbiBtcywgZGVmYXVsdCBpcyBMTV9JRExFX1RJTUVPVVQgKi8KK2V4dGVybiBzdHJ1Y3QgaXJsbXBfY2IgKmlybG1wOworCisvKiBDaGVjayBpZiBMQVAgcXVldWUgaXMgZnVsbC4KKyAqIFVzZWQgYnkgSXJUVFAgZm9yIGxvdyBjb250cm9sLCBzZWUgY29tbWVudHMgaW4gaXJsYXAuaCAtIEplYW4gSUkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlybG1wX2xhcF90eF9xdWV1ZV9mdWxsKHN0cnVjdCBsc2FwX2NiICpzZWxmKQoreworCWlmIChzZWxmID09IE5VTEwpCisJCXJldHVybiAwOworCWlmIChzZWxmLT5sYXAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKHNlbGYtPmxhcC0+aXJsYXAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4oSVJMQVBfR0VUX1RYX1FVRVVFX0xFTihzZWxmLT5sYXAtPmlybGFwKSA+PSBMQVBfSElHSF9USFJFU0hPTEQpOworfQorCisvKiBBZnRlciBkb2luZyBhIGlybG1wX2R1cCgpLCB0aGlzIGdldCBvbmUgb2YgdGhlIHR3byBzb2NrZXQgYmFjayBpbnRvCisgKiBhIHN0YXRlIHdoZXJlIGl0J3Mgd2FpdGluZyBpbmNvbW1pbmcgY29ubmVjdGlvbnMuCisgKiBOb3RlIDogdGhpcyBjYW4gYmUgdXNlZCAqb25seSogaWYgdGhlIHNvY2tldCBpcyBub3QgeWV0IGNvbm5lY3RlZAorICogKGkuZS4gTk8gaXJsbXBfY29ubmVjdF9yZXNwb25zZSgpIGRvbmUgb24gdGhpcyBzb2NrZXQpLgorICogLSBKZWFuIElJICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJsbXBfbGlzdGVuKHN0cnVjdCBsc2FwX2NiICpzZWxmKQoreworCXNlbGYtPmRsc2FwX3NlbCA9IExTQVBfQU5ZOworCXNlbGYtPmxhcCA9IE5VTEw7CisJc2VsZi0+bHNhcF9zdGF0ZSA9IExTQVBfRElTQ09OTkVDVEVEOworCS8qIFN0YXJ0ZWQgd2hlbiB3ZSByZWNlaXZlZCB0aGUgTE1fQ09OTkVDVF9JTkRJQ0FUSU9OICovCisJZGVsX3RpbWVyKCZzZWxmLT53YXRjaGRvZ190aW1lcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9ldmVudC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzZmODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2V2ZW50LmgKQEAgLTAsMCArMSw5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcmxtcF9ldmVudC5oCisgKiBWZXJzaW9uOiAgICAgICAwLjEKKyAqIERlc2NyaXB0aW9uOiAgIElyREEtTE1QIGV2ZW50IGhhbmRsaW5nCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBNb24gQXVnICA0IDIwOjQwOjUzIDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFRodSBKdWwgIDggMTI6MTg6NTQgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSTE1QX0VWRU5UX0gKKyNkZWZpbmUgSVJMTVBfRVZFTlRfSAorCisvKiBBIGZldyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAodG8gbWFrZSBjb21waWxlciBoYXBweSkgKi8KK3N0cnVjdCBpcmxtcF9jYjsKK3N0cnVjdCBsc2FwX2NiOworc3RydWN0IGxhcF9jYjsKK3N0cnVjdCBkaXNjb3ZlcnlfdDsKKworLyogTEFQIHN0YXRlcyAqLwordHlwZWRlZiBlbnVtIHsKKwkvKiBJckxBUCBjb25uZWN0aW9uIGNvbnRyb2wgc3RhdGVzICovCisJTEFQX1NUQU5EQlksICAgICAgICAgICAgIC8qIE5vIExBUCBjb25uZWN0aW9uICovCisJTEFQX1VfQ09OTkVDVCwgICAgICAgICAgIC8qIFN0YXJ0aW5nIExBUCBjb25uZWN0aW9uICovCisJTEFQX0FDVElWRSwgICAgICAgICAgICAgIC8qIExBUCBjb25uZWN0aW9uIGlzIGFjdGl2ZSAqLworfSBJUkxNUF9TVEFURTsKKworLyogTFNBUCBjb25uZWN0aW9uIGNvbnRyb2wgc3RhdGVzICovCit0eXBlZGVmIGVudW0geworCUxTQVBfRElTQ09OTkVDVEVELCAgICAgICAgLyogTm8gTFNBUCBjb25uZWN0aW9uICovCisJTFNBUF9DT05ORUNULCAgICAgICAgICAgICAvKiBDb25uZWN0IGluZGljYXRpb24gZnJvbSBwZWVyICovCisJTFNBUF9DT05ORUNUX1BFTkQsICAgICAgICAvKiBDb25uZWN0IHJlcXVlc3QgZnJvbSBzZXJ2aWNlIHVzZXIgKi8KKwlMU0FQX0RBVEFfVFJBTlNGRVJfUkVBRFksIC8qIExTQVAgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCAqLyAgICAgICAgICAKKwlMU0FQX1NFVFVQLCAgICAgICAgICAgICAgIC8qIFRyeWluZyB0byBzZXQgdXAgTFNBUCBjb25uZWN0aW9uICovCisJTFNBUF9TRVRVUF9QRU5ELCAgICAgICAgICAvKiBSZXF1ZXN0IHRvIHN0YXJ0IExBUCBjb25uZWN0aW9uICovCit9IExTQVBfU1RBVEU7CisKK3R5cGVkZWYgZW51bSB7CisJLyogTFNBUCBldmVudHMgKi8KKyAJTE1fQ09OTkVDVF9SRVFVRVNULAorIAlMTV9DT05ORUNUX0NPTkZJUk0sCisJTE1fQ09OTkVDVF9SRVNQT05TRSwKKyAJTE1fQ09OTkVDVF9JTkRJQ0FUSU9OLCAJCisJCisJTE1fRElTQ09OTkVDVF9JTkRJQ0FUSU9OLAorCUxNX0RJU0NPTk5FQ1RfUkVRVUVTVCwKKworIAlMTV9EQVRBX1JFUVVFU1QsCisJTE1fVURBVEFfUkVRVUVTVCwKKyAJTE1fREFUQV9JTkRJQ0FUSU9OLAorCUxNX1VEQVRBX0lORElDQVRJT04sCisKKwlMTV9XQVRDSERPR19USU1FT1VULAorCisJLyogSXJMQVAgZXZlbnRzICovCisJTE1fTEFQX0NPTk5FQ1RfUkVRVUVTVCwKKyAJTE1fTEFQX0NPTk5FQ1RfSU5ESUNBVElPTiwgCisgCUxNX0xBUF9DT05ORUNUX0NPTkZJUk0sCisgCUxNX0xBUF9ESVNDT05ORUNUX0lORElDQVRJT04sIAorCUxNX0xBUF9ESVNDT05ORUNUX1JFUVVFU1QsCisJTE1fTEFQX0RJU0NPVkVSWV9SRVFVRVNULAorIAlMTV9MQVBfRElTQ09WRVJZX0NPTkZJUk0sCisJTE1fTEFQX0lETEVfVElNRU9VVCwKK30gSVJMTVBfRVZFTlQ7CisKK2V4dGVybiBjb25zdCBjaGFyICppcmxtcF9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmlybHNhcF9zdGF0ZVtdOworCit2b2lkIGlybG1wX3dhdGNoZG9nX3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSk7Cit2b2lkIGlybG1wX2Rpc2NvdmVyeV90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpOwordm9pZCBpcmxtcF9pZGxlX3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSk7CisKK3ZvaWQgaXJsbXBfZG9fbGFwX2V2ZW50KHN0cnVjdCBsYXBfY2IgKnNlbGYsIElSTE1QX0VWRU5UIGV2ZW50LCAKKwkJCXN0cnVjdCBza19idWZmICpza2IpOworaW50IGlybG1wX2RvX2xzYXBfZXZlbnQoc3RydWN0IGxzYXBfY2IgKnNlbGYsIElSTE1QX0VWRU5UIGV2ZW50LCAKKwkJCXN0cnVjdCBza19idWZmICpza2IpOworCisjZW5kaWYgLyogSVJMTVBfRVZFTlRfSCAqLworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzYWQxNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZnJhbWUuaApAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlybG1wX2ZyYW1lLmgKKyAqIFZlcnNpb246ICAgICAgIDAuOQorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBUdWUgQXVnIDE5IDAyOjA5OjU5IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIEZyaSBEZWMgMTAgMTM6MjE6NTMgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJNTFBfRlJBTUVfSAorI2RlZmluZSBJUk1MUF9GUkFNRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPG5ldC9pcmRhL2Rpc2NvdmVyeS5oPgorCisvKiBJckxNUCBmcmFtZSBvcGNvZGVzICovCisjZGVmaW5lIENPTk5FQ1RfQ01EICAgIDB4MDEKKyNkZWZpbmUgQ09OTkVDVF9DTkYgICAgMHg4MQorI2RlZmluZSBESVNDT05ORUNUICAgICAweDAyCisjZGVmaW5lIEFDQ0VTU01PREVfQ01EIDB4MDMKKyNkZWZpbmUgQUNDRVNTTU9ERV9DTkYgMHg4MworCisjZGVmaW5lIENPTlRST0xfQklUICAgIDB4ODAKKwordm9pZCBpcmxtcF9zZW5kX2RhdGFfcGR1KHN0cnVjdCBsYXBfY2IgKnNlbGYsIF9fdTggZGxzYXAsIF9fdTggc2xzYXAsCisJCQkJaW50IGV4cGVkaXRlZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlybG1wX3NlbmRfbGNmX3BkdShzdHJ1Y3QgbGFwX2NiICpzZWxmLCBfX3U4IGRsc2FwLCBfX3U4IHNsc2FwLCAKKwkJCV9fdTggb3Bjb2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXJsbXBfbGlua19kYXRhX2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCAKKwkJCQlpbnQgdW5yZWxpYWJsZSk7CisjaWZkZWYgQ09ORklHX0lSREFfVUxUUkEKK3ZvaWQgaXJsbXBfbGlua191bml0ZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKik7CisjZW5kaWYgLyogQ09ORklHX0lSREFfVUxUUkEgKi8KKwordm9pZCBpcmxtcF9saW5rX2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwX2NiICosIF9fdTMyIHNhZGRyLCBfX3UzMiBkYWRkciwKKwkJCQkgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGlybG1wX2xpbmtfY29ubmVjdF9yZXF1ZXN0KF9fdTMyIGRhZGRyKTsKK3ZvaWQgaXJsbXBfbGlua19jb25uZWN0X2NvbmZpcm0oc3RydWN0IGxhcF9jYiAqc2VsZiwgc3RydWN0IHFvc19pbmZvICpxb3MsIAorCQkJCXN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBpcmxtcF9saW5rX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwX2NiICosIHN0cnVjdCBpcmxhcF9jYiAqLCAKKwkJCQkgICAgICBMQVBfUkVBU09OIHJlYXNvbiwgc3RydWN0IHNrX2J1ZmYgKik7IAordm9pZCBpcmxtcF9saW5rX2Rpc2NvdmVyeV9jb25maXJtKHN0cnVjdCBsYXBfY2IgKnNlbGYsIGhhc2hiaW5fdCAqbG9nKTsKK3ZvaWQgaXJsbXBfbGlua19kaXNjb3ZlcnlfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwX2NiICosIGRpc2NvdmVyeV90ICpkaXNjb3ZlcnkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJtb2QuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJtb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmI0NDZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcm1vZC5oCkBAIC0wLDAgKzEsMTA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIGlybW9kLmgKKyAqIFZlcnNpb246ICAgICAgIDAuMworICogRGVzY3JpcHRpb246ICAgSXJEQSBtb2R1bGUgYW5kIHV0aWxpdGllcyBmdW5jdGlvbnMKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBEZWMgMTUgMTM6NTg6NTIgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgRnJpIEphbiAyOCAxMzoxNToyNCAyMDAwCisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKgorICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEplYW4gVG91cnJpbGhlcyA8anRAaHBsLmhwLmNvbT4KKyAqICAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmcuCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJNT0RfSAorI2RlZmluZSBJUk1PRF9ICisKKy8qIE1pc2Mgc3RhdHVzIGluZm9ybWF0aW9uICovCit0eXBlZGVmIGVudW0geworCVNUQVRVU19PSywKKwlTVEFUVVNfQUJPUlRFRCwKKwlTVEFUVVNfTk9fQUNUSVZJVFksCisJU1RBVFVTX05PSVNZLAorCVNUQVRVU19SRU1PVEUsCit9IExJTktfU1RBVFVTOworCit0eXBlZGVmIGVudW0geworCUxPQ0tfTk9fQ0hBTkdFLAorCUxPQ0tfTE9DS0VELAorCUxPQ0tfVU5MT0NLRUQsCit9IExPQ0tfU1RBVFVTOworCit0eXBlZGVmIGVudW0geyBGTE9XX1NUT1AsIEZMT1dfU1RBUlQgfSBMT0NBTF9GTE9XOworCisvKiAgCisgKiAgSXJMTVAgZGlzY29ubmVjdCByZWFzb25zLiBUaGUgb3JkZXIgaXMgdmVyeSBpbXBvcnRhbnQsIHNpbmNlIHRoZXkgCisgKiAgY29ycmVzcG9uZCB0byBkaXNjb25uZWN0IHJlYXNvbnMgc2VudCBpbiBJckxNUCBkaXNjb25uZWN0IGZyYW1lcywgc28KKyAqICBwbGVhc2UgZG8gbm90IHRvdWNoIDotKQorICovCit0eXBlZGVmIGVudW0geworCUxNX1VTRVJfUkVRVUVTVCA9IDEsICAvKiBVc2VyIHJlcXVlc3QgKi8KKwlMTV9MQVBfRElTQ09OTkVDVCwgICAgLyogVW5leHBlY3RlZCBJckxBUCBkaXNjb25uZWN0ICovCisJTE1fQ09OTkVDVF9GQUlMVVJFLCAgIC8qIEZhaWxlZCB0byBlc3RhYmxpc2ggSXJMQVAgY29ubmVjdGlvbiAqLworCUxNX0xBUF9SRVNFVCwgICAgICAgICAvKiBJckxBUCByZXNldCAqLworCUxNX0lOSVRfRElTQ09OTkVDVCwgICAvKiBMaW5rIE1hbmFnZW1lbnQgaW5pdGlhdGVkIGRpc2Nvbm5lY3QgKi8KKwlMTV9MU0FQX05PVENPTk4sICAgICAgLyogRGF0YSBkZWxpdmVyZWQgb24gdW5jb25uZWN0ZWQgTFNBUCAqLworCUxNX05PTl9SRVNQX0NMSUVOVCwgICAvKiBOb24gcmVzcG9uc2l2ZSBMTS1NVVggY2xpZW50ICovCisJTE1fTk9fQVZBSUxfQ0xJRU5ULCAgIC8qIE5vIGF2YWlsYWJsZSBMTS1NVVggY2xpZW50ICovCisJTE1fQ09OTl9IQUxGX09QRU4sICAgIC8qIENvbm5lY3Rpb24gaXMgaGFsZiBvcGVuICovCisJTE1fQkFEX1NPVVJDRV9BRERSLCAgIC8qIElsbGVnYWwgc291cmNlIGFkZHJlc3MgKGkuZSAweDAwKSAqLworfSBMTV9SRUFTT047CisjZGVmaW5lIExNX1VOS05PV04gMHhmZiAgICAgICAvKiBVbnNwZWNpZmllZCBkaXNjb25uZWN0IHJlYXNvbiAqLworCisvKiBBIGZldyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAodG8gbWFrZSBjb21waWxlciBoYXBweSkgKi8KK3N0cnVjdCBxb3NfaW5mbzsJCS8qIGluIDxuZXQvaXJkYS9xb3MuaD4gKi8KKworLyoKKyAqICBOb3RpZnkgc3RydWN0dXJlIHVzZWQgYmV0d2VlbiB0cmFuc3BvcnQgYW5kIGxpbmsgbWFuYWdlbWVudCBsYXllcnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWludCAoKmRhdGFfaW5kaWNhdGlvbikodm9pZCAqcHJpdiwgdm9pZCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQgKCp1ZGF0YV9pbmRpY2F0aW9uKSh2b2lkICpwcml2LCB2b2lkICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpOworCXZvaWQgKCpjb25uZWN0X2NvbmZpcm0pKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorCQkJCXN0cnVjdCBxb3NfaW5mbyAqcW9zLCBfX3UzMiBtYXhfc2R1X3NpemUsCisJCQkJX191OCBtYXhfaGVhZGVyX3NpemUsIHN0cnVjdCBza19idWZmICpza2IpOworCXZvaWQgKCpjb25uZWN0X2luZGljYXRpb24pKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorCQkJCSAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCBfX3UzMiBtYXhfc2R1X3NpemUsIAorCQkJCSAgIF9fdTggbWF4X2hlYWRlcl9zaXplLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl2b2lkICgqZGlzY29ubmVjdF9pbmRpY2F0aW9uKSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKKwkJCQkgICAgICBMTV9SRUFTT04gcmVhc29uLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKwl2b2lkICgqZmxvd19pbmRpY2F0aW9uKSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCBMT0NBTF9GTE9XIGZsb3cpOworCXZvaWQgKCpzdGF0dXNfaW5kaWNhdGlvbikodm9pZCAqaW5zdGFuY2UsCisJCQkJICBMSU5LX1NUQVRVUyBsaW5rLCBMT0NLX1NUQVRVUyBsb2NrKTsKKwl2b2lkICppbnN0YW5jZTsgLyogTGF5ZXIgaW5zdGFuY2UgcG9pbnRlciAqLworCWNoYXIgbmFtZVsxNl07ICAvKiBOYW1lIG9mIGxheWVyICovCit9IG5vdGlmeV90OworCisjZGVmaW5lIE5PVElGWV9NQVhfTkFNRSAxNgorCisvKiBaZXJvIHRoZSBub3RpZnkgc3RydWN0dXJlICovCit2b2lkIGlyZGFfbm90aWZ5X2luaXQobm90aWZ5X3QgKm5vdGlmeSk7CisKKy8qIExvY2tpbmcgd3JhcHBlciAtIE5vdGUgdGhlIGludmVydGVkIGxvZ2ljIG9uIGlyZGFfbG9jaygpLgorICogVGhvc2UgZnVuY3Rpb24gYmFzaWNhbGx5IHJldHVybiBmYWxzZSBpZiB0aGUgbG9jayBpcyBhbHJlYWR5IGluIHRoZQorICogcG9zaXRpb24geW91IHdhbnQgdG8gc2V0IGl0LiAtIEplYW4gSUkgKi8KKyNkZWZpbmUgaXJkYV9sb2NrKGxvY2spCQkoISB0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkICopIChsb2NrKSkpCisjZGVmaW5lIGlyZGFfdW5sb2NrKGxvY2spCSh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgKHZvaWQgKikgKGxvY2spKSkKKworI2VuZGlmIC8qIElSTU9EX0ggKi8KKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJxdWV1ZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcnF1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1YjBhYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJxdWV1ZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgaXJxdWV1ZS5oCisgKiBWZXJzaW9uOiAgICAgICAwLjMKKyAqIERlc2NyaXB0aW9uOiAgIEdlbmVyYWwgcXVldWUgaW1wbGVtZW50YXRpb24KKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIFR1ZSBKdW4gIDkgMTM6MjY6NTAgMTk5OAorICogTW9kaWZpZWQgYXQ6ICAgVGh1IE9jdCAgNyAxMzoyNToxNiAxOTk5CisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSwgQWFnZSBLdmFsbmVzIDxhYWdlQGNzLnVpdC5ubz4KKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgsIERhZyBCcmF0dGxpCisgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAgCisgKiAgICAgVGhpcyBjb2RlIGlzIHRha2VuIGZyb20gdGhlIFZvcnRleCBPcGVyYXRpbmcgU3lzdGVtIHdyaXR0ZW4gYnkgQWFnZQorICogICAgIEt2YWxuZXMgYW5kIGhhcyBiZWVuIHBvcnRlZCB0byBMaW51eCBhbmQgTGludXgvSVIgYnkgRGFnIEJyYXR0bGkKKyAqCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaWZuZGVmIElSREFfUVVFVUVfSAorI2RlZmluZSBJUkRBX1FVRVVFX0gKKworI2RlZmluZSBOQU1FX1NJWkUgICAgICAzMgorCisvKgorICogSGFzaCB0eXBlcyAoc29tZSBmbGFncyBjYW4gYmUgeG9yZWQpCisgKiBTZWUgY29tbWVudHMgaW4gaXJxdWV1ZS5jIGZvciB3aGljaCBvbmUgdG8gdXNlLi4uCisgKi8KKyNkZWZpbmUgSEJfTk9MT0NLCTAJLyogTm8gY29uY3VyZW50IGFjY2VzcyBwcmV2ZW50aW9uICovCisjZGVmaW5lIEhCX0xPQ0sJCTEJLyogUHJldmVudCBjb25jdXJlbnQgd3JpdGUgd2l0aCBnbG9iYWwgbG9jayAqLworCisvKgorICogSGFzaCBkZWZpbmVzCisgKi8KKyNkZWZpbmUgSEFTSEJJTl9TSVpFICAgOAorI2RlZmluZSBIQVNIQklOX01BU0sgICAweDcKKworI2lmbmRlZiBJUkRBX0FMSUdOIAorI2RlZmluZSBJUkRBX0FMSUdOIF9fYXR0cmlidXRlX18oKGFsaWduZWQpKQorI2VuZGlmCisKKyNkZWZpbmUgUV9OVUxMIHsgTlVMTCwgTlVMTCwgIiIsIDAgfQorCit0eXBlZGVmIHZvaWQgKCpGUkVFX0ZVTkMpKHZvaWQgKmFyZyk7CisKK3N0cnVjdCBpcmRhX3F1ZXVlIHsKKwlzdHJ1Y3QgaXJkYV9xdWV1ZSAqcV9uZXh0OworCXN0cnVjdCBpcmRhX3F1ZXVlICpxX3ByZXY7CisKKwljaGFyICAgcV9uYW1lW05BTUVfU0laRV07CisJbG9uZyAgIHFfaGFzaDsJCQkvKiBNdXN0IGJlIGFibGUgdG8gY2FzdCBhICh2b2lkICopICovCit9OwordHlwZWRlZiBzdHJ1Y3QgaXJkYV9xdWV1ZSBpcmRhX3F1ZXVlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhhc2hiaW5fdCB7CisJX191MzIgICAgICBtYWdpYzsKKwlpbnQgICAgICAgIGhiX3R5cGU7CisJaW50ICAgICAgICBoYl9zaXplOworCXNwaW5sb2NrX3QgaGJfc3BpbmxvY2s7CQkvKiBIQl9MT0NLIC0gQ2FuIGJlIHVzZWQgYnkgdGhlIHVzZXIgKi8KKworCWlyZGFfcXVldWVfdCogaGJfcXVldWVbSEFTSEJJTl9TSVpFXSBJUkRBX0FMSUdOOworCisJaXJkYV9xdWV1ZV90KiBoYl9jdXJyZW50OworfSBoYXNoYmluX3Q7CisKK2hhc2hiaW5fdCAqaGFzaGJpbl9uZXcoaW50IHR5cGUpOworaW50ICAgICAgaGFzaGJpbl9kZWxldGUoaGFzaGJpbl90KiBoYXNoYmluLCBGUkVFX0ZVTkMgZnVuYyk7CitpbnQgICAgICBoYXNoYmluX2NsZWFyKGhhc2hiaW5fdCogaGFzaGJpbiwgRlJFRV9GVU5DIGZyZWVfZnVuYyk7Cit2b2lkICAgICBoYXNoYmluX2luc2VydChoYXNoYmluX3QqIGhhc2hiaW4sIGlyZGFfcXVldWVfdCogZW50cnksIGxvbmcgaGFzaHYsIAorCQkJY29uc3QgY2hhciogbmFtZSk7Cit2b2lkKiAgICBoYXNoYmluX3JlbW92ZShoYXNoYmluX3QqIGhhc2hiaW4sIGxvbmcgaGFzaHYsIGNvbnN0IGNoYXIqIG5hbWUpOwordm9pZCogICAgaGFzaGJpbl9yZW1vdmVfZmlyc3QoaGFzaGJpbl90ICpoYXNoYmluKTsKK3ZvaWQqCSBoYXNoYmluX3JlbW92ZV90aGlzKCBoYXNoYmluX3QqIGhhc2hiaW4sIGlyZGFfcXVldWVfdCogZW50cnkpOwordm9pZCogICAgaGFzaGJpbl9maW5kKGhhc2hiaW5fdCogaGFzaGJpbiwgbG9uZyBoYXNodiwgY29uc3QgY2hhciogbmFtZSk7Cit2b2lkKiAgICBoYXNoYmluX2xvY2tfZmluZChoYXNoYmluX3QqIGhhc2hiaW4sIGxvbmcgaGFzaHYsIGNvbnN0IGNoYXIqIG5hbWUpOwordm9pZCogICAgaGFzaGJpbl9maW5kX25leHQoaGFzaGJpbl90KiBoYXNoYmluLCBsb25nIGhhc2h2LCBjb25zdCBjaGFyKiBuYW1lLAorCQkJICAgdm9pZCAqKiBwbmV4dCk7CitpcmRhX3F1ZXVlX3QgKmhhc2hiaW5fZ2V0X2ZpcnN0KGhhc2hiaW5fdCAqaGFzaGJpbik7CitpcmRhX3F1ZXVlX3QgKmhhc2hiaW5fZ2V0X25leHQoaGFzaGJpbl90ICpoYXNoYmluKTsKKworI2RlZmluZSBIQVNIQklOX0dFVF9TSVpFKGhhc2hiaW4pIGhhc2hiaW4tPmhiX3NpemUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lydHRwLmggYi9pbmNsdWRlL25ldC9pcmRhL2lydHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5OWU1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJ0dHAuaApAQCAtMCwwICsxLDIxMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBpcnR0cC5oCisgKiBWZXJzaW9uOiAgICAgICAxLjAKKyAqIERlc2NyaXB0aW9uOiAgIFRpbnkgVHJhbnNwb3J0IFByb3RvY29sIChUVFApIGRlZmluaXRpb25zCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTdW4gQXVnIDMxIDIwOjE0OjMxIDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFN1biBEZWMgMTIgMTM6MDk6MDcgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJUVFBfSAorI2RlZmluZSBJUlRUUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXAuaD4JCS8qIHN0cnVjdCBsc2FwX2NiICovCisjaW5jbHVkZSA8bmV0L2lyZGEvcW9zLmg+CQkvKiBzdHJ1Y3QgcW9zX2luZm8gKi8KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcnF1ZXVlLmg+CisKKyNkZWZpbmUgVFRQX01BWF9DT05ORUNUSU9OUyAgICBMTV9NQVhfQ09OTkVDVElPTlMKKyNkZWZpbmUgVFRQX0hFQURFUiAgICAgICAgICAgICAxCisjZGVmaW5lIFRUUF9NQVhfSEVBREVSICAgICAgICAgKFRUUF9IRUFERVIgKyBMTVBfTUFYX0hFQURFUikKKyNkZWZpbmUgVFRQX1NBUl9IRUFERVIgICAgICAgICA1CisjZGVmaW5lIFRUUF9QQVJBTUVURVJTICAgICAgICAgMHg4MAorI2RlZmluZSBUVFBfTU9SRSAgICAgICAgICAgICAgIDB4ODAKKworLyogVHJhbnNtaXNzaW9uIHF1ZXVlIHNpemVzICovCisvKiBXb3JzdCBjYXNlIHNjZW5hcmlvLCB0d28gd2luZG93IG9mIGRhdGEgLSBKZWFuIElJICovCisjZGVmaW5lIFRUUF9UWF9NQVhfUVVFVUUJMTQKKy8qIFdlIG5lZWQgdG8ga2VlcCBhdCBsZWFzdCA1IGZyYW1lcyB0byBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gcmVmaWxsCisgKiBhcHByb3ByaWF0ZWx5IHRoZSBMQVAgbGF5ZXIuIExBUCBrZWVwcyBvbmx5IHR3byBidWZmZXJzLCBhbmQgd2UgbmVlZAorICogdG8gaGF2ZSA3IHRvIG1ha2UgYSBmdWxsIHdpbmRvdyAtIEplYW4gSUkgKi8KKyNkZWZpbmUgVFRQX1RYX0xPV19USFJFU0hPTEQJNQorLyogTW9zdCBjbGllbnRzIGFyZSBzeW5jaHJvbm91cyB3aXRoIHJlc3BlY3QgdG8gZmxvdyBjb250cm9sLCBzbyB3ZSBjYW4KKyAqIGtlZXAgYSBsb3cgbnVtYmVyIG9mIFR4IGJ1ZmZlcnMgaW4gVFRQIC0gSmVhbiBJSSAqLworI2RlZmluZSBUVFBfVFhfSElHSF9USFJFU0hPTEQJNworCisvKiBSZWNlaXZlIHF1ZXVlIHNpemVzICovCisvKiBNaW5pbXVtIG9mIGNyZWRpdCB0aGF0IHRoZSBwZWVyIHNob3VsZCBob2xkLgorICogSWYgdGhlIHBlZXIgaGFzIGxlc3MgY3JlZGl0cyB0aGFuIDkgZnJhbWVzLCB3ZSB3aWxsIGV4cGxpY2l0ZWx5IHNlbmQKKyAqIGhpbSBzb21lIGNyZWRpdHMgKHRocm91Z2ggaXJ0dHBfZ2l2ZV9jcmVkaXQoKSBhbmQgYSBzcGVjaWZpYyBmcmFtZSkuCisgKiBOb3RlIHRoYXQgd2hlbiB3ZSBnaXZlIGNyZWRpdHMgaXQncyBsaWtlbHkgdGhhdCBpdCB3b24ndCBiZSBzZW50IGluCisgKiB0aGlzIExBUCB3aW5kb3csIGJ1dCBpbiB0aGUgbmV4dCBvbmUuIFNvLCB3ZSBtYWtlIHN1cmUgdGhhdCB0aGUgcGVlcgorICogaGFzIHNvbWV0aGluZyB0byBzZW5kIHdoaWxlIHdhaXRpbmcgZm9yIGNyZWRpdHMgKG9uZSBMQVAgd2luZG93ID09IDcKKyAqICsgMSBmcmFtZXMgd2hpbGUgaGUgcHJvY2VzcyB0aGUgY3JlZGl0cykuIC0gSmVhbiBJSSAqLworI2RlZmluZSBUVFBfUlhfTUlOX0NSRURJVAk4CisvKiBUaGlzIGlzIHRoZSBkZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIGNyZWRpdHMgaGVsZCBieSB0aGUgcGVlciwgc28gdGhlCisgKiBkZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBoZSBjYW4gc2VuZCB1cyBiZWZvcmUgbmVlZGluZyBmbG93CisgKiBjb250cm9sIGFuc3dlciBmcm9tIHVzICh0aGlzIG1heSBiZSBuZWdvY2lhdGVkIGRpZmZlcmVudGx5IGF0IFRTQVAgc2V0dXApLgorICogV2Ugd2FudCB0byBtaW5pbWlzZSB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIGhhdmUgdG8gZXhwbGljaXRlbHkgc2VuZCBzb21lCisgKiBjcmVkaXQgdG8gdGhlIHBlZXIsIGhvcGluZyB3ZSBjYW4gcGlnZ3liYWNrIGl0IG9uIHRoZSByZXR1cm4gZGF0YS4gSW4KKyAqIHBhcnRpY3VsYXIsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgdXMgdG8gc2VuZCBjcmVkaXQgbW9yZSB0aGFuIG9uY2UKKyAqIHBlciBMQVAgd2luZG93LgorICogTW9yZW92ZXIsIGdpdmluZyBjcmVkaXRzIGhhcyBzb21lIGxhdGVuY3ksIHNvIHdlIG5lZWQgc3RyaWN0bHkgbW9yZSB0aGFuCisgKiBhIExBUCB3aW5kb3csIG90aGVyd2lzZSB3ZSBtYXkgYWxyZWFkeSBoYXZlIGNyZWRpdHMgaW4gb3VyIFR4IHF1ZXVlLgorICogQnV0IG9uIHRoZSBvdGhlciBoYW5kLCB3ZSBkb24ndCB3YW50IHRvIGtlZXAgdG9vIG1hbnkgUnggYnVmZmVyIGhlcmUKKyAqIGJlZm9yZSBzdGFydGluZyB0byBmbG93IGNvbnRyb2wgdGhlIG90aGVyIGVuZCwgc28gbWFrZSBpdCBleGFjdGx5IG9uZQorICogTEFQIHdpbmRvdyArIDEgKyBNSU5fQ1JFRElUUy4gLSBKZWFuIElJICovCisjZGVmaW5lIFRUUF9SWF9ERUZBVUxUX0NSRURJVAkxNgorLyogTWF4aW11bSBudW1iZXIgb2YgY3JlZGl0cyB3ZSBjYW4gYWxsb3cgdGhlIHBlZXIgdG8gaGF2ZSwgYW5kIHRoZXJlZm9yZQorICogbWF4aW11bSBSeCBxdWV1ZSBzaXplLgorICogTm90ZSB0aGF0IHdlIHRyeSB0byBkZWxpdmVyIHBhY2tldHMgdG8gdGhlIGhpZ2hlciBsYXllciBldmVyeSB0aW1lIHdlCisgKiByZWNlaXZlIHNvbWV0aGluZywgc28gaW4gbm9ybWFsIG1vZGUgdGhlIFJ4IHF1ZXVlIHdpbGwgbmV2ZXIgY29udGFpbnMKKyAqIG1vcmUgdGhhbiBvbmUgb3IgdHdvIHBhY2tldHMuIC0gSmVhbiBJSSAqLworI2RlZmluZSBUVFBfUlhfTUFYX0NSRURJVAkyMQorCisvKiBXaGF0IGNsaWVudHMgc2hvdWxkIHVzZSB3aGVuIGNhbGxpbmcgdHRwX29wZW5fdHNhcCgpICovCisjZGVmaW5lIERFRkFVTFRfSU5JVElBTF9DUkVESVQJVFRQX1JYX0RFRkFVTFRfQ1JFRElUCisKKy8qIFNvbWUgcHJpb3JpdGllcyBmb3IgZGlzY29ubmVjdCByZXF1ZXN0cyAqLworI2RlZmluZSBQX05PUk1BTCAgICAwCisjZGVmaW5lIFBfSElHSCAgICAgIDEKKworI2RlZmluZSBUVFBfU0FSX0RJU0FCTEUgMAorI2RlZmluZSBUVFBfU0FSX1VOQk9VTkQgMHhmZmZmZmZmZgorCisvKiBQYXJhbWV0ZXJzICovCisjZGVmaW5lIFRUUF9NQVhfU0RVX1NJWkUgMHgwMQorCisvKgorICogIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCBkYXRhIGFzc29zaWF0ZWQgd2l0aCBvbmUgaW5zdGFuY2Ugb2YgYSBUVFAgCisgKiAgY29ubmVjdGlvbi4KKyAqLworc3RydWN0IHRzYXBfY2IgeworCWlyZGFfcXVldWVfdCBxOyAgICAgICAgICAgIC8qIE11c3QgYmUgZmlyc3QgKi8KKwltYWdpY190IG1hZ2ljOyAgICAgICAgLyogSnVzdCBpbiBjYXNlICovCisKKwlfX3U4IHN0c2FwX3NlbDsgICAgICAgLyogU291cmNlIFRTQVAgKi8KKwlfX3U4IGR0c2FwX3NlbDsgICAgICAgLyogRGVzdGluYXRpb24gVFNBUCAqLworCisJc3RydWN0IGxzYXBfY2IgKmxzYXA7IC8qIENvcnJlc3BvbmRpbmcgTFNBUCB0byB0aGlzIFRTQVAgKi8KKworCV9fdTggY29ubmVjdGVkOyAgICAgICAvKiBUU0FQIGNvbm5lY3RlZCAqLworCSAKKwlfX3U4IGluaXRpYWxfY3JlZGl0OyAgLyogSW5pdGlhbCBjcmVkaXQgdG8gZ2l2ZSBwZWVyICovCisKKyAgICAgICAgaW50IGF2YWlsX2NyZWRpdDsgICAgLyogQXZhaWxhYmxlIGNyZWRpdCB0byByZXR1cm4gdG8gcGVlciAqLworCWludCByZW1vdGVfY3JlZGl0OyAgIC8qIENyZWRpdCBoZWxkIGJ5IHBlZXIgVFRQIGVudGl0eSAqLworCWludCBzZW5kX2NyZWRpdDsgICAgIC8qIENyZWRpdCBoZWxkIGJ5IGxvY2FsIFRUUCBlbnRpdHkgKi8KKwkKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOyAvKiBGcmFtZXMgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOyAvKiBSZWNlaXZlZCBmcmFtZXMgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X2ZyYWdtZW50czsKKwlpbnQgdHhfcXVldWVfbG9jazsKKwlpbnQgcnhfcXVldWVfbG9jazsKKwlzcGlubG9ja190IGxvY2s7CisKKwlub3RpZnlfdCBub3RpZnk7ICAgICAgIC8qIENhbGxiYWNrcyB0byBjbGllbnQgbGF5ZXIgKi8KKworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCB0aW1lcl9saXN0IHRvZG9fdGltZXI7IAorCisJX191MzIgbWF4X3NlZ19zaXplOyAgICAgLyogTWF4IGRhdGEgdGhhdCBmaXQgaW50byBhbiBJckxBUCBmcmFtZSAqLworCV9fdTggIG1heF9oZWFkZXJfc2l6ZTsKKworCWludCAgIHJ4X3NkdV9idXN5OyAgICAgLyogUnhTZHUuYnVzeSAqLworCV9fdTMyIHJ4X3NkdV9zaXplOyAgICAgLyogQ3VycmVudCBzaXplIG9mIGEgcGFydGlhbGx5IHJlY2VpdmVkIGZyYW1lICovCisJX191MzIgcnhfbWF4X3NkdV9zaXplOyAvKiBNYXggcmVjZWl2ZSB1c2VyIGRhdGEgc2l6ZSAqLworCisJaW50IHR4X3NkdV9idXN5OyAgICAgICAvKiBUeFNkdS5idXN5ICovCisJX191MzIgdHhfbWF4X3NkdV9zaXplOyAvKiBNYXggdHJhbnNtaXQgdXNlciBkYXRhIHNpemUgKi8KKworCWludCBjbG9zZV9wZW5kOyAgICAgICAgLyogQ2xvc2UsIGJ1dCBkaXNjb25uZWN0X3BlbmQgKi8KKwl1bnNpZ25lZCBsb25nIGRpc2Nvbm5lY3RfcGVuZDsgLyogRGlzY29ubmVjdCwgYnV0IHN0aWxsIGRhdGEgdG8gc2VuZCAqLworCXN0cnVjdCBza19idWZmICpkaXNjb25uZWN0X3NrYjsKK307CisKK3N0cnVjdCBpcnR0cF9jYiB7CisJbWFnaWNfdCAgICBtYWdpYzsJCisJaGFzaGJpbl90ICp0c2FwczsKK307CisKK2ludCAgaXJ0dHBfaW5pdCh2b2lkKTsKK3ZvaWQgaXJ0dHBfY2xlYW51cCh2b2lkKTsKKworc3RydWN0IHRzYXBfY2IgKmlydHRwX29wZW5fdHNhcChfX3U4IHN0c2FwX3NlbCwgaW50IGNyZWRpdCwgbm90aWZ5X3QgKm5vdGlmeSk7CitpbnQgaXJ0dHBfY2xvc2VfdHNhcChzdHJ1Y3QgdHNhcF9jYiAqc2VsZik7CisKK2ludCBpcnR0cF9kYXRhX3JlcXVlc3Qoc3RydWN0IHRzYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGlydHRwX3VkYXRhX3JlcXVlc3Qoc3RydWN0IHRzYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOworCitpbnQgaXJ0dHBfY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCB0c2FwX2NiICpzZWxmLCBfX3U4IGR0c2FwX3NlbCwgCisJCQkgIF9fdTMyIHNhZGRyLCBfX3UzMiBkYWRkciwKKwkJCSAgc3RydWN0IHFvc19pbmZvICpxb3MsIF9fdTMyIG1heF9zZHVfc2l6ZSwgCisJCQkgIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSk7CitpbnQgaXJ0dHBfY29ubmVjdF9yZXNwb25zZShzdHJ1Y3QgdHNhcF9jYiAqc2VsZiwgX191MzIgbWF4X3NkdV9zaXplLCAKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqdXNlcmRhdGEpOworaW50IGlydHRwX2Rpc2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgdHNhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgaW50IHByaW9yaXR5KTsKK3ZvaWQgaXJ0dHBfZmxvd19yZXF1ZXN0KHN0cnVjdCB0c2FwX2NiICpzZWxmLCBMT0NBTF9GTE9XIGZsb3cpOworc3RydWN0IHRzYXBfY2IgKmlydHRwX2R1cChzdHJ1Y3QgdHNhcF9jYiAqc2VsZiwgdm9pZCAqaW5zdGFuY2UpOworCitzdGF0aWMgX19pbmxpbmUgX191MzIgaXJ0dHBfZ2V0X3NhZGRyKHN0cnVjdCB0c2FwX2NiICpzZWxmKQoreworCXJldHVybiBpcmxtcF9nZXRfc2FkZHIoc2VsZi0+bHNhcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX3UzMiBpcnR0cF9nZXRfZGFkZHIoc3RydWN0IHRzYXBfY2IgKnNlbGYpCit7CisJcmV0dXJuIGlybG1wX2dldF9kYWRkcihzZWxmLT5sc2FwKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fdTMyIGlydHRwX2dldF9tYXhfc2VnX3NpemUoc3RydWN0IHRzYXBfY2IgKnNlbGYpCit7CisJcmV0dXJuIHNlbGYtPm1heF9zZWdfc2l6ZTsKK30KKworLyogQWZ0ZXIgZG9pbmcgYSBpcnR0cF9kdXAoKSwgdGhpcyBnZXQgb25lIG9mIHRoZSB0d28gc29ja2V0IGJhY2sgaW50bworICogYSBzdGF0ZSB3aGVyZSBpdCdzIHdhaXRpbmcgaW5jb21taW5nIGNvbm5lY3Rpb25zLgorICogTm90ZSA6IHRoaXMgY2FuIGJlIHVzZWQgKm9ubHkqIGlmIHRoZSBzb2NrZXQgaXMgbm90IHlldCBjb25uZWN0ZWQKKyAqIChpLmUuIE5PIGlydHRwX2Nvbm5lY3RfcmVzcG9uc2UoKSBkb25lIG9uIHRoaXMgc29ja2V0KS4KKyAqIC0gSmVhbiBJSSAqLworc3RhdGljIGlubGluZSB2b2lkIGlydHRwX2xpc3RlbihzdHJ1Y3QgdHNhcF9jYiAqc2VsZikKK3sKKwlpcmxtcF9saXN0ZW4oc2VsZi0+bHNhcCk7CisJc2VsZi0+ZHRzYXBfc2VsID0gTFNBUF9BTlk7Cit9CisKKy8qIFJldHVybiBUUlVFIGlmIHRoZSBub2RlIGlzIGluIHByaW1hcnkgbW9kZSAoaS5lLiBtYXN0ZXIpCisgKiAtIEplYW4gSUkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlydHRwX2lzX3ByaW1hcnkoc3RydWN0IHRzYXBfY2IgKnNlbGYpCit7CisJaWYgKChzZWxmID09IE5VTEwpIHx8CisJICAgIChzZWxmLT5sc2FwID09IE5VTEwpIHx8CisJICAgIChzZWxmLT5sc2FwLT5sYXAgPT0gTlVMTCkgfHwKKwkgICAgKHNlbGYtPmxzYXAtPmxhcC0+aXJsYXAgPT0gTlVMTCkpCisJCXJldHVybiAtMjsKKwlyZXR1cm4oaXJsYXBfaXNfcHJpbWFyeShzZWxmLT5sc2FwLT5sYXAtPmlybGFwKSk7Cit9CisKKyNlbmRpZiAvKiBJUlRUUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3BhcmFtZXRlcnMuaCBiL2luY2x1ZGUvbmV0L2lyZGEvcGFyYW1ldGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjA1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pcmRhL3BhcmFtZXRlcnMuaApAQCAtMCwwICsxLDEwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgCisgKiBGaWxlbmFtZTogICAgICBwYXJhbWV0ZXJzLmgKKyAqIFZlcnNpb246ICAgICAgIDEuMAorICogRGVzY3JpcHRpb246ICAgQSBtb3JlIGdlbmVyYWwgd2F5IHRvIGhhbmRsZSAocGkscGwscHYpIHBhcmFtZXRlcnMKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBKdW4gIDcgMDg6NDc6MjggMTk5OQorICogTW9kaWZpZWQgYXQ6ICAgU3VuIEphbiAzMCAxNDowNToxNCAyMDAwCisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBEYWcgQnJhdHRsaSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCisgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAgICAgTWljaGVsIETkbnplciA8ZGFlbnplckBkZWJpYW4ub3JnPiwgMTAvMjAwMQorICogICAgIC0gc2ltcGxpZnkgaXJkYV9wdl90IHRvIGF2b2lkIGVuZGlhbm5lc3MgaXNzdWVzCisgKiAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSVJEQV9QQVJBTVNfSAorI2RlZmluZSBJUkRBX1BBUkFNU19ICisKKy8qCisgKiAgVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgdHlwZXMuIEJld2FyZSBub3QgdG8gY2hhbmdlIHRoZSBzZXF1ZW5jZSBzaW5jZQorICogIGl0IGEgZ29vZCByZWFzb24gd2h5IHRoZSBzaXplZCBpbnRlZ2VycyBoYXMgYSB2YWx1ZSBlcXVhbCB0byB0aGVpciBzaXplCisgKi8KK3R5cGVkZWYgZW51bSB7CisJUFZfSU5URUdFUiwgICAgICAvKiBJbnRlZ2VyIG9mIGFueSAocGwpIGxlbmd0aCAqLworCVBWX0lOVF84X0JJVFMsICAgLyogSW50ZWdlciBvZiA4IGJpdHMgaW4gbGVuZ3RoICovCisJUFZfSU5UXzE2X0JJVFMsICAvKiBJbnRlZ2VyIG9mIDE2IGJpdHMgaW4gbGVuZ3RoICovCisJUFZfU1RSSU5HLCAgICAgICAvKiBcMCB0ZXJtaW5hdGVkIHN0cmluZyAqLworCVBWX0lOVF8zMl9CSVRTLCAgLyogSW50ZWdlciBvZiAzMiBiaXRzIGluIGxlbmd0aCAqLworCVBWX09DVF9TRVEsICAgICAgLyogT2N0ZXQgc2VxdWVuY2UgKi8KKwlQVl9OT19WQUxVRSAgICAgIC8qIERvZXMgbm90IGNvbnRhaW4gYW55IHZhbHVlIChwbD0wKSAqLworfSBQVl9UWVBFOworCisvKiBCaXQgNyBvZiB0eXBlIGZpZWxkICovCisjZGVmaW5lIFBWX0JJR19FTkRJQU4gICAgMHg4MCAKKyNkZWZpbmUgUFZfTElUVExFX0VORElBTiAweDAwCisjZGVmaW5lIFBWX01BU0sgICAgICAgICAgMHg3ZiAgIC8qIFRvIG1hc2sgYXdheSBlbmRpYW4gYml0ICovCisKKyNkZWZpbmUgUFZfUFVUIDAKKyNkZWZpbmUgUFZfR0VUIDEKKwordHlwZWRlZiB1bmlvbiB7CisJY2hhciAgICpjOworCV9fdTMyICAgaTsKKwlfX3UzMiAqaXA7Cit9IGlyZGFfcHZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTggcGk7CisJX191OCBwbDsKKwlpcmRhX3B2X3QgcHY7Cit9IGlyZGFfcGFyYW1fdDsKKwordHlwZWRlZiBpbnQgKCpQSV9IQU5ETEVSKSh2b2lkICpzZWxmLCBpcmRhX3BhcmFtX3QgKnBhcmFtLCBpbnQgZ2V0KTsKK3R5cGVkZWYgaW50ICgqUFZfSEFORExFUikodm9pZCAqc2VsZiwgX191OCAqYnVmLCBpbnQgbGVuLCBfX3U4IHBpLAorCQkJICBQVl9UWVBFIHR5cGUsIFBJX0hBTkRMRVIgZnVuYyk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlQSV9IQU5ETEVSIGZ1bmM7ICAvKiBIYW5kbGVyIGZvciB0aGlzIHBhcmFtZXRlciBpZGVudGlmaWVyICovCisJUFZfVFlQRSAgICB0eXBlOyAgLyogRGF0YSB0eXBlIGZvciB0aGlzIHBhcmFtZXRlciAqLworfSBwaV9taW5vcl9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlwaV9taW5vcl9pbmZvX3QgKnBpX21pbm9yX2NhbGxfdGFibGU7CisJaW50IGxlbjsKK30gcGlfbWFqb3JfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCB7CisJcGlfbWFqb3JfaW5mb190ICp0YWJsZXM7CisJaW50ICAgICAgICAgICAgICBsZW47CisJX191OCAgICAgICAgICAgICBwaV9tYXNrOworCWludCAgICAgICAgICAgICAgcGlfbWFqb3Jfb2Zmc2V0OworfSBwaV9wYXJhbV9pbmZvX3Q7CisKK2ludCBpcmRhX3BhcmFtX3BhY2soX191OCAqYnVmLCBjaGFyICpmbXQsIC4uLik7CisKK2ludCBpcmRhX3BhcmFtX2luc2VydCh2b2lkICpzZWxmLCBfX3U4IHBpLCBfX3U4ICpidWYsIGludCBsZW4sIAorCQkgICAgICBwaV9wYXJhbV9pbmZvX3QgKmluZm8pOworaW50IGlyZGFfcGFyYW1fZXh0cmFjdF9hbGwodm9pZCAqc2VsZiwgX191OCAqYnVmLCBpbnQgbGVuLCAKKwkJCSAgIHBpX3BhcmFtX2luZm9fdCAqaW5mbyk7CisKKyNkZWZpbmUgaXJkYV9wYXJhbV9pbnNlcnRfYnl0ZShidWYscGkscHYpIGlyZGFfcGFyYW1fcGFjayhidWYsImJiYiIscGksMSxwdikKKworI2VuZGlmIC8qIElSREFfUEFSQU1TX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9xb3MuaCBiL2luY2x1ZGUvbmV0L2lyZGEvcW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlM2Q2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvcW9zLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgcW9zLmgKKyAqIFZlcnNpb246ICAgICAgIDEuMAorICogRGVzY3JpcHRpb246ICAgUXVhbGl0eSBvZiBTZXJ2aWNlIGRlZmluaXRpb25zCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBGcmkgU2VwIDE5IDIzOjIxOjA5IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFRodSBEZWMgIDIgMTM6NTE6NTQgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKKyAqICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCAKKyAqICAgICBNQSAwMjExMS0xMzA3IFVTQQorICogICAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElSREFfUU9TX0gKKyNkZWZpbmUgSVJEQV9RT1NfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9wYXJhbWV0ZXJzLmg+CisKKyNkZWZpbmUgUElfQkFVRF9SQVRFICAgICAweDAxCisjZGVmaW5lIFBJX01BWF9UVVJOX1RJTUUgMHg4MgorI2RlZmluZSBQSV9EQVRBX1NJWkUgICAgIDB4ODMKKyNkZWZpbmUgUElfV0lORE9XX1NJWkUgICAweDg0CisjZGVmaW5lIFBJX0FERF9CT0ZTICAgICAgMHg4NQorI2RlZmluZSBQSV9NSU5fVFVSTl9USU1FIDB4ODYKKyNkZWZpbmUgUElfTElOS19ESVNDICAgICAweDA4CisKKyNkZWZpbmUgSVJfMTE1MjAwX01BWCAweDNmCisKKy8qIEJhdWQgcmF0ZXMgKGZpcnN0IGJ5dGUpICovCisjZGVmaW5lIElSXzI0MDAgICAgIDB4MDEKKyNkZWZpbmUgSVJfOTYwMCAgICAgMHgwMgorI2RlZmluZSBJUl8xOTIwMCAgICAweDA0CisjZGVmaW5lIElSXzM4NDAwICAgIDB4MDgKKyNkZWZpbmUgSVJfNTc2MDAgICAgMHgxMAorI2RlZmluZSBJUl8xMTUyMDAgICAweDIwCisjZGVmaW5lIElSXzU3NjAwMCAgIDB4NDAKKyNkZWZpbmUgSVJfMTE1MjAwMCAgMHg4MAorCisvKiBCYXVkIHJhdGVzIChzZWNvbmQgYnl0ZSkgKi8KKyNkZWZpbmUgSVJfNDAwMDAwMCAgMHgwMQorI2RlZmluZSBJUl8xNjAwMDAwMCAweDAyCisKKy8qIFF1YWxpdHkgb2YgU2VydmljZSBpbmZvcm1hdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTMyIHZhbHVlOworCV9fdTE2IGJpdHM7IC8qIExTQiBpcyBmaXJzdCBieXRlLCBNU0IgaXMgc2Vjb25kIGJ5dGUgKi8KK30gcW9zX3ZhbHVlX3Q7CisKK3N0cnVjdCBxb3NfaW5mbyB7CisJbWFnaWNfdCBtYWdpYzsKKworCXFvc192YWx1ZV90IGJhdWRfcmF0ZTsgICAgICAgLyogSVJfMTE1MjBPIHwgLi4uICovCisJcW9zX3ZhbHVlX3QgbWF4X3R1cm5fdGltZTsKKwlxb3NfdmFsdWVfdCBkYXRhX3NpemU7CisJcW9zX3ZhbHVlX3Qgd2luZG93X3NpemU7CisJcW9zX3ZhbHVlX3QgYWRkaXRpb25hbF9ib2ZzOworCXFvc192YWx1ZV90IG1pbl90dXJuX3RpbWU7CisJcW9zX3ZhbHVlX3QgbGlua19kaXNjX3RpbWU7CisJCisJcW9zX3ZhbHVlX3QgcG93ZXI7Cit9OworCitleHRlcm4gaW50IHN5c2N0bF9tYXhfYmF1ZF9yYXRlOworZXh0ZXJuIGludCBzeXNjdGxfbWF4X2luYWN0aXZlX3RpbWU7CisKK3ZvaWQgaXJkYV9pbml0X21heF9xb3NfY2FwYWJpbGllcyhzdHJ1Y3QgcW9zX2luZm8gKnFvcyk7Cit2b2lkIGlyZGFfcW9zX2NvbXB1dGVfaW50ZXJzZWN0aW9uKHN0cnVjdCBxb3NfaW5mbyAqLCBzdHJ1Y3QgcW9zX2luZm8gKik7CisKK19fdTMyIGlybGFwX21heF9saW5lX2NhcGFjaXR5KF9fdTMyIHNwZWVkLCBfX3UzMiBtYXhfdHVybl90aW1lKTsKKwordm9pZCBpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKHN0cnVjdCBxb3NfaW5mbyAqcW9zKTsKKworLyogU28gc2ltcGxlLCBob3cgY291bGQgd2Ugbm90IGlubGluZSB0aG9zZSB0d28gPworICogTm90ZSA6IG9uZSBieXRlIGlzIDEwIGJpdHMgaWYgeW91IGluY2x1ZGUgc3RhcnQgYW5kIHN0b3AgYml0cworICogSmVhbiBJSSAqLworI2RlZmluZSBpcmxhcF9taW5fdHVybl90aW1lX2luX2J5dGVzKHNwZWVkLCBtaW5fdHVybl90aW1lKSAoCVwKKwlzcGVlZCAqIG1pbl90dXJuX3RpbWUgLyAxMDAwMDAwMAkJCVwKKykKKyNkZWZpbmUgaXJsYXBfeGJvZnNfaW5fdXNlYyhzcGVlZCwgeGJvZnMpICgJCQlcCisJeGJvZnMgKiAxMDAwMDAwMCAvIHNwZWVkCQkJCVwKKykKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvdGltZXIuaCBiL2luY2x1ZGUvbmV0L2lyZGEvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzVkODg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS90aW1lci5oCkBAIC0wLDAgKzEsMTA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIHRpbWVyLmgKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTYXQgQXVnIDE2IDAwOjU5OjI5IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFRodSBPY3QgIDcgMTI6MjU6MjQgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCisgKiAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKiAgICAgCisgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKyAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAorICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgVElNRVJfSAorI2RlZmluZSBUSU1FUl9ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+ICAvKiBmb3IgSFogKi8KKworI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KKworLyogQSBmZXcgZm9yd2FyZCBkZWNsYXJhdGlvbnMgKHRvIG1ha2UgY29tcGlsZXIgaGFwcHkpICovCitzdHJ1Y3QgaXJsbXBfY2I7CitzdHJ1Y3QgaXJsYXBfY2I7CitzdHJ1Y3QgbHNhcF9jYjsKK3N0cnVjdCBsYXBfY2I7CisKKy8qIAorICogIFRpbWVvdXQgZGVmaW5pdGlvbnMsIHNvbWUgZGVmaW5lZCBpbiBJckxBUCA2LjEzLjUgLSBwLiA5MgorICovCisjZGVmaW5lIFBPTExfVElNRU9VVCAgICAgICAgKDQ1MCpIWi8xMDAwKSAgICAvKiBNdXN0IG5ldmVyIGV4Y2VlZCA1MDAgbXMgKi8KKyNkZWZpbmUgRklOQUxfVElNRU9VVCAgICAgICAoNTAwKkhaLzEwMDApICAgIC8qIE11c3QgbmV2ZXIgZXhjZWVkIDUwMCBtcyAqLworCisvKiAKKyAqICBOb3JtYWxseSB0d2ljZSBvZiBwLXRpbWVyLiBOb3RlIDMsIElyTEFQIDYuMy4xMS4yIC0gcC4gNjAgc3VnZ2VzdHMKKyAqICBhdCBsZWFzdCB0d2ljZSBkdXJhdGlvbiBvZiB0aGUgUC10aW1lci4KKyAqLworI2RlZmluZSBXRF9USU1FT1VUICAgICAgICAgIChQT0xMX1RJTUVPVVQqMikKKworI2RlZmluZSBNRURJQUJVU1lfVElNRU9VVCAgICg1MDAqSFovMTAwMCkgICAgLyogNTAwIG1zZWMgKi8KKyNkZWZpbmUgU01BTExCVVNZX1RJTUVPVVQgICAoMTAwKkhaLzEwMDApICAgIC8qIDEwMCBtc2VjIC0gSXJMQVAgNi4xMy40ICovCisKKy8qCisgKiAgU2xvdCB0aW1lciBtdXN0IG5ldmVyIGV4Y2VlZCA4NSBtcywgYW5kIG11c3QgYWx3YXlzIGJlIGF0IGxlYXN0IDI1IG1zLCAKKyAqICBzdWdnZXN0ZWQgdG8gIDc1LTg1IG1zZWMgYnkgSXJEQSBsaXRlLiBUaGlzIGRvZXNuJ3Qgd29yayB3aXRoIGEgbG90IG9mCisgKiAgZGV2aWNlcywgYW5kIG90aGVyIHN0YWNrZXMgdXNlcyBhIGxvdCBtb3JlLCBzbyBpdCdzIGJlc3Qgd2UgZG8gaXQgYXMgd2VsbAorICogIChOb3RlIDogdGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQgc3lzY3RsIG92ZXJpZGVzIGl0IC0gSmVhbiBJSSkKKyAqLworI2RlZmluZSBTTE9UX1RJTUVPVVQgICAgICAgICAgICAoOTAqSFovMTAwMCkKKworLyogCisgKiAgVGhlIGxhdGVzdCBkaXNjb3ZlcnkgZnJhbWUgKFhJRCkgaXMgbG9uZ2VyIGR1ZSB0byB0aGUgZXh0cmEgZGlzY292ZXJ5CisgKiAgaW5mb3JtYXRpb24gKGhpbnRzLCBkZXZpY2UgbmFtZS4uLikuIFRoaXMgaXMgaXRzIGV4dHJhIGxlbmd0aC4KKyAqICBXZSB1c2UgdGhhdCB3aGVuIHNldHRpbmcgdGhlIHF1ZXJ5IHRpbWVvdXQuIEplYW4gSUkKKyAqLworI2RlZmluZSBYSURFWFRSQV9USU1FT1VUICAgICAgICAoMzQqSFovMTAwMCkgIC8qIDM0IG1zZWMgKi8KKworI2RlZmluZSBXQVRDSERPR19USU1FT1VUICAgICAgICAoMjAqSFopICAgICAgIC8qIDIwIHNlYyAqLworCit0eXBlZGVmIHZvaWQgKCpUSU1FUl9DQUxMQkFDSykodm9pZCAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIGlyZGFfc3RhcnRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnB0aW1lciwgaW50IHRpbWVvdXQsIAorCQkJCSAgICB2b2lkKiBkYXRhLCBUSU1FUl9DQUxMQkFDSyBjYWxsYmFjaykKK3sKKwlwdGltZXItPmZ1bmN0aW9uID0gKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKSBjYWxsYmFjazsKKwlwdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGF0YTsKKwkKKwkvKiBTZXQgbmV3IHZhbHVlIGZvciB0aW1lciAodXBkYXRlIG9yIGFkZCB0aW1lcikuCisJICogV2UgdXNlIG1vZF90aW1lcigpIGJlY2F1c2UgaXQncyBtb3JlIGVmZmljaWVudCBhbmQgYWxzbworCSAqIHNhZmVyIHdpdGggcmVzcGVjdCB0byByYWNlIGNvbmRpdGlvbnMgLSBKZWFuIElJICovCisJbW9kX3RpbWVyKHB0aW1lciwgamlmZmllcyArIHRpbWVvdXQpOworfQorCisKK3ZvaWQgaXJsYXBfc3RhcnRfc2xvdF90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KTsKK3ZvaWQgaXJsYXBfc3RhcnRfcXVlcnlfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgUywgaW50IHMpOwordm9pZCBpcmxhcF9zdGFydF9maW5hbF90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KTsKK3ZvaWQgaXJsYXBfc3RhcnRfd2RfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCk7Cit2b2lkIGlybGFwX3N0YXJ0X2JhY2tvZmZfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCk7CisKK3ZvaWQgaXJsYXBfc3RhcnRfbWJ1c3lfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCk7Cit2b2lkIGlybGFwX3N0b3BfbWJ1c3lfdGltZXIoc3RydWN0IGlybGFwX2NiICopOworCit2b2lkIGlybG1wX3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHN0cnVjdCBsc2FwX2NiICosIGludCB0aW1lb3V0KTsKK3ZvaWQgaXJsbXBfc3RhcnRfZGlzY292ZXJ5X3RpbWVyKHN0cnVjdCBpcmxtcF9jYiAqLCBpbnQgdGltZW91dCk7Cit2b2lkIGlybG1wX3N0YXJ0X2lkbGVfdGltZXIoc3RydWN0IGxhcF9jYiAqLCBpbnQgdGltZW91dCk7Cit2b2lkIGlybG1wX3N0b3BfaWRsZV90aW1lcihzdHJ1Y3QgbGFwX2NiICpzZWxmKTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oIGIvaW5jbHVkZS9uZXQvaXJkYS93cmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NjhiMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIAorICogRmlsZW5hbWU6ICAgICAgd3JhcHBlci5oCisgKiBWZXJzaW9uOiAgICAgICAxLjIKKyAqIERlc2NyaXB0aW9uOiAgIElyREEgU0lSIGFzeW5jIHdyYXBwZXIgbGF5ZXIKKyAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KKyAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KKyAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBBdWcgIDQgMjA6NDA6NTMgMTk5NworICogTW9kaWZpZWQgYXQ6ICAgVHVlIEphbiAxMSAxMjozNzoyOSAyMDAwCisgKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiAKKyAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKKyAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFdSQVBQRVJfSAorI2RlZmluZSBXUkFQUEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPgkvKiBpb2J1ZmZfdCAqLworCisjZGVmaW5lIEJPRiAgMHhjMCAvKiBCZWdpbm5pbmcgb2YgZnJhbWUgKi8KKyNkZWZpbmUgWEJPRiAweGZmCisjZGVmaW5lIEVPRiAgMHhjMSAvKiBFbmQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgQ0UgICAweDdkIC8qIENvbnRyb2wgZXNjYXBlICovCisKKyNkZWZpbmUgU1RBIEJPRiAgLyogU3RhcnQgZmxhZyAqLworI2RlZmluZSBTVE8gRU9GICAvKiBFbmQgZmxhZyAqLworCisjZGVmaW5lIElSREFfVFJBTlMgMHgyMCAgICAvKiBBc3luY2hyb25vdXMgdHJhbnNwYXJlbmN5IG1vZGlmaWVyICovICAgICAgIAorCisvKiBTdGF0ZXMgZm9yIHJlY2V2aW5nIGEgZnJhbWUgaW4gYXN5bmMgbW9kZSAqLworZW51bSB7CisJT1VUU0lERV9GUkFNRSwgCisJQkVHSU5fRlJBTUUsIAorCUxJTktfRVNDQVBFLCAKKwlJTlNJREVfRlJBTUUKK307CisKKy8qIFByb3RvIGRlZmluaXRpb25zICovCitpbnQgYXN5bmNfd3JhcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191OCAqdHhfYnVmZiwgaW50IGJ1ZmZzaXplKTsKK3ZvaWQgYXN5bmNfdW53cmFwX2NoYXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzLAorCQkgICAgICAgaW9idWZmX3QgKmJ1ZiwgX191OCBieXRlKTsKKworI2VuZGlmCg==