ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCmluZGV4IGZhYWM5YjQuLjA1N2JkZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKKysrIGIvZHJpdmVycy92aWRlby90ZGZ4ZmIuYwpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiBBdXRob3I6IEhhbm51IE1hbGxhdCA8aG1hbGxhdEBjYy5odXQuZmk+CiAgKgotICogQ29weXJpZ2h0IKkgMTk5OSBIYW5udSBNYWxsYXQKKyAqIENvcHlyaWdodCDCqSAxOTk5IEhhbm51IE1hbGxhdAogICogQWxsIHJpZ2h0cyByZXNlcnZlZAogICoKICAqIENyZWF0ZWQgICAgICA6IFRodSBTZXAgMjMgMTg6MTc6NDMgMTk5OSwgaG1hbGxhdApAQCAtNDIsMTggKzQyLDE4IEBACiAgKgogICogVmVyc2lvbiBoaXN0b3J5OgogICoKLSAqIDAuMS40IChyZWxlYXNlZCAyMDAyLTA1LTI4KSBwb3J0ZWQgb3ZlciB0byBuZXcgZmJkZXYgYXBpIGJ5IEphbWVzIFNpbW1vbnMKKyAqIDAuMS40IChyZWxlYXNlZCAyMDAyLTA1LTI4KQlwb3J0ZWQgb3ZlciB0byBuZXcgZmJkZXYgYXBpIGJ5IEphbWVzIFNpbW1vbnMKICAqCi0gKiAwLjEuMyAocmVsZWFzZWQgMTk5OS0xMS0wMikgYWRkZWQgQXR0aWxhJ3MgcGFubmluZyBzdXBwb3J0LCBjb2RlCi0gKgkJCSAgICAgICByZW9yZywgaHdjdXJzb3IgYWRkcmVzcyBwYWdlIHNpemUgYWxpZ25tZW50Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvciBtbWFwaW5nIGJvdGggZnJhbWUgYnVmZmVyIGFuZCByZWdzKSwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbXkgY2hhbmdlcyB0byBnZXQgcmlkIG9mIGhhcmRjb2RlZAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZHQSBpL28gcmVnaXN0ZXIgbG9jYXRpb25zICh1c2VzIFBDSQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW5mbyBub3cpCi0gKiAwLjEuMiAocmVsZWFzZWQgMTk5OS0xMC0xOSkgYWRkZWQgQXR0aWxhIEtlc21hcmtpJ3MgYnVnIGZpeGVzIGFuZAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcHJvdmVtZW50cwotICogMC4xLjEgKHJlbGVhc2VkIDE5OTktMTAtMDcpIGFkZGVkIFZvb2RvbzMgc3VwcG9ydCBieSBIYXJvbGQgT2dhLgotICogMC4xLjAgKHJlbGVhc2VkIDE5OTktMTAtMDYpIGluaXRpYWwgdmVyc2lvbgorICogMC4xLjMgKHJlbGVhc2VkIDE5OTktMTEtMDIpCWFkZGVkIEF0dGlsYSdzIHBhbm5pbmcgc3VwcG9ydCwgY29kZQorICoJCQkJcmVvcmcsIGh3Y3Vyc29yIGFkZHJlc3MgcGFnZSBzaXplIGFsaWdubWVudAorICoJCQkJKGZvciBtbWFwaW5nIGJvdGggZnJhbWUgYnVmZmVyIGFuZCByZWdzKSwKKyAqCQkJCWFuZCBteSBjaGFuZ2VzIHRvIGdldCByaWQgb2YgaGFyZGNvZGVkCisgKgkJCQlWR0EgaS9vIHJlZ2lzdGVyIGxvY2F0aW9ucyAodXNlcyBQQ0kKKyAqCQkJCWNvbmZpZ3VyYXRpb24gaW5mbyBub3cpCisgKiAwLjEuMiAocmVsZWFzZWQgMTk5OS0xMC0xOSkJYWRkZWQgQXR0aWxhIEtlc21hcmtpJ3MgYnVnIGZpeGVzIGFuZAorICoJCQkJaW1wcm92ZW1lbnRzCisgKiAwLjEuMSAocmVsZWFzZWQgMTk5OS0xMC0wNykJYWRkZWQgVm9vZG9vMyBzdXBwb3J0IGJ5IEhhcm9sZCBPZ2EuCisgKiAwLjEuMCAocmVsZWFzZWQgMTk5OS0xMC0wNikJaW5pdGlhbCB2ZXJzaW9uCiAgKgogICovCiAKQEAgLTcwLDEyICs3MCw3IEBACiAKICNpbmNsdWRlIDx2aWRlby90ZGZ4Lmg+CiAKLSN1bmRlZiBUREZYRkJfREVCVUcKLSNpZmRlZiBUREZYRkJfREVCVUcKLSNkZWZpbmUgRFBSSU5USyhhLGIuLi4pIHByaW50ayhLRVJOX0RFQlVHICJmYjogJXM6ICIgYSwgX19GVU5DVElPTl9fICwgIyMgYikKLSNlbHNlCi0jZGVmaW5lIERQUklOVEsoYSxiLi4uKQotI2VuZGlmCisjZGVmaW5lIERQUklOVEsoYSwgYi4uLikgcHJfZGVidWcoImZiOiAlczogIiBhLCBfX0ZVTkNUSU9OX18gLCAjIyBiKQogCiAjaWZkZWYgQ09ORklHX01UUlIKICNpbmNsdWRlIDxhc20vbXRyci5oPgpAQCAtMTcyLDcgKzE2Nyw3IEBACiBzdGF0aWMgaW50IG5vbXRyciBfX2RldmluaXRkYXRhOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgICAgICAgICAgICAgICAgICBIYXJkd2FyZS1zcGVjaWZpYyBmdW5jaW9ucworICoJCQlIYXJkd2FyZS1zcGVjaWZpYyBmdW5jaW9ucwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW5saW5lIHU4IHZnYV9pbmIoc3RydWN0IHRkZnhfcGFyICpwYXIsIHUzMiByZWcpCkBAIC0yNzYsNyArMjcxLDcgQEAKIAl3aGlsZSAoKHRkZnhfaW5sKHBhciwgU1RBVFVTKSAmIDB4MWYpIDwgc2l6ZSAtIDEpCiAJCWNwdV9yZWxheCgpOwogfQotIAorCiBzdGF0aWMgaW50IGJhbnNoZWVfd2FpdF9pZGxlKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCB0ZGZ4X3BhciAqcGFyID0gaW5mby0+cGFyOwpAQCAtMjg2LDggKzI4MSw4IEBACiAJdGRmeF9vdXRsKHBhciwgQ09NTUFORF8zRCwgQ09NTUFORF8zRF9OT1ApOwogCiAJZG8gewotIAkJaWYgKCh0ZGZ4X2lubChwYXIsIFNUQVRVUykgJiBTVEFUVVNfQlVTWSkgPT0gMCkKLQkJICAgICAgIGkrKzsKKwkJaWYgKCh0ZGZ4X2lubChwYXIsIFNUQVRVUykgJiBTVEFUVVNfQlVTWSkgPT0gMCkKKwkJCWkrKzsKIAl9IHdoaWxlIChpIDwgMyk7CiAKIAlyZXR1cm4gMDsKQEAgLTI5Nyw3ICsyOTIsNyBAQAogICogU2V0IHRoZSBjb2xvciBvZiBhIHBhbGV0dGUgZW50cnkgaW4gOGJwcCBtb2RlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkb19zZXRwYWxlbnRyeShzdHJ1Y3QgdGRmeF9wYXIgKnBhciwgdW5zaWduZWQgcmVnbm8sIHUzMiBjKQoteyAgCit7CiAJYmFuc2hlZV9tYWtlX3Jvb20ocGFyLCAyKTsKIAl0ZGZ4X291dGwocGFyLCBEQUNBRERSLCByZWdubyk7CiAJLyogcmVhZCBhZnRlciB3cml0ZSBtYWtlcyBpdCB3b3JraW5nICovCkBAIC00NzUsOCArNDcwLDEyIEBACiAJfQogCXZhci0+eW9mZnNldCA9IDA7CiAKLQkvKiBCYW5zaGVlIGRvZXNuJ3Qgc3VwcG9ydCBpbnRlcmxhY2UsIGJ1dCBWb29kb280LzUgYW5kIHByb2JhYmx5IFZvb2RvbzMgZG8uICovCi0JLyogbm8gZGlyZWN0IGluZm9ybWF0aW9uIGFib3V0IGRldmljZSBpZCBub3c/IHVzZSBtYXhfcGl4Y2xvY2sgZm9yIHRoaXMuLi4gKi8KKwkvKgorCSAqIEJhbnNoZWUgZG9lc24ndCBzdXBwb3J0IGludGVybGFjZSwgYnV0IFZvb2RvbzQvNSBhbmQgcHJvYmFibHkKKwkgKiBWb29kb28zIGRvLgorCSAqIG5vIGRpcmVjdCBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2UgaWQgbm93PworCSAqICB1c2UgbWF4X3BpeGNsb2NrIGZvciB0aGlzLi4uCisJICovCiAJaWYgKCgodmFyLT52bW9kZSAmIEZCX1ZNT0RFX01BU0spID09IEZCX1ZNT0RFX0lOVEVSTEFDRUQpICYmCiAJICAgIChwYXItPm1heF9waXhjbG9jayA8IFZPT0RPTzNfTUFYX1BJWENMT0NLKSkgewogCQlEUFJJTlRLKCJpbnRlcmxhY2Ugbm90IHN1cHBvcnRlZFxuIik7CkBAIC01MTYsNyArNTE1LDEwIEBACiAJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDg6Ci0JCXZhci0+cmVkLmxlbmd0aCA9IHZhci0+Z3JlZW4ubGVuZ3RoID0gdmFyLT5ibHVlLmxlbmd0aCA9IDg7CisJCXZhci0+cmVkLmxlbmd0aCA9IDg7CisJCXZhci0+cmVkLm9mZnNldCA9IDA7CisJCXZhci0+Z3JlZW4gPSB2YXItPnJlZDsKKwkJdmFyLT5ibHVlID0gdmFyLT5yZWQ7CiAJCWJyZWFrOwogCWNhc2UgMTY6CiAJCXZhci0+cmVkLm9mZnNldCAgID0gMTE7CkBAIC01MzYsNyArNTM4LDggQEAKIAkJdmFyLT5yZWQubGVuZ3RoID0gdmFyLT5ncmVlbi5sZW5ndGggPSB2YXItPmJsdWUubGVuZ3RoID0gODsKIAkJYnJlYWs7CiAJfQotCXZhci0+aGVpZ2h0ID0gdmFyLT53aWR0aCA9IC0xOworCXZhci0+d2lkdGggPSAtMTsKKwl2YXItPmhlaWdodCA9IC0xOwogCiAJdmFyLT5hY2NlbF9mbGFncyA9IEZCX0FDQ0VMRl9URVhUOwogCkBAIC01ODEsNyArNTg0LDggQEAKIAkJaHRvdGFsICAgPj49IDE7CiAJfQogCi0JaGQgID0gd2QgPSAoaGRpc3BlbmQgPj4gMykgLSAxOworCXdkID0gKGhkaXNwZW5kID4+IDMpIC0gMTsKKwloZCAgPSB3ZDsKIAlocyAgPSAoaHN5bmNzdGEgPj4gMykgLSAxOwogCWhlICA9IChoc3luY2VuZCA+PiAzKSAtIDE7CiAJaHQgID0gKGh0b3RhbCA+PiAzKSAtIDE7CkBAIC01ODksMjEgKzU5MywyMyBAQAogCWhiZSA9IGh0OwogCiAJaWYgKChpbmZvLT52YXIudm1vZGUgJiBGQl9WTU9ERV9NQVNLKSA9PSBGQl9WTU9ERV9ET1VCTEUpIHsKLQkJdmJzID0gdmQgPSAoaW5mby0+dmFyLnlyZXMgPDwgMSkgLSAxOworCQl2ZCA9IChpbmZvLT52YXIueXJlcyA8PCAxKSAtIDE7CiAJCXZzICA9IHZkICsgKGluZm8tPnZhci5sb3dlcl9tYXJnaW4gPDwgMSk7CiAJCXZlICA9IHZzICsgKGluZm8tPnZhci52c3luY19sZW4gPDwgMSk7Ci0JCXZiZSA9IHZ0ID0gdmUgKyAoaW5mby0+dmFyLnVwcGVyX21hcmdpbiA8PCAxKSAtIDE7CisJCXZ0ID0gdmUgKyAoaW5mby0+dmFyLnVwcGVyX21hcmdpbiA8PCAxKSAtIDE7CiAJCXJlZy5zY3JlZW5zaXplID0gaW5mby0+dmFyLnhyZXMgfCAoaW5mby0+dmFyLnlyZXMgPDwgMTMpOwogCQlyZWcudmlkY2ZnIHw9IFZJRENGR19IQUxGX01PREU7CiAJCXJlZy5jcnRbMHgwOV0gPSAweDgwOwogCX0gZWxzZSB7Ci0JCXZicyA9IHZkID0gaW5mby0+dmFyLnlyZXMgLSAxOworCQl2ZCA9IGluZm8tPnZhci55cmVzIC0gMTsKIAkJdnMgID0gdmQgKyBpbmZvLT52YXIubG93ZXJfbWFyZ2luOwogCQl2ZSAgPSB2cyArIGluZm8tPnZhci52c3luY19sZW47Ci0JCXZiZSA9IHZ0ID0gdmUgKyBpbmZvLT52YXIudXBwZXJfbWFyZ2luIC0gMTsKKwkJdnQgPSB2ZSArIGluZm8tPnZhci51cHBlcl9tYXJnaW4gLSAxOwogCQlyZWcuc2NyZWVuc2l6ZSA9IGluZm8tPnZhci54cmVzIHwgKGluZm8tPnZhci55cmVzIDw8IDEyKTsKIAkJcmVnLnZpZGNmZyAmPSB+VklEQ0ZHX0hBTEZfTU9ERTsKIAl9CisJdmJzID0gdmQ7CisJdmJlID0gdnQ7CiAKIAkvKiB0aGlzIGlzIGFsbCBwcmV0dHkgc3RhbmRhcmQgVkdBIHJlZ2lzdGVyIHN0dWZmaW5nICovCiAJcmVnLm1pc2NbMHgwMF0gPSAweDBmIHwKQEAgLTczNiw3ICs3NDIsNyBAQAogfQogCiAvKiBBIGhhbmR5IG1hY3JvIHNoYW1lbGVzc2x5IHBpbmNoZWQgZnJvbSBtYXRyb3hmYiAqLwotI2RlZmluZSBDTlZUX1RPSFcodmFsLCB3aWR0aCkgKCgoKHZhbCk8PCh3aWR0aCkpKzB4N0ZGRi0odmFsKSk+PjE2KQorI2RlZmluZSBDTlZUX1RPSFcodmFsLCB3aWR0aCkgKCgoKHZhbCkgPDwgKHdpZHRoKSkgKyAweDdGRkYgLSAodmFsKSkgPj4gMTYpCiAKIHN0YXRpYyBpbnQgdGRmeGZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJCSAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCkBAIC03NTEsMTQgKzc1NywxNiBAQAogCS8qIGdyYXlzY2FsZSB3b3JrcyBvbmx5IHBhcnRpYWxseSB1bmRlciBkaXJlY3Rjb2xvciAqLwogCWlmIChpbmZvLT52YXIuZ3JheXNjYWxlKSB7CiAJCS8qIGdyYXlzY2FsZSA9IDAuMzAqUiArIDAuNTkqRyArIDAuMTEqQiAqLwotCQlyZWQgPSBncmVlbiA9IGJsdWUgPSAocmVkICogNzcgKyBncmVlbiAqIDE1MSArIGJsdWUgKiAyOCkgPj4gODsKKwkJYmx1ZSA9IChyZWQgKiA3NyArIGdyZWVuICogMTUxICsgYmx1ZSAqIDI4KSA+PiA4OworCQlncmVlbiA9IGJsdWU7CisJCXJlZCA9IGJsdWU7CiAJfQogCiAJc3dpdGNoIChpbmZvLT5maXgudmlzdWFsKSB7CiAJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6Ci0JCXJnYmNvbCA9KCgodTMyKXJlZCAgICYgMHhmZjAwKSA8PCA4KSB8Ci0JCQkoKCh1MzIpZ3JlZW4gJiAweGZmMDApIDw8IDApIHwKLQkJCSgoKHUzMilibHVlICAmIDB4ZmYwMCkgPj4gOCk7CisJCXJnYmNvbCA9ICgoKHUzMilyZWQgICAmIDB4ZmYwMCkgPDwgOCkgfAorCQkJICgoKHUzMilncmVlbiAmIDB4ZmYwMCkgPDwgMCkgfAorCQkJICgoKHUzMilibHVlICAmIDB4ZmYwMCkgPj4gOCk7CiAJCWRvX3NldHBhbGVudHJ5KHBhciwgcmVnbm8sIHJnYmNvbCk7CiAJCWJyZWFrOwogCS8qIFRydWVjb2xvciBoYXMgbm8gaGFyZHdhcmUgY29sb3IgcGFsZXR0ZXMuICovCkBAIC04NTEsNyArODU5LDcgQEAKIAlzdHJ1Y3QgdGRmeF9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAl1MzIgYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOwogCXUzMiBzdHJpZGUgPSBpbmZvLT5maXgubGluZV9sZW5ndGg7Ci0JdTMyIGZtdD0gc3RyaWRlIHwgKChicHAgKyAoKGJwcCA9PSA4KSA/IDAgOiA4KSkgPDwgMTMpOworCXUzMiBmbXQgPSBzdHJpZGUgfCAoKGJwcCArICgoYnBwID09IDgpID8gMCA6IDgpKSA8PCAxMyk7CiAJaW50IHRkZnhfcm9wOwogCXUzMiBkeCA9IHJlY3QtPmR4OwogCXUzMiBkeSA9IHJlY3QtPmR5OwpAQCAtOTIyLDEzICs5MzAsMTMgQEAKIAl9CiAKIAlpZiAoYXJlYS0+c3ggPD0gYXJlYS0+ZHgpIHsKLQkJLy8tWAorCQkvKiAtWCAqLwogCQlibGl0Y21kIHw9IEJJVCgxNCk7CiAJCXN4ICs9IGFyZWEtPndpZHRoIC0gMTsKIAkJZHggKz0gYXJlYS0+d2lkdGggLSAxOwogCX0KIAlpZiAoYXJlYS0+c3kgPD0gYXJlYS0+ZHkpIHsKLQkJLy8tWQorCQkvKiAtWSAqLwogCQlibGl0Y21kIHw9IEJJVCgxNSk7CiAJCXN5ICs9IGFyZWEtPmhlaWdodCAtIDE7CiAJCWR5ICs9IGFyZWEtPmhlaWdodCAtIDE7CkBAIC05NjEsOSArOTY5LDEzIEBACiAJdTMyIGRzdGJhc2UgPSAwOwogCiAJaWYgKGltYWdlLT5kZXB0aCAhPSAxKSB7Ci0JCS8vYmFuc2hlZV9tYWtlX3Jvb20ocGFyLCA2ICsgKChzaXplICsgMykgPj4gMikpOwotCQkvL3NyY2ZtdCA9IHN0cmlkZSB8ICgoYnBwKygoYnBwPT04KSA/IDAgOiA4KSkgPDwgMTMpIHwgMHg0MDAwMDA7CisjaWZkZWYgQlJPS0VOX0NPREUKKwkJYmFuc2hlZV9tYWtlX3Jvb20ocGFyLCA2ICsgKChzaXplICsgMykgPj4gMikpOworCQlzcmNmbXQgPSBzdHJpZGUgfCAoKGJwcCArICgoYnBwID09IDgpID8gMCA6IDgpKSA8PCAxMykgfAorCQkJMHg0MDAwMDA7CisjZWxzZQogCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKyNlbmRpZgogCQlyZXR1cm47CiAJfQogCWJhbnNoZWVfbWFrZV9yb29tKHBhciwgOSk7CkBAIC05OTgsNyArMTAxMCw4IEBACiAJdGRmeF9vdXRsKHBhciwgRFNUQkFTRSwgZHN0YmFzZSk7CiAJdGRmeF9vdXRsKHBhciwgU1JDWFksIDApOwogCXRkZnhfb3V0bChwYXIsIERTVFhZLCBkeCB8IChkeSA8PCAxNikpOwotCXRkZnhfb3V0bChwYXIsIENPTU1BTkRfMkQsIENPTU1BTkRfMkRfSDJTX0JJVEJMVCB8IChUREZYX1JPUF9DT1BZIDw8IDI0KSk7CisJdGRmeF9vdXRsKHBhciwgQ09NTUFORF8yRCwKKwkJICBDT01NQU5EXzJEX0gyU19CSVRCTFQgfCAoVERGWF9ST1BfQ09QWSA8PCAyNCkpOwogCXRkZnhfb3V0bChwYXIsIFNSQ0ZPUk1BVCwgc3JjZm10KTsKIAl0ZGZ4X291dGwocGFyLCBEU1RGT1JNQVQsIGRzdGZtdCk7CiAJdGRmeF9vdXRsKHBhciwgRFNUU0laRSwgaW1hZ2UtPndpZHRoIHwgKGltYWdlLT5oZWlnaHQgPDwgMTYpKTsKQEAgLTEwMTMsNyArMTAyNiw3IEBACiAJCQlmaWZvX2ZyZWUgPSAzMTsKIAkJCWJhbnNoZWVfbWFrZV9yb29tKHBhciwgZmlmb19mcmVlKTsKIAkJfQotCQl0ZGZ4X291dGwocGFyLCBMQVVOQ0hfMkQsICoodTMyKiljaGFyZGF0YSk7CisJCXRkZnhfb3V0bChwYXIsIExBVU5DSF8yRCwgKih1MzIgKiljaGFyZGF0YSk7CiAJCWNoYXJkYXRhICs9IDQ7CiAJfQogCkBAIC0xMDI2LDExICsxMDM5LDExIEBACiAJCXRkZnhfb3V0bChwYXIsIExBVU5DSF8yRCwgKmNoYXJkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQl0ZGZ4X291dGwocGFyLCBMQVVOQ0hfMkQsICoodTE2KiljaGFyZGF0YSk7CisJCXRkZnhfb3V0bChwYXIsIExBVU5DSF8yRCwgKih1MTYgKiljaGFyZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKIAkJdGRmeF9vdXRsKHBhciwgTEFVTkNIXzJELAotCQkJKih1MTYqKWNoYXJkYXRhIHwgKChjaGFyZGF0YVszXSkgPDwgMjQpKTsKKwkJCSoodTE2ICopY2hhcmRhdGEgfCAoY2hhcmRhdGFbM10gPDwgMjQpKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTE3NSw4ICsxMTg4LDkgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgZXJyLCBscGl0Y2g7CiAKLQlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0ZGZ4ZmI6IENhbid0IGVuYWJsZSBwZGV2OiAlZFxuIiwgZXJyKTsKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGRmeGZiOiBDYW4ndCBlbmFibGUgcGRldjogJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xMjA3LDMzICsxMjIxLDM2IEBACiAJdGRmeF9maXgubW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHRkZnhfZml4Lm1taW9fc3RhcnQsIHRkZnhfZml4Lm1taW9fbGVuLAogCQkJCSJ0ZGZ4IHJlZ2Jhc2UiKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0ZGZ4ZmI6IENhbid0IHJlc2VydmUgcmVnYmFzZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAidGRmeGZiOiBDYW4ndCByZXNlcnZlIHJlZ2Jhc2VcbiIpOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCiAJZGVmYXVsdF9wYXItPnJlZ2Jhc2VfdmlydCA9CiAJCWlvcmVtYXBfbm9jYWNoZSh0ZGZ4X2ZpeC5tbWlvX3N0YXJ0LCB0ZGZ4X2ZpeC5tbWlvX2xlbik7CiAJaWYgKCFkZWZhdWx0X3Bhci0+cmVnYmFzZV92aXJ0KSB7Ci0JCXByaW50aygiZmI6IENhbid0IHJlbWFwICVzIHJlZ2lzdGVyIGFyZWEuXG4iLCB0ZGZ4X2ZpeC5pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiZmI6IENhbid0IHJlbWFwICVzIHJlZ2lzdGVyIGFyZWEuXG4iLAorCQkJCXRkZnhfZml4LmlkKTsKIAkJZ290byBvdXRfZXJyX3JlZ2Jhc2U7CiAJfQogCiAJdGRmeF9maXguc21lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQlpZiAoISh0ZGZ4X2ZpeC5zbWVtX2xlbiA9IGRvX2xmYl9zaXplKGRlZmF1bHRfcGFyLCBwZGV2LT5kZXZpY2UpKSkgewotCQlwcmludGsoImZiOiBDYW4ndCBjb3VudCAlcyBtZW1vcnkuXG4iLCB0ZGZ4X2ZpeC5pZCk7CisJdGRmeF9maXguc21lbV9sZW4gPSBkb19sZmJfc2l6ZShkZWZhdWx0X3BhciwgcGRldi0+ZGV2aWNlKTsKKwlpZiAoIXRkZnhfZml4LnNtZW1fbGVuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmI6IENhbid0IGNvdW50ICVzIG1lbW9yeS5cbiIsIHRkZnhfZml4LmlkKTsKIAkJZ290byBvdXRfZXJyX3JlZ2Jhc2U7CiAJfQogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24odGRmeF9maXguc21lbV9zdGFydCwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLCAidGRmeCBzbWVtIikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidGRmeGZiOiBDYW4ndCByZXNlcnZlIHNtZW1cbiIpOworCQlwcmludGsoS0VSTl9FUlIgInRkZnhmYjogQ2FuJ3QgcmVzZXJ2ZSBzbWVtXG4iKTsKIAkJZ290byBvdXRfZXJyX3JlZ2Jhc2U7CiAJfQogCiAJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUodGRmeF9maXguc21lbV9zdGFydCwKIAkJCQkJICAgIHRkZnhfZml4LnNtZW1fbGVuKTsKIAlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7Ci0JCXByaW50aygiZmI6IENhbid0IHJlbWFwICVzIGZyYW1lYnVmZmVyLlxuIiwgdGRmeF9maXguaWQpOworCQlwcmludGsoS0VSTl9FUlIgImZiOiBDYW4ndCByZW1hcCAlcyBmcmFtZWJ1ZmZlci5cbiIsCisJCQkJdGRmeF9maXguaWQpOwogCQlnb3RvIG91dF9lcnJfc2NyZWVuYmFzZTsKIAl9CiAKQEAgLTEyNDEsMTEgKzEyNTgsMTIgQEAKIAogCWlmICghcmVxdWVzdF9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLAogCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMiksICJ0ZGZ4IGlvYmFzZSIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInRkZnhmYjogQ2FuJ3QgcmVzZXJ2ZSBpb2Jhc2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInRkZnhmYjogQ2FuJ3QgcmVzZXJ2ZSBpb2Jhc2VcbiIpOwogCQlnb3RvIG91dF9lcnJfc2NyZWVuYmFzZTsKIAl9CiAKLQlwcmludGsoImZiOiAlcyBtZW1vcnkgPSAlZEtcbiIsIHRkZnhfZml4LmlkLCB0ZGZ4X2ZpeC5zbWVtX2xlbiA+PiAxMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZmI6ICVzIG1lbW9yeSA9ICVkS1xuIiwgdGRmeF9maXguaWQsCisJCQl0ZGZ4X2ZpeC5zbWVtX2xlbiA+PiAxMCk7CiAKIAlkZWZhdWx0X3Bhci0+bXRycl9oYW5kbGUgPSAtMTsKIAlpZiAoIW5vbXRycikKQEAgLTEyNjEsNyArMTI3OSw3IEBACiAJaW5mby0+cHNldWRvX3BhbGV0dGUJPSBkZWZhdWx0X3Bhci0+cGFsZXR0ZTsKIAlpbmZvLT5mbGFncwkJPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX1lQQU47CiAjaWZkZWYgQ09ORklHX0ZCXzNERlhfQUNDRUwKLQlpbmZvLT5mbGFncyAgICAgICAgICAgICB8PSBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVCB8CisJaW5mby0+ZmxhZ3MJCXw9IEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwKIAkJCQkgICBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8CiAJCQkJICAgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUIHwKIAkJCQkgICBGQklORk9fUkVBRFNfRkFTVDsKQEAgLTEyODYsMTIgKzEzMDQsMTIgQEAKIAkJZ290byBvdXRfZXJyX2lvYmFzZTsKIAogCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0ZGZ4ZmI6IENhbid0IGFsbG9jYXRlIGNvbG9yIG1hcFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAidGRmeGZiOiBDYW4ndCBhbGxvY2F0ZSBjb2xvciBtYXBcbiIpOwogCQlnb3RvIG91dF9lcnJfaW9iYXNlOwogCX0KIAogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKLQkJcHJpbnRrKCJ0ZGZ4ZmI6IGNhbid0IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZGZ4ZmI6IGNhbid0IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKIAkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAkJZ290byBvdXRfZXJyX2lvYmFzZTsKIAl9Cg==