ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBiMDM0MzMxLi5jMDU4Y2M0IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTEgQEAKIENoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMDoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDEzIFNlcCAyMDAzOgorICB2YXJpb3VzIGNoYW5nZXMgdG8gVkNNQTkgYm9hcmQgc3BlY2lmaWMgZmlsZXMKKworKiBBZGQgSTJDIHN1cHBvcnQgZm9yIE1HVDUxMDAgLyBNUEM1MjAwCisKICogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDExIFNlcCAyMDAzOgogICBDaGFuZ2VkIGRlZmF1bHQgbWVtb3J5IG9wdGlvbiBvbiBNUEM4MjY2QURTIHRvIE5PVCBiZSBQYWdlIEJhc2VkCiAgIEludGVybGVhdmUsIHNpbmNlIHRoaXMgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSBzdGFuZGFyZApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDA1MDNjY2IuLmU0MzFjMjkgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTIwMyw2ICsyMDMsNyBAQAogLSBib2FyZC9tcGwvY29tbW9uCUNvbW1vbiBmaWxlcyBmb3IgTVBMIGJvYXJkcwogLSBib2FyZC9tcGwvcGlwNDA1CUZpbGVzIHNwZWNpZmljIHRvIFBJUDQwNSAgICAgYm9hcmRzCiAtIGJvYXJkL21wbC9taXA0MDUJRmlsZXMgc3BlY2lmaWMgdG8gTUlQNDA1ICAgICBib2FyZHMKKy0gYm9hcmQvbXBsL3ZjbWE5CUZpbGVzIHNwZWNpZmljIHRvIFZDTUE5ICAgICAgYm9hcmRzCiAtIGJvYXJkL211c2Vua2kJRmlsZXMgc3BlY2lmaWMgdG8gTVVTRUtOSSAgICBib2FyZHMKIC0gYm9hcmQvbXZzMQlGaWxlcyBzcGVjaWZpYyB0byBNVlMxICAgICAgIGJvYXJkcwogLSBib2FyZC9ueDgyMyAgIEZpbGVzIHNwZWNpZmljIHRvIE5YODIzICAgICAgYm9hcmRzCkBAIC0zNjMsNyArMzY0LDcgQEAKIAkJQ09ORklHX0lNUEE3LCAgICAgICBDT05GSUdfTEFSVCwgICAgICAgQ09ORklHX0xVQkJPQ0ssCiAJCUNPTkZJR19JTk5PVkFUT1JPTUFQMTUxMCwJQ09ORklHX0lOTk9WQVRPUk9NQVAxNjEwCiAJCUNPTkZJR19TSEFOTk9OLCAgICAgQ09ORklHX1NNREsyNDAwLCAgIENPTkZJR19TTURLMjQxMCwKLQkJQ09ORklHX1RSQUIsCSAgICBDT05GSUdfQVQ5MVJNOTIwMERLCisJCUNPTkZJR19UUkFCLAkgICAgQ09ORklHX1ZDTUE5LCAgICAgIENPTkZJR19BVDkxUk05MjAwREsKIAogCiAtIENQVSBNb2R1bGUgVHlwZTogKGlmIENPTkZJR19DT0dFTlQgaXMgZGVmaW5lZCkKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC92Y21hOS9jbWRfdmNtYTkuYyBiL2JvYXJkL21wbC92Y21hOS9jbWRfdmNtYTkuYwppbmRleCAzMmZhMzM0Li4zYjA0NTM1IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvdmNtYTkvY21kX3ZjbWE5LmMKKysrIGIvYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCkBAIC00MSw5ICs0MSwxMiBAQAogI2VuZGlmCiAKIGV4dGVybiB2b2lkIHByaW50X3ZjbWE5X2luZm8odm9pZCk7Ci1leHRlcm4gaW50IHZjbWE5X2NhbnRlc3Qodm9pZCk7CitleHRlcm4gaW50IHZjbWE5X2NhbnRlc3QoaW50KTsKIGV4dGVybiBpbnQgdmNtYTlfbmFuZHRlc3Qodm9pZCk7Ci1leHRlcm4gaW50IHZjbWE5X2RhY3Rlc3Qodm9pZCk7CitleHRlcm4gaW50IHZjbWE5X25hbmRlcmFzZSh2b2lkKTsKK2V4dGVybiBpbnQgdmNtYTlfbmFuZHJlYWQodWxvbmcpOworZXh0ZXJuIGludCB2Y21hOV9uYW5kd3JpdGUodWxvbmcpOworZXh0ZXJuIGludCB2Y21hOV9kYWN0ZXN0KGludCk7CiBleHRlcm4gaW50IGRvX21wbGNvbW1vbihjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEyNiwxOCArMTI5LDUzIEBACiAjZW5kaWYKICNpZiAwCiAJaWYgKHN0cmNtcChhcmd2WzFdLCAiY2FudGVzdCIpID09IDApIHsKLQkJdmNtYTlfY2FudGVzdCgpOworCQlpZiAoYXJnYyA+PSAzKQorCQkJdmNtYTlfY2FudGVzdChzdHJjbXAoYXJndlsyXSwgInMiKSA/IDAgOiAxKTsKKwkJZWxzZQorCQkJdmNtYTlfY2FudGVzdCgwKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChzdHJjbXAoYXJndlsxXSwgIm5hbmR0ZXN0IikgPT0gMCkgewogCQl2Y21hOV9uYW5kdGVzdCgpOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKHN0cmNtcChhcmd2WzFdLCAibmFuZGVyYXNlIikgPT0gMCkgeworCQl2Y21hOV9uYW5kZXJhc2UoKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChzdHJjbXAoYXJndlsxXSwgIm5hbmRyZWFkIikgPT0gMCkgeworCQl1bG9uZyBvZmZzZXQgPSAwOworCisJCWlmIChhcmdjID49IDMpCisJCQlvZmZzZXQgPSBzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxNik7CisKKwkJdmNtYTlfbmFuZHJlYWQob2Zmc2V0KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChzdHJjbXAoYXJndlsxXSwgIm5hbmR3cml0ZSIpID09IDApIHsKKwkJdWxvbmcgb2Zmc2V0ID0gMDsKKworCQlpZiAoYXJnYyA+PSAzKQorCQkJb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpOworCisJCXZjbWE5X25hbmR3cml0ZShvZmZzZXQpOworCQlyZXR1cm4gMDsKKwl9CiAJaWYgKHN0cmNtcChhcmd2WzFdLCAiZGFjdGVzdCIpID09IDApIHsKLQkJdmNtYTlfZGFjdGVzdCgpOworCQlpZiAoYXJnYyA+PSAzKQorCQkJdmNtYTlfZGFjdGVzdChzdHJjbXAoYXJndlsyXSwgInMiKSA/IDAgOiAxKTsKKwkJZWxzZQorCQl2Y21hOV9kYWN0ZXN0KDApOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKIAogCXJldHVybiAoZG9fbXBsY29tbW9uKGNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KSk7CiB9CisKK1VfQk9PVF9DTUQoCisJdmNtYTksIDYsIDEsIGRvX3ZjbWE5LAorCSJ2Y21hOSAgIC0gVkNNQTkgc3BlY2lmaWMgY29tbWFuZHNcbiIsCisJImZsYXNoIG1lbSBbU3JjQWRkcl1cbiAgICAtIHVwZGF0ZXMgVS1Cb290IHdpdGggaW1hZ2UgaW4gbWVtb3J5XG4iCispOworCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvdmNtYTkvY29uZmlnLm1rIGIvYm9hcmQvbXBsL3ZjbWE5L2NvbmZpZy5tawppbmRleCA5NWQ2OWNjLi45NDJkNDJlIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvdmNtYTkvY29uZmlnLm1rCisrKyBiL2JvYXJkL21wbC92Y21hOS9jb25maWcubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDIsIDIwMDMKICMgRGF2aWQgTXVlbGxlciwgRUxTT0ZUIEFHLCA8ZC5tdWVsbGVyQGVsc29mdC5jaD4KICMKICMgTVBMIFZDTUE5IGJvYXJkIHdpdGggUzNDMjQxMFggKEFSTTkyMFQpIGNwdQpAQCAtOCwxNyArOCwxNyBAQAogIwogCiAjCi0jIE1QTCBWQ01BOSBoYXMgMSBiYW5rIG9mIDY0IE1CIERSQU0KLSMKLSMgMzAwMCcwMDAwIHRvIDM0MDAnMDAwMAorIyBNUEwgVkNNQTkgaGFzIDEgYmFuayBvZiBtaW5pbWFsIDE2IE1CIERSQU0KKyMgZnJvbSAweDMwMDAwMDAwCiAjCiAjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCAzMDAwJzgwMDAsIGVudHJ5IDMwMDAnODAwMAotIyBvcHRpb25hbGx5IHdpdGggYSByYW1kaXNrIGF0IDMwODAnMDAwMAorIyBvcHRpb25hbGx5IHdpdGggYSByYW1kaXNrIGF0IDMwNDAnMDAwMAogIwotIyB3ZSBsb2FkIG91cnNlbGYgdG8gMzNGOCcwMDAwCisjIHdlIGxvYWQgb3Vyc2VsZiB0byAzMEY4JzAwMDAKICMKLSMgZG93bmxvYWQgYXJlYSBpcyAzMzAwJzAwMDAKKyMgZG93bmxvYWQgYXJlYSBpcyAzMDgwJzAwMDAKICMKIAogCisjVEVYVF9CQVNFID0gMHgzMEY4MDAwMAogVEVYVF9CQVNFID0gMHgzM0Y4MDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3ZjbWE5L21lbXNldHVwLlMgYi9ib2FyZC9tcGwvdmNtYTkvbWVtc2V0dXAuUwppbmRleCA3YjQxOTNkLi5hYjY1OTAxIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvdmNtYTkvbWVtc2V0dXAuUworKysgYi9ib2FyZC9tcGwvdmNtYTkvbWVtc2V0dXAuUwpAQCAtMzQsNyArMzQsOSBAQAogCiAvKiBzb21lIHBhcmFtZXRlcnMgZm9yIHRoZSBib2FyZCAqLwogCi0jZGVmaW5lIEJXU0NPTgkweDQ4MDAwMDAwCisjZGVmaW5lIEJXU0NPTgkJMHg0ODAwMDAwMAorI2RlZmluZSBQTERfQkFTRQkweDJDMDAwMDAwCisjZGVmaW5lIFNEUkFNX1JFRwkweDJDMDAwMTA2CiAKIC8qIEJXU0NPTiAqLwogI2RlZmluZSBEVzgJCSAJKDB4MCkKQEAgLTQzLDYgKzQ1LDkgQEAKICNkZWZpbmUgV0FJVAkJIAkoMHgxPDwyKQogI2RlZmluZSBVQkxCCQkgCSgweDE8PDMpCiAKKy8qIEJBTktTSVpFICovCisjZGVmaW5lIEJVUlNUX0VOCQkoMHgxPDw3KQorCiAjZGVmaW5lIEIxX0JXU0NPTgkgIAkoRFcxNikKICNkZWZpbmUgQjJfQldTQ09OCSAgCShEVzMyKQogI2RlZmluZSBCM19CV1NDT04JICAJKERXMzIpCkBAIC0xMzAsMjQgKzEzNSwzOSBAQAogCS8qIG1lbW9yeSBjb250cm9sIGNvbmZpZ3VyYXRpb24gKi8KIAkvKiBtYWtlIHIwIHJlbGF0aXZlIHRoZSBjdXJyZW50IGxvY2F0aW9uIHNvIHRoYXQgaXQgKi8KIAkvKiByZWFkcyBTTVJEQVRBIG91dCBvZiBGTEFTSCByYXRoZXIgdGhhbiBtZW1vcnkgISAqLwotCWxkciAgICAgcjAsID1TTVJEQVRBCisJbGRyICAgICByMCwgPUNTREFUQQogCWxkcglyMSwgX1RFWFRfQkFTRQogCXN1YglyMCwgcjAsIHIxCiAJbGRyCXIxLCA9QldTQ09OCS8qIEJ1cyBXaWR0aCBTdGF0dXMgQ29udHJvbGxlciAqLwotCWFkZCAgICAgcjIsIHIwLCAjMTMqNAorCWFkZCAgICAgcjIsIHIwLCAjQ1NEQVRBX0VORC1DU0RBVEEKIDA6CiAJbGRyICAgICByMywgW3IwXSwgIzQKIAlzdHIgICAgIHIzLCBbcjFdLCAjNAogCWNtcCAgICAgcjIsIHIwCiAJYm5lICAgICAwYgogCisJLyogUExEIGFjY2VzcyBpcyBub3cgcG9zc2libGUgKi8KKwkvKiByMCA9PSBTRFJBTURBVEEgKi8KKwkvKiByMSA9PSBTRFJBTSBjb250cm9sbGVyIHJlZ3MgKi8KKwlsZHIJcjIsID1QTERfQkFTRQorCWxkcmIJcjMsIFtyMiwgI1NEUkFNX1JFRy1QTERfQkFTRV0KKwltb3YJcjQsICNTRFJBTURBVEExX0VORC1TRFJBTURBVEEKKwkvKiBjYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBwb2ludCAqLworCW1sYQlyMCwgcjMsIHI0LCByMCAKKwlhZGQgICAgIHIyLCByMCwgcjQKKzA6CisJbGRyICAgICByMywgW3IwXSwgIzQKKwlzdHIgICAgIHIzLCBbcjFdLCAjNAorCWNtcCAgICAgcjIsIHIwCisJYm5lICAgICAwYgorCQogCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSBub3cgKi8KIAltb3YJcGMsIGxyCiAKIAkubHRvcmcKIC8qIHRoZSBsaXRlcmFsIHBvb2xzIG9yaWdpbiAqLwogCi1TTVJEQVRBOgorQ1NEQVRBOgogICAgIC53b3JkICgwKyhCMV9CV1NDT048PDQpKyhCMl9CV1NDT048PDgpKyhCM19CV1NDT048PDEyKSsoQjRfQldTQ09OPDwxNikrKEI1X0JXU0NPTjw8MjApKyhCNl9CV1NDT048PDI0KSsoQjdfQldTQ09OPDwyOCkpCiAgICAgLndvcmQgKChCMF9UYWNzPDwxMykrKEIwX1Rjb3M8PDExKSsoQjBfVGFjYzw8OCkrKEIwX1Rjb2g8PDYpKyhCMF9UYWg8PDQpKyhCMF9UYWNwPDwyKSsoQjBfUE1DKSkKICAgICAud29yZCAoKEIxX1RhY3M8PDEzKSsoQjFfVGNvczw8MTEpKyhCMV9UYWNjPDw4KSsoQjFfVGNvaDw8NikrKEIxX1RhaDw8NCkrKEIxX1RhY3A8PDIpKyhCMV9QTUMpKQpAQCAtMTU1LDkgKzE3NSwzOCBAQAogICAgIC53b3JkICgoQjNfVGFjczw8MTMpKyhCM19UY29zPDwxMSkrKEIzX1RhY2M8PDgpKyhCM19UY29oPDw2KSsoQjNfVGFoPDw0KSsoQjNfVGFjcDw8MikrKEIzX1BNQykpCiAgICAgLndvcmQgKChCNF9UYWNzPDwxMykrKEI0X1Rjb3M8PDExKSsoQjRfVGFjYzw8OCkrKEI0X1Rjb2g8PDYpKyhCNF9UYWg8PDQpKyhCNF9UYWNwPDwyKSsoQjRfUE1DKSkKICAgICAud29yZCAoKEI1X1RhY3M8PDEzKSsoQjVfVGNvczw8MTEpKyhCNV9UYWNjPDw4KSsoQjVfVGNvaDw8NikrKEI1X1RhaDw8NCkrKEI1X1RhY3A8PDIpKyhCNV9QTUMpKQorQ1NEQVRBX0VORDoKKworU0RSQU1EQVRBOgorLyogNE14OHg0ICovCiAgICAgLndvcmQgKChCNl9NVDw8MTUpKyhCNl9UcmNkPDwyKSsoQjZfU0NBTikpCiAgICAgLndvcmQgKChCN19NVDw8MTUpKyhCN19UcmNkPDwyKSsoQjdfU0NBTikpCiAgICAgLndvcmQgKChSRUZFTjw8MjMpKyhUUkVGTUQ8PDIyKSsoVHJwPDwyMCkrKFRyYzw8MTgpKyhUY2hyPDwxNikrUkVGQ05UKQotICAgIC53b3JkIDB4MzIKKyAgICAud29yZCAweDMyICsgQlVSU1RfRU4KKyAgICAud29yZCAweDMwCisgICAgLndvcmQgMHgzMAorU0RSQU1EQVRBMV9FTkQ6CisKKy8qIDhNeDh4NCAobm90IGltcGxlbWVudGVkIHlldCkgKi8KKyAgICAud29yZCAoKEI2X01UPDwxNSkrKEI2X1RyY2Q8PDIpKyhCNl9TQ0FOKSkKKyAgICAud29yZCAoKEI3X01UPDwxNSkrKEI3X1RyY2Q8PDIpKyhCN19TQ0FOKSkKKyAgICAud29yZCAoKFJFRkVOPDwyMykrKFRSRUZNRDw8MjIpKyhUcnA8PDIwKSsoVHJjPDwxOCkrKFRjaHI8PDE2KStSRUZDTlQpCisgICAgLndvcmQgMHgzMiArIEJVUlNUX0VOCisgICAgLndvcmQgMHgzMAorICAgIC53b3JkIDB4MzAKKyAgICAKKy8qIDJNeDh4NCAobm90IGltcGxlbWVudGVkIHlldCkgKi8KKyAgICAud29yZCAoKEI2X01UPDwxNSkrKEI2X1RyY2Q8PDIpKyhCNl9TQ0FOKSkKKyAgICAud29yZCAoKEI3X01UPDwxNSkrKEI3X1RyY2Q8PDIpKyhCN19TQ0FOKSkKKyAgICAud29yZCAoKFJFRkVOPDwyMykrKFRSRUZNRDw8MjIpKyhUcnA8PDIwKSsoVHJjPDwxOCkrKFRjaHI8PDE2KStSRUZDTlQpCisgICAgLndvcmQgMHgzMiArIEJVUlNUX0VOCisgICAgLndvcmQgMHgzMAorICAgIC53b3JkIDB4MzAKKyAgICAKKy8qIDRNeDh4MiAobm90IGltcGxlbWVudGVkIHlldCkgKi8KKyAgICAud29yZCAoKEI2X01UPDwxNSkrKEI2X1RyY2Q8PDIpKyhCNl9TQ0FOKSkKKyAgICAud29yZCAoKEI3X01UPDwxNSkrKEI3X1RyY2Q8PDIpKyhCN19TQ0FOKSkKKyAgICAud29yZCAoKFJFRkVOPDwyMykrKFRSRUZNRDw8MjIpKyhUcnA8PDIwKSsoVHJjPDwxOCkrKFRjaHI8PDE2KStSRUZDTlQpCisgICAgLndvcmQgMHgzMiArIEJVUlNUX0VOCiAgICAgLndvcmQgMHgzMAogICAgIC53b3JkIDB4MzAKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC92Y21hOS92Y21hOS5jIGIvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmMKaW5kZXggMzU5ZTU2NS4uMzNjZWMwMiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmMKKysrIGIvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmMKQEAgLTEzMCwxNiArMTMwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGRyYW1faW5pdCh2b2lkKQotewotCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCi0JZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOwotCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIE5BTkQgZmxhc2ggaW5pdGlhbGl6YXRpb24uCiAgKi8KQEAgLTE2Miw5ICsxNTIsMTYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIE5GX0luaXQodm9pZCkKIHsKKyNpZiAwIC8qIGEgbGl0dGxlIGJpdCB0b28gb3B0aW1pc3RpYyAqLwogI2RlZmluZSBUQUNMUyAgIDAKICNkZWZpbmUgVFdSUEgwICAzCiAjZGVmaW5lIFRXUlBIMSAgMAorI2Vsc2UKKyNkZWZpbmUgVEFDTFMgICAwCisjZGVmaW5lIFRXUlBIMCAgNAorI2RlZmluZSBUV1JQSDEgIDIKKyNlbmRpZgorCiAgICAgTkZfQ29uZigoMTw8MTUpfCgwPDwxNCl8KDA8PDEzKXwoMTw8MTIpfCgxPDwxMSl8KFRBQ0xTPDw4KXwoVFdSUEgwPDw0KXwoVFdSUEgxPDwwKSk7CiAgICAgLypuYW5kLT5ORkNPTkYgPSAoMTw8MTUpfCgxPDwxNCl8KDE8PDEzKXwoMTw8MTIpfCgxPDwxMSl8KFRBQ0xTPDw4KXwoVFdSUEgwPDw0KXwoVFdSUEgxPDwwKTsgKi8KICAgICAvKiAxICAxICAgIDEgICAgIDEsICAgMSAgICAgIHh4eCwgIHIgeHh4LCAgIHIgeHh4ICovCkBAIC0xNzcsMTUgKzE3NCwxMiBAQAogbmFuZF9pbml0KHZvaWQpCiB7CiAJUzNDMjQxMF9OQU5EICogY29uc3QgbmFuZCA9IFMzQzI0MTBfR2V0QmFzZV9OQU5EKCk7Ci0JdW5zaWduZWQgdG90bGVuOwogCiAJTkZfSW5pdCgpOwogI2lmZGVmIERFQlVHCiAJcHJpbnRmKCJOQU5EIGZsYXNoIHByb2JpbmcgYXQgMHglLjhsWFxuIiwgKHVsb25nKW5hbmQpOwogI2VuZGlmCi0JdG90bGVuID0gbmFuZF9wcm9iZSgodWxvbmcpbmFuZCkgPj4gMjA7Ci0KLQlwcmludGYgKCIlNGx1IE1CXG4iLCB0b3RsZW4gPj4gMjApOworCXByaW50ZiAoIiU0bHUgTUJcbiIsIG5hbmRfcHJvYmUoKHVsb25nKW5hbmQpID4+IDIwKTsKIH0KICNlbmRpZgogCkBAIC0xOTMsMjkgKzE4Nyw0MCBAQAogICogR2V0IHNvbWUgQm9hcmQvUExEIEluZm8KICAqLwogCi1zdGF0aWMgdWNoYXIgR2V0X1BMRF9JRCh2b2lkKQorc3RhdGljIHU4IEdldF9QTERfSUQodm9pZCkKIHsKLQlyZXR1cm4oKih2b2xhdGlsZSB1Y2hhciAqKVBMRF9JRF9SRUcpOworCVZDTUE5X1BMRCAqIGNvbnN0IHBsZCA9IFZDTUE5X0dldEJhc2VfUExEKCk7CisJCisJcmV0dXJuKHBsZC0+SUQpOwogfQogCi1zdGF0aWMgdWNoYXIgR2V0X1BMRF9CT0FSRCh2b2lkKQorc3RhdGljIHU4IEdldF9QTERfQk9BUkQodm9pZCkKIHsKLQlyZXR1cm4oKih2b2xhdGlsZSB1Y2hhciAqKVBMRF9CT0FSRF9SRUcpOworCVZDTUE5X1BMRCAqIGNvbnN0IHBsZCA9IFZDTUE5X0dldEJhc2VfUExEKCk7CisJCisJcmV0dXJuKHBsZC0+Qk9BUkQpOwogfQogCi1zdGF0aWMgdWNoYXIgR2V0X1BMRF9WZXJzaW9uKHZvaWQpCitzdGF0aWMgdTggR2V0X1BMRF9TRFJBTSh2b2lkKQoreworCVZDTUE5X1BMRCAqIGNvbnN0IHBsZCA9IFZDTUE5X0dldEJhc2VfUExEKCk7CisJCisJcmV0dXJuKHBsZC0+U0RSQU0pOworfQorCitzdGF0aWMgdTggR2V0X1BMRF9WZXJzaW9uKHZvaWQpCiB7CiAJcmV0dXJuKChHZXRfUExEX0lEKCkgPj4gNCkgJiAweDBGKTsKIH0KIAotc3RhdGljIHVjaGFyIEdldF9QTERfUmV2aXNpb24odm9pZCkKK3N0YXRpYyB1OCBHZXRfUExEX1JldmlzaW9uKHZvaWQpCiB7CiAJcmV0dXJuKEdldF9QTERfSUQoKSAmIDB4MEYpOwogfQogCiBzdGF0aWMgaW50IEdldF9Cb2FyZF9Db25maWcodm9pZCkKIHsKLQl1Y2hhciBjb25maWcgPSBHZXRfUExEX0JPQVJEKCkgJiAweDAzOworCXU4IGNvbmZpZyA9IEdldF9QTERfQk9BUkQoKSAmIDB4MDM7CiAKIAlpZiAoY29uZmlnID09IDMpCiAJICAgIHJldHVybiAxOwpAQCAtMjI4LDYgKzIzMyw1NCBAQAogCXJldHVybigoKEdldF9QTERfQk9BUkQoKSA+PiA0KSAmIDB4MDMpICsgJ0EnKTsKIH0KIAorc3RhdGljIHU4IEdldF9TRFJBTV9DaGlwTnIodm9pZCkKK3sKKwlzd2l0Y2ggKChHZXRfUExEX1NEUkFNKCkgPj4gNCkgJiAweDBGKSB7CisJCWNhc2UgMDogcmV0dXJuIDQ7CisJCWNhc2UgMTogcmV0dXJuIDE7CisJCWNhc2UgMjogcmV0dXJuIDI7CisJCWRlZmF1bHQ6IHJldHVybiAwOworCX0KK30KKworc3RhdGljIHVsb25nIEdldF9TRFJBTV9DaGlwU2l6ZSh2b2lkKQoreworCXN3aXRjaCAoR2V0X1BMRF9TRFJBTSgpICYgMHgwRikgeworCQljYXNlIDA6IHJldHVybiAxNiAqICgxMDI0KjEwMjQpOworCQljYXNlIDE6IHJldHVybiAzMiAqICgxMDI0KjEwMjQpOworCQljYXNlIDI6IHJldHVybiAgOCAqICgxMDI0KjEwMjQpOworCQljYXNlIDM6IHJldHVybiAgOCAqICgxMDI0KjEwMjQpOworCQlkZWZhdWx0OiByZXR1cm4gMDsKKwl9CQorfQorc3RhdGljIGNvbnN0IGNoYXIgKiBHZXRfU0RSQU1fQ2hpcEdlb20odm9pZCkKK3sKKwlzd2l0Y2ggKEdldF9QTERfU0RSQU0oKSAmIDB4MEYpIHsKKwkJY2FzZSAwOiByZXR1cm4gIjRNeDh4NCI7CisJCWNhc2UgMTogcmV0dXJuICI4TXg4eDQiOworCQljYXNlIDI6IHJldHVybiAiMk14OHg0IjsKKwkJY2FzZSAzOiByZXR1cm4gIjRNeDh4MiI7CisJCWRlZmF1bHQ6IHJldHVybiAidW5rbm93biI7CisJfQorfQorCitzdGF0aWMgdm9pZCBTaG93X1ZDTUE5X0luZm8oY2hhciAqYm9hcmRfbmFtZSwgY2hhciAqc2VyaWFsKQoreworCXByaW50ZigiQm9hcmQ6ICVzIFNOOiAlcyAgUENCIFJldjogJWMgUExEKCVkLCVkKVxuIiwKKwkJYm9hcmRfbmFtZSwgc2VyaWFsLCBHZXRfQm9hcmRfUENCKCksIEdldF9QTERfVmVyc2lvbigpLCBHZXRfUExEX1JldmlzaW9uKCkpOworCXByaW50ZigiU0RSQU06ICVkIGNoaXBzICVzXG4iLCBHZXRfU0RSQU1fQ2hpcE5yKCksIEdldF9TRFJBTV9DaGlwR2VvbSgpKTsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gR2V0X1NEUkFNX0NoaXBTaXplKCkgKiBHZXRfU0RSQU1fQ2hpcE5yKCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgpAQCAtMjQwLDggKzI5Myw2IEBACiAJaW50IGk7CiAJYmFja3VwX3QgKmIgPSAoYmFja3VwX3QgKikgczsKIAotCXB1dHMoIkJvYXJkOiAiKTsKLQogCWkgPSBnZXRlbnZfcigic2VyaWFsIyIsIHMsIDMyKTsKIAlpZiAoKGkgPCAwKSB8fCBzdHJuY21wIChzLCAiVkNNQTkiLCA1KSkgewogCQlnZXRfYmFja3VwX3ZhbHVlcyAoYik7CkBAIC0yNDksMzIgKzMwMCwyMyBAQAogCQkJcHV0cyAoIiMjIyBObyBIVyBJRCAtIGFzc3VtaW5nIFZDTUE5Iik7CiAJCX0gZWxzZSB7CiAJCQliLT5zZXJpYWxfbmFtZVs1XSA9IDA7Ci0JCQlwcmludGYgKCIlcy0lZCBQQ0IgUmV2ICVjIFNOOiAlcyIsIGItPnNlcmlhbF9uYW1lLCBHZXRfQm9hcmRfQ29uZmlnKCksCi0JCQkJCUdldF9Cb2FyZF9QQ0IoKSwgJmItPnNlcmlhbF9uYW1lWzZdKTsKKwkJCVNob3dfVkNNQTlfSW5mbyhiLT5zZXJpYWxfbmFtZSwgJmItPnNlcmlhbF9uYW1lWzZdKTsKIAkJfQogCX0gZWxzZSB7CiAJCXNbNV0gPSAwOwotCQlwcmludGYgKCIlcy0lZCBQQ0IgUmV2ICVjIFNOOiAlcyIsIHMsIEdldF9Cb2FyZF9Db25maWcoKSwgR2V0X0JvYXJkX1BDQigpLAotCQkJCSZzWzZdKTsKKwkJU2hvd19WQ01BOV9JbmZvKHMsICZzWzZdKTsKIAl9Ci0JcHJpbnRmKCJcbiIpOworCS8qcHJpbnRmKCJcbiIpOyovCiAJcmV0dXJuKDApOwogfQogCiAKLXZvaWQgcHJpbnRfdmNtYTlfcmV2KHZvaWQpCi17Ci0JcHJpbnRmKCJCb2FyZDogVkNNQTktJWQgUENCIFJldjogJWMgKFBMRCBWZXI6ICVkLCBSZXY6ICVkKVxuIiwKLQkJR2V0X0JvYXJkX0NvbmZpZygpLCBHZXRfQm9hcmRfUENCKCksCi0JCUdldF9QTERfVmVyc2lvbigpLCBHZXRfUExEX1JldmlzaW9uKCkpOwotfQotCiBleHRlcm4gdm9pZCBtZW1fdGVzdF9yZWxvYyh2b2lkKTsKIAogaW50IGxhc3Rfc3RhZ2VfaW5pdCh2b2lkKQogewogCW1lbV90ZXN0X3JlbG9jKCk7Ci0JcHJpbnRfdmNtYTlfcmV2KCk7CisJY2hlY2tib2FyZCgpOwogCXNob3dfc3RkaW9fZGV2KCk7CiAJY2hlY2tfZW52KCk7CiAJcmV0dXJuIDA7CkBAIC0yOTUsNiArMzM3LDE1IEBACiAqIFByaW50IFZDTUE5IEluZm8KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgcHJpbnRfdmNtYTlfaW5mbyh2b2lkKQotewotICAgIHByaW50X3ZjbWE5X3JldigpOworewkKKwl1bnNpZ25lZCBjaGFyIHNbNTBdOworCWludCBpOworCQorCWlmICgoaSA9IGdldGVudl9yKCJzZXJpYWwjIiwgcywgMzIpKSA8IDApIHsKKwkJcHV0cyAoIiMjIyBObyBIVyBJRCAtIGFzc3VtaW5nIFZDTUE5Iik7CisJCXByaW50ZigiaSAlZCIsIGkqMjQpOworCX0gZWxzZSB7CisJCXNbNV0gPSAwOworCQlTaG93X1ZDTUE5X0luZm8ocywgJnNbNl0pOworCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC92Y21hOS92Y21hOS5oIGIvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmgKaW5kZXggMDY4ZWIyMS4uYzAxNjdkNSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmgKKysrIGIvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDAyCisgKiAoQykgQ29weXJpZ2h0IDIwMDIsIDIwMDMKICAqIERhdmlkIE11ZWxsZXIsIEVMU09GVCBBRywgZC5tdWVsbGVyQGVsc29mdC5jaAogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0xMTYsMTEgKzExNiwxOSBAQAogCiAjZW5kaWYKIAorLyogVkNNQTkgUExEIHJlZ3NpdGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCVMzQzI0WDBfUkVHOAlJRDsKKwlTM0MyNFgwX1JFRzgJTklDOworCVMzQzI0WDBfUkVHOAlDQU47CisJUzNDMjRYMF9SRUc4CU1JU0M7CisJUzNDMjRYMF9SRUc4CUdQQ0Q7CisJUzNDMjRYMF9SRUc4CUJPQVJEOworCVMzQzI0WDBfUkVHOAlTRFJBTTsKK30gLypfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkqLyBWQ01BOV9QTEQ7CiAKLSNkZWZpbmUgUExEX0JBU0VfQUREUkVTUwkJMHgyQzAwMDEwMAotI2RlZmluZSBQTERfSURfUkVHCQkJKFBMRF9CQVNFX0FERFJFU1MgKyAwKQotI2RlZmluZSBQTERfTklDX1JFRwkJCShQTERfQkFTRV9BRERSRVNTICsgMSkKLSNkZWZpbmUgUExEX0NBTl9SRUcJCQkoUExEX0JBU0VfQUREUkVTUyArIDIpCi0jZGVmaW5lIFBMRF9NSVNDX1JFRwkJCShQTERfQkFTRV9BRERSRVNTICsgMykKLSNkZWZpbmUgUExEX0dQQ0RfUkVHCQkJKFBMRF9CQVNFX0FERFJFU1MgKyA0KQotI2RlZmluZSBQTERfQk9BUkRfUkVHCQkJKFBMRF9CQVNFX0FERFJFU1MgKyA1KQorI2RlZmluZSBWQ01BOV9QTERfQkFTRQkweDJDMDAwMTAwCitzdGF0aWMgaW5saW5lIFZDTUE5X1BMRCAqIGNvbnN0IFZDTUE5X0dldEJhc2VfUExEKHZvaWQpCit7CisJcmV0dXJuIChWQ01BOV9QTEQgKiBjb25zdClWQ01BOV9QTERfQkFTRTsKK30KZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHh4L01ha2VmaWxlIGIvY3B1L21wYzV4eHgvTWFrZWZpbGUKaW5kZXggNzRlYzY0Yy4uYTY1YmMyMiAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eHgvTWFrZWZpbGUKKysrIGIvY3B1L21wYzV4eHgvTWFrZWZpbGUKQEAgLTI3LDcgKzI3LDcgQEAKIAogU1RBUlQJPSBzdGFydC5vCiBBU09CSlMJPSBpby5vIGZpcm13YXJlX3NjX3Rhc2tfYmVzdGNvbW0uaW1wbC5vIGZpcm13YXJlX3NjX3Rhc2suaW1wbC5vCi1PQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gaW50ZXJydXB0cy5vIHNlcmlhbC5vIFwKK09CSlMJPSBpMmMubyB0cmFwcy5vIGNwdS5vIGNwdV9pbml0Lm8gc3BlZWQubyBpbnRlcnJ1cHRzLm8gc2VyaWFsLm8gXAogCSAgbG9hZHRhc2subyBmZWMubyBwY2lfbXBjNTIwMC5vCiAKIGFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKEFTT0JKUykgJChMSUIpCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4eC9pMmMuYyBiL2NwdS9tcGM1eHh4L2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGQxNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbXBjNXh4eC9pMmMuYwpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZmRlZiBDT05GSUdfSEFSRF9JMkMKKworI2luY2x1ZGUgPG1wYzV4eHguaD4KKyNpbmNsdWRlIDxpMmMuaD4KKworI2lmZGVmIENGR19JMkNfTU9EVUxFCisjZGVmaW5lIEkyQ19CQVNFCU1QQzVYWFhfSTJDMgorI2Vsc2UKKyNkZWZpbmUgSTJDX0JBU0UJTVBDNVhYWF9JMkMxCisjZW5kaWYKKworI2RlZmluZSBJMkNfVElNRU9VVAkxMDAKKyNkZWZpbmUgSTJDX1JFVFJJRVMJMworCitzdGF0aWMgaW50ICBtcGNfcmVnX2luICAgICh2b2xhdGlsZSB1MzIgKnJlZyk7CitzdGF0aWMgdm9pZCBtcGNfcmVnX291dCAgICh2b2xhdGlsZSB1MzIgKnJlZywgaW50IHZhbCwgaW50IG1hc2spOworc3RhdGljIGludCAgd2FpdF9mb3JfYmIgICAodm9pZCk7CitzdGF0aWMgaW50ICB3YWl0X2Zvcl9waW4gIChpbnQgKnN0YXR1cyk7CitzdGF0aWMgaW50ICBkb19hZGRyZXNzICAgICh1Y2hhciBjaGlwLCBjaGFyIHJkd3JfZmxhZyk7CitzdGF0aWMgaW50ICBzZW5kX2J5dGVzICAgICh1Y2hhciBjaGlwLCBjaGFyICpidWYsIGludCBsZW4pOworc3RhdGljIGludCAgcmVjZWl2ZV9ieXRlcyAodWNoYXIgY2hpcCwgY2hhciAqYnVmLCBpbnQgbGVuKTsKKworc3RhdGljIGludCBtcGNfcmVnX2luKHZvbGF0aWxlIHUzMiAqcmVnKQoreworCXJldHVybiAqcmVnID4+IDI0OworCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWllaW8iKTsKK30KKworc3RhdGljIHZvaWQgbXBjX3JlZ19vdXQodm9sYXRpbGUgdTMyICpyZWcsIGludCB2YWwsIGludCBtYXNrKQoreworCWludCB0bXA7CisKKwlpZiAoIW1hc2spIHsKKwkJKnJlZyA9IHZhbCA8PCAyNDsKKwl9IGVsc2UgeworCQl0bXAgPSBtcGNfcmVnX2luKHJlZyk7CisJCSpyZWcgPSAoKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKSkgPDwgMjQ7CisJfQorCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWllaW8iKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCB3YWl0X2Zvcl9iYih2b2lkKQoreworCXN0cnVjdCBtcGM1eHh4X2kyYyAqcmVncyAgICA9IChzdHJ1Y3QgbXBjNXh4eF9pMmMgKilJMkNfQkFTRTsKKwlpbnQgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBJMkNfVElNRU9VVDsKKwlpbnQgICAgICAgICAgICAgICAgIHN0YXR1czsKKworCXN0YXR1cyA9IG1wY19yZWdfaW4oJnJlZ3MtPm1zcik7CisKKwl3aGlsZSAodGltZW91dC0tICYmIChzdGF0dXMgJiBJMkNfQkIpKSB7CisjaWYgMQorCQl2b2xhdGlsZSBpbnQgdGVtcDsKKwkJbXBjX3JlZ19vdXQoJnJlZ3MtPm1jciwgSTJDX1NUQSwgSTJDX1NUQSk7CisJCXRlbXAgPSBtcGNfcmVnX2luKCZyZWdzLT5tZHIpOworCQltcGNfcmVnX291dCgmcmVncy0+bWNyLCAwLCBJMkNfU1RBKTsKKwkJbXBjX3JlZ19vdXQoJnJlZ3MtPm1jciwgMCwgMCk7CisJCW1wY19yZWdfb3V0KCZyZWdzLT5tY3IsIEkyQ19FTiwgMCk7CisjZW5kaWYKKwkJdWRlbGF5KDEwMDApOworCQlzdGF0dXMgPSBtcGNfcmVnX2luKCZyZWdzLT5tc3IpOworCX0KKworCXJldHVybiAoc3RhdHVzICYgSTJDX0JCKTsKK30KKworc3RhdGljIGludCB3YWl0X2Zvcl9waW4oaW50ICpzdGF0dXMpCit7CisJc3RydWN0IG1wYzV4eHhfaTJjICpyZWdzICAgID0gKHN0cnVjdCBtcGM1eHh4X2kyYyAqKUkyQ19CQVNFOworCWludCAgICAgICAgICAgICAgICAgdGltZW91dCA9IEkyQ19USU1FT1VUOworCisJKnN0YXR1cyA9IG1wY19yZWdfaW4oJnJlZ3MtPm1zcik7CisKKwl3aGlsZSAodGltZW91dC0tICYmICEoKnN0YXR1cyAmIEkyQ19JRikpIHsKKwkJdWRlbGF5KDEwMDApOworCQkqc3RhdHVzID0gbXBjX3JlZ19pbigmcmVncy0+bXNyKTsKKwl9CisKKwlpZiAoISgqc3RhdHVzICYgSTJDX0lGKSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJbXBjX3JlZ19vdXQoJnJlZ3MtPm1zciwgMCwgSTJDX0lGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX2FkZHJlc3ModWNoYXIgY2hpcCwgY2hhciByZHdyX2ZsYWcpCit7CisJc3RydWN0IG1wYzV4eHhfaTJjICpyZWdzID0gKHN0cnVjdCBtcGM1eHh4X2kyYyAqKUkyQ19CQVNFOworCWludCAgICAgICAgICAgICAgICAgc3RhdHVzOworCisJY2hpcCA8PD0gMTsKKworCWlmIChyZHdyX2ZsYWcpIHsKKwkJY2hpcCB8PSAxOworCX0KKworCW1wY19yZWdfb3V0KCZyZWdzLT5tY3IsIEkyQ19UWCwgSTJDX1RYKTsKKwltcGNfcmVnX291dCgmcmVncy0+bWRyLCBjaGlwLCAwKTsKKworICAgICAgICBpZiAod2FpdF9mb3JfcGluKCZzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0YXR1cyAmIEkyQ19SWEFLKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZW5kX2J5dGVzKHVjaGFyIGNoaXAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbXBjNXh4eF9pMmMgKnJlZ3MgPSAoc3RydWN0IG1wYzV4eHhfaTJjICopSTJDX0JBU0U7CisJaW50ICAgICAgICAgICAgICAgICB3cmNvdW50OworCWludCAgICAgICAgICAgICAgICAgc3RhdHVzOworCisJZm9yICh3cmNvdW50ID0gMDsgd3Jjb3VudCA8IGxlbjsgKyt3cmNvdW50KSB7CisKKwkJbXBjX3JlZ19vdXQoJnJlZ3MtPm1kciwgYnVmW3dyY291bnRdLCAwKTsKKworCQlpZiAod2FpdF9mb3JfcGluKCZzdGF0dXMpKSB7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBJMkNfUlhBSykgeworCQkJYnJlYWs7CisJCX0KKworCX0KKworCXJldHVybiAhKHdyY291bnQgPT0gbGVuKTsKK30KKworc3RhdGljIGludCByZWNlaXZlX2J5dGVzKHVjaGFyIGNoaXAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbXBjNXh4eF9pMmMgKnJlZ3MgICAgPSAoc3RydWN0IG1wYzV4eHhfaTJjICopSTJDX0JBU0U7CisJaW50ICAgICAgICAgICAgICAgICBkdW1teSAgID0gMTsKKwlpbnQgICAgICAgICAgICAgICAgIHJkY291bnQgPSAwOworCWludCAgICAgICAgICAgICAgICAgc3RhdHVzOworCWludCAgICAgICAgICAgICAgICAgaTsKKworCW1wY19yZWdfb3V0KCZyZWdzLT5tY3IsIDAsIEkyQ19UWCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKwkJYnVmW3JkY291bnRdID0gbXBjX3JlZ19pbigmcmVncy0+bWRyKTsKKworCQlpZiAoZHVtbXkpIHsKKwkJCWR1bW15ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXJkY291bnQrKzsKKwkJfQorCisKKwkJaWYgKHdhaXRfZm9yX3Bpbigmc3RhdHVzKSkgeworCQkJcmV0dXJuIC00OworCQl9CisJfQorCisJbXBjX3JlZ19vdXQoJnJlZ3MtPm1jciwgSTJDX1RYQUssIEkyQ19UWEFLKTsKKwlidWZbcmRjb3VudCsrXSA9IG1wY19yZWdfaW4oJnJlZ3MtPm1kcik7CisKKwlpZiAod2FpdF9mb3JfcGluKCZzdGF0dXMpKSB7CisJCXJldHVybiAtNTsKKwl9CisKKwltcGNfcmVnX291dCgmcmVncy0+bWNyLCAwLCBJMkNfVFhBSyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKiogSTJDIEFQSSAqKioqKioqKioqKioqKioqLworCit2b2lkIGkyY19pbml0KGludCBzcGVlZCwgaW50IHNhZGRyKQoreworCXN0cnVjdCBtcGM1eHh4X2kyYyAqcmVncyA9IChzdHJ1Y3QgbXBjNXh4eF9pMmMgKilJMkNfQkFTRTsKKworCW1wY19yZWdfb3V0KCZyZWdzLT5tY3IsIDAsIDApOworCW1wY19yZWdfb3V0KCZyZWdzLT5tYWRyLCBzYWRkciA8PCAxLCAwKTsKKworCS8qIFNldCBjbG9jaworCSAqLworCW1wY19yZWdfb3V0KCZyZWdzLT5tZmRyLCBzcGVlZCwgMCk7CisKKwkvKiBFbmFibGUgbW9kdWxlCisJICovCisJbXBjX3JlZ19vdXQoJnJlZ3MtPm1jciwgSTJDX0VOLCBJMkNfSU5JVF9NQVNLKTsKKwltcGNfcmVnX291dCgmcmVncy0+bXNyLCAwLCBJMkNfSUYpOworCisJcmV0dXJuOworfQorCitpbnQgaTJjX3Byb2JlKHVjaGFyIGNoaXApCit7CisJc3RydWN0IG1wYzV4eHhfaTJjICpyZWdzID0gKHN0cnVjdCBtcGM1eHh4X2kyYyAqKUkyQ19CQVNFOworCWludCAgICAgICAgICAgICAgICAgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJMkNfUkVUUklFUzsgaSsrKSB7CisJCW1wY19yZWdfb3V0KCZyZWdzLT5tY3IsIEkyQ19TVEEsIEkyQ19TVEEpOworCisJCWlmICghIGRvX2FkZHJlc3MoY2hpcCwgMCkpIHsKKwkJCW1wY19yZWdfb3V0KCZyZWdzLT5tY3IsIDAsIEkyQ19TVEEpOworCQkJYnJlYWs7CisJCX0KKworCQltcGNfcmVnX291dCgmcmVncy0+bWNyLCAwLCBJMkNfU1RBKTsKKwkJdWRlbGF5KDUwMCk7CisJfQorCisJcmV0dXJuIChpID09IEkyQ19SRVRSSUVTKTsKK30KKworaW50IGkyY19yZWFkKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWYsIGludCBsZW4pCit7CisJdWNoYXIgICAgICAgICAgICAgICAgeGFkZHJbNF07CisJc3RydWN0IG1wYzV4eHhfaTJjICogcmVncyAgICAgICAgPSAoc3RydWN0IG1wYzV4eHhfaTJjICopSTJDX0JBU0U7CisJaW50ICAgICAgICAgICAgICAgICAgcmV0ICAgICAgICAgPSAtMTsKKworCXhhZGRyWzBdID0gKGFkZHIgPj4gMjQpICYgMHhGRjsKKwl4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7CisJeGFkZHJbMl0gPSAoYWRkciA+PiAgOCkgJiAweEZGOworCXhhZGRyWzNdID0gIGFkZHIJJiAweEZGOworCisJaWYgKHdhaXRfZm9yX2JiKCkpIHsKKwkJcHJpbnRmKCJpMmNfcmVhZDogYnVzIGlzIGJ1c3lcbiIpOworCQlnb3RvIERvbmU7CisJfQorCisJbXBjX3JlZ19vdXQoJnJlZ3MtPm1jciwgSTJDX1NUQSwgSTJDX1NUQSk7CisJaWYgKGRvX2FkZHJlc3MoY2hpcCwgMCkpIHsKKwkJcHJpbnRmKCJpMmNfcmVhZDogZmFpbGVkIHRvIGFkZHJlc3MgY2hpcFxuIik7CisJCWdvdG8gRG9uZTsKKwl9CisKKwlpZiAoc2VuZF9ieXRlcyhjaGlwLCAmeGFkZHJbNC1hbGVuXSwgYWxlbikpIHsKKwkJcHJpbnRmKCJpMmNfcmVhZDogc2VuZF9ieXRlcyBmYWlsZWRcbiIpOworCQlnb3RvIERvbmU7CisJfQorCisJbXBjX3JlZ19vdXQoJnJlZ3MtPm1jciwgSTJDX1JTVEEsIEkyQ19SU1RBKTsKKwlpZiAoZG9fYWRkcmVzcyhjaGlwLCAxKSkgeworCQlwcmludGYoImkyY19yZWFkOiBmYWlsZWQgdG8gYWRkcmVzcyBjaGlwXG4iKTsKKwkJZ290byBEb25lOworCX0KKworCWlmIChyZWNlaXZlX2J5dGVzKGNoaXAsIGJ1ZiwgbGVuKSkgeworCQlwcmludGYoImkyY19yZWFkOiByZWNlaXZlX2J5dGVzIGZhaWxlZFxuIik7CisJCWdvdG8gRG9uZTsKKwl9CisKKwlyZXQgPSAwOworRG9uZToKKwltcGNfcmVnX291dCgmcmVncy0+bWNyLCAwLCBJMkNfU1RBKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaTJjX3dyaXRlKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWYsIGludCBsZW4pCit7CisJdWNoYXIgICAgICAgICAgICAgICB4YWRkcls0XTsKKwlzdHJ1Y3QgbXBjNXh4eF9pMmMgKnJlZ3MgICAgICAgID0gKHN0cnVjdCBtcGM1eHh4X2kyYyAqKUkyQ19CQVNFOworCWludCAgICAgICAgICAgICAgICAgcmV0ICAgICAgICAgPSAtMTsKKworCXhhZGRyWzBdID0gKGFkZHIgPj4gMjQpICYgMHhGRjsKKwl4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7CisJeGFkZHJbMl0gPSAoYWRkciA+PiAgOCkgJiAweEZGOworCXhhZGRyWzNdID0gIGFkZHIJJiAweEZGOworCisgICAgICAgIGlmICh3YWl0X2Zvcl9iYigpKSB7CisJCXByaW50ZigiaTJjX3dyaXRlOiBidXMgaXMgYnVzeVxuIik7CisJCWdvdG8gRG9uZTsKKwl9CisKKyAgICAgICAgbXBjX3JlZ19vdXQoJnJlZ3MtPm1jciwgSTJDX1NUQSwgSTJDX1NUQSk7CisgICAgICAgIGlmIChkb19hZGRyZXNzKGNoaXAsIDApKSB7CisJCXByaW50ZigiaTJjX3dyaXRlOiBmYWlsZWQgdG8gYWRkcmVzcyBjaGlwXG4iKTsKKwkJZ290byBEb25lOworCX0KKworCWlmIChzZW5kX2J5dGVzKGNoaXAsICZ4YWRkcls0LWFsZW5dLCBhbGVuKSkgeworCQlwcmludGYoImkyY193cml0ZTogc2VuZF9ieXRlcyBmYWlsZWRcbiIpOworCQlnb3RvIERvbmU7CisJfQorCisJaWYgKHNlbmRfYnl0ZXMoY2hpcCwgYnVmLCBsZW4pKSB7CisJCXByaW50ZigiaTJjX3dyaXRlOiBzZW5kX2J5dGVzIGZhaWxlZFxuIik7CisJCWdvdG8gRG9uZTsKKwl9CisKKwlyZXQgPSAwOworRG9uZToKKwltcGNfcmVnX291dCgmcmVncy0+bWNyLCAwLCBJMkNfU1RBKTsKKwlyZXR1cm4gcmV0OworfQorCit1Y2hhciBpMmNfcmVnX3JlYWQodWNoYXIgY2hpcCwgdWNoYXIgcmVnKQoreworCWNoYXIgYnVmOworCisJaTJjX3JlYWQoY2hpcCwgcmVnLCAxLCAmYnVmLCAxKTsKKworCXJldHVybiBidWY7Cit9CisKK3ZvaWQgaTJjX3JlZ193cml0ZSh1Y2hhciBjaGlwLCB1Y2hhciByZWcsIHVjaGFyIHZhbCkKK3sKKwlpMmNfd3JpdGUoY2hpcCwgcmVnLCAxLCAmdmFsLCAxKTsKKworCXJldHVybjsKK30KKworI2VuZGlmCS8qIENPTkZJR19IQVJEX0kyQyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0ljZUN1YmUuaCBiL2luY2x1ZGUvY29uZmlncy9JY2VDdWJlLmgKaW5kZXggOWQ5MTRhNi4uYzJjMzk4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0ljZUN1YmUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvSWNlQ3ViZS5oCkBAIC04Myw3ICs4Myw4IEBACiAvKgogICogU3VwcG9ydGVkIGNvbW1hbmRzCiAgKi8KLSNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ09ORklHX0NNRF9ERkwgfCBBRERfUENJX0NNRCkKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ09ORklHX0NNRF9ERkwgfCBBRERfUENJX0NNRCB8IFwKKwkJCQkgQ0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSkKIAogLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLwogI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgpAQCAtOTgsNiArOTksMjMgQEAKIC8qCiAgKiBJMkMgY29uZmlndXJhdGlvbgogICovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJMQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0ICovCisjZGVmaW5lIENGR19JMkNfTU9EVUxFCQkxCS8qIElmIGRlZmluZWQgdGhlbiBJMkMgbW9kdWxlICMyIGlzIHVzZWQKKwkJCQkJICogb3RoZXJ3aXNlIEkyQyBtb2R1bGUgIzEgaXMgdXNlZCAqLworI2lmZGVmIENPTkZJR19NUEM1MjAwCisjZGVmaW5lIENGR19JMkNfU1BFRUQJCTB4M0QJLyogODZLSHogZ2l2ZW4gMTMzTUh6IElQQkkgKi8KKyNlbHNlCisjZGVmaW5lIENGR19JMkNfU1BFRUQJCTB4MzUJLyogODZLSHogZ2l2ZW4gMzNNSHogSVBCSSAqLworI2VuZGlmCisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKworLyoKKyAqIEVFUFJPTSBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUgkJMHg1MAkvKiAxMDEwMDAweCAqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTgkJMQorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwkzCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUwkzNQogCiAvKgogICogRmxhc2ggY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1ZDTUE5LmggYi9pbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaAppbmRleCBjMDEwM2ZjLi45Zjg2OGY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiwgMjAwMwogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CiAgKiBHYXJ5IEplbm5lam9obiA8Z2pAZGVueC5kZT4KQEAgLTE2MCw5ICsxNjAsMTAgQEAKICNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KIAogI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDMwMDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KLSNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDMzRjgwMDAwCS8qIDYzLjUgTUIgaW4gRFJBTQkqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MzBGODAwMDAJLyogMTUuNSBNQiBpbiBEUkFNCSovCisKICNkZWZpbmUgQ0ZHX0FMVF9NRU1URVNUCi0jZGVmaW5lCUNGR19MT0FEX0FERFIJCTB4MzMwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KKyNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHgzMDgwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLwogCiAKICN1bmRlZiAgQ0ZHX0NMS1NfSU5fSFoJCS8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KQEAgLTE5Nyw4ICsxOTgsNiBAQAogICovCiAjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEJICAgLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAqLwogI2RlZmluZSBQSFlTX1NEUkFNXzEJCTB4MzAwMDAwMDAgLyogU0RSQU0gQmFuayAjMSAqLwotI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQkweDA0MDAwMDAwIC8qIDY0IE1CICovCi0KICNkZWZpbmUgUEhZU19GTEFTSF8xCQkweDAwMDAwMDAwIC8qIEZsYXNoIEJhbmsgIzEgKi8KIAogI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJUEhZU19GTEFTSF8xCmRpZmYgLS1naXQgYS9pbmNsdWRlL21wYzV4eHguaCBiL2luY2x1ZGUvbXBjNXh4eC5oCmluZGV4IDAyNjgzZTMuLmIzOGQ3ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXBjNXh4eC5oCisrKyBiL2luY2x1ZGUvbXBjNXh4eC5oCkBAIC0xMDgsNiArMTA4LDkgQEAKIAogI2RlZmluZQlNUEM1WFhYX0ZFQwkJKENGR19NQkFSICsgMHgzMDAwKQogCisjZGVmaW5lIE1QQzVYWFhfSTJDMQkJKENGR19NQkFSICsgMHgzRDAwKQorI2RlZmluZSBNUEM1WFhYX0kyQzIJCShDRkdfTUJBUiArIDB4M0Q0MCkKKwogI2lmIGRlZmluZWQoQ09ORklHX01HVDUxMDApCiAjZGVmaW5lIE1QQzVYWFhfU1JBTQkJKENGR19NQkFSICsgMHg0MDAwKQogI2RlZmluZSBNUEM1WFhYX1NSQU1fU0laRQkoOCoxMDI0KQpAQCAtMTk3LDYgKzIwMCwyNCBAQAogI2RlZmluZSBNUEM1WFhYX0dQVDBfRU5BQkxFCQkoTVBDNVhYWF9HUFQgKyAweDApCiAjZGVmaW5lIE1QQzVYWFhfR1BUMF9DT1VOVEVSCQkoTVBDNVhYWF9HUFQgKyAweDQpCiAKKy8qIEkyQ24gY29udHJvbCByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIEkyQ19FTgkJMHg4MAorI2RlZmluZSBJMkNfSUVOCQkweDQwCisjZGVmaW5lIEkyQ19TVEEJCTB4MjAKKyNkZWZpbmUgSTJDX1RYCQkweDEwCisjZGVmaW5lIEkyQ19UWEFLCTB4MDgKKyNkZWZpbmUgSTJDX1JTVEEJMHgwNAorI2RlZmluZSBJMkNfSU5JVF9NQVNLCShJMkNfRU4gfCBJMkNfU1RBIHwgSTJDX1RYIHwgSTJDX1JTVEEpCisKKy8qIEkyQ24gc3RhdHVzIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgSTJDX0NGCQkweDgwCisjZGVmaW5lIEkyQ19BQVMJCTB4NDAKKyNkZWZpbmUgSTJDX0JCCQkweDIwCisjZGVmaW5lIEkyQ19BTAkJMHgxMAorI2RlZmluZSBJMkNfU1JXCQkweDA0CisjZGVmaW5lIEkyQ19JRgkJMHgwMgorI2RlZmluZSBJMkNfUlhBSwkweDAxCisKIC8qIFByb2dyYW1tYWJsZSBTZXJpYWwgQ29udHJvbGxlciAoUFNDKSBzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLwogI2RlZmluZSBQU0NfU1JfQ0RFCQkweDAwODAKICNkZWZpbmUgUFNDX1NSX1JYUkRZCQkweDAxMDAKQEAgLTUwNSw2ICs1MjYsMTQgQEAKIAl2b2xhdGlsZSB1MzIgRVUzNzsJCS8qIFNETUEgKyAweGZjICovCiB9OwogCitzdHJ1Y3QgbXBjNXh4eF9pMmMgeworCXZvbGF0aWxlIHUzMiBtYWRyOwkJLyogSTJDbiArIDB4MDAgKi8KKwl2b2xhdGlsZSB1MzIgbWZkcjsJCS8qIEkyQ24gKyAweDA0ICovCisJdm9sYXRpbGUgdTMyIG1jcjsJCS8qIEkyQ24gKyAweDA4ICovCisJdm9sYXRpbGUgdTMyIG1zcjsJCS8qIEkyQ24gKyAweDBDICovCisJdm9sYXRpbGUgdTMyIG1kcjsJCS8qIEkyQ24gKyAweDEwICovCit9OworCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCiB2b2lkIGxvYWR0YXNrKGludCBiYXNldGFzaywgaW50IHRhc2tzKTsKIApkaWZmIC0tZ2l0IGEvcnRjL3MzYzI0eDBfcnRjLmMgYi9ydGMvczNjMjR4MF9ydGMuYwppbmRleCBiZjgwMDhkLi45ZTIxOTFlIDEwMDY0NAotLS0gYS9ydGMvczNjMjR4MF9ydGMuYworKysgYi9ydGMvczNjMjR4MF9ydGMuYwpAQCAtODAsMTMgKzgwLDE1IEBACiAJU2V0UlRDX0FjY2VzcyhSVENfRU5BQkxFKTsKIAogCS8qIHJlYWQgUlRDIHJlZ2lzdGVycyAqLwotCXNlYwk9IHJ0Yy0+QkNEU0VDOwotCW1pbgk9IHJ0Yy0+QkNETUlOOwotCWhvdXIJPSBydGMtPkJDREhPVVI7Ci0JbWRheQk9IHJ0Yy0+QkNEREFURTsKLQl3ZGF5CT0gcnRjLT5CQ0REQVk7Ci0JbW9uCT0gcnRjLT5CQ0RNT047Ci0JeWVhcgk9IHJ0Yy0+QkNEWUVBUjsKKwlkbyB7CisJCXNlYwk9IHJ0Yy0+QkNEU0VDOworCQltaW4JPSBydGMtPkJDRE1JTjsKKwkJaG91cgk9IHJ0Yy0+QkNESE9VUjsKKwkJbWRheQk9IHJ0Yy0+QkNEREFURTsKKwkJd2RheQk9IHJ0Yy0+QkNEREFZOworCQltb24JPSBydGMtPkJDRE1PTjsKKwkJeWVhcgk9IHJ0Yy0+QkNEWUVBUjsKKwl9IHdoaWxlIChzZWMgIT0gcnRjLT5CQ0RTRUMpOwogCiAJLyogcmVhZCBBTEFSTSByZWdpc3RlcnMgKi8KIAlhX3NlYwk9IHJ0Yy0+QUxNU0VDOwpAQCAtMTcwLDcgKzE3Miw3IEBACiAJUzNDMjRYMF9SVEMgKiBjb25zdCBydGMgPSBTM0MyNFgwX0dldEJhc2VfUlRDKCk7CiAKIAlydGMtPlJUQ0NPTiA9IChydGMtPlJUQ0NPTiAmIH4weDA2KSB8IDB4MDg7Ci0JcnRjLT5SVENDT04gJj0gfjB4MDg7CisJcnRjLT5SVENDT04gJj0gfigweDA4fDB4MDEpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCg==