ZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9meGVkaXQvZnhldF9saXN0LmggYi9mcGRmc2RrL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfbGlzdC5oCmluZGV4IDExNTdiYmUuLjViZjIwNjkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9meGVkaXQvZnhldF9saXN0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2Z4ZWRpdC9meGV0X2xpc3QuaApAQCAtMSw3ICsxLDcgQEAKIC8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLSAKKwogLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KIAogI2lmbmRlZiBfRlhFVF9MSVNUX0hfCkBAIC0xNSwxMSArMTUsMTEgQEAKIHsKIHB1YmxpYzoKIAlDTFNUX1NpemUoKSA6IHgoMC4wZiksIHkoMC4wZikKLQl7CQkKKwl7CiAJfQogCiAJQ0xTVF9TaXplKEZYX0ZMT0FUIHgsRlhfRkxPQVQgeSkKLQl7IAorCXsKIAkJdGhpcy0+eCA9IHg7CiAJCXRoaXMtPnkgPSB5OwogCX0KQEAgLTQyLDI1ICs0MiwyNSBAQAogewogcHVibGljOgogCUNMU1RfUmVjdCgpCi0JewkKKwl7CiAJCWxlZnQgPSB0b3AgPSByaWdodCA9IGJvdHRvbSA9IDAuMGY7CiAJfQogCiAJQ0xTVF9SZWN0KEZYX0ZMT0FUIGxlZnQsRlhfRkxPQVQgdG9wLAogCQkJCQkJRlhfRkxPQVQgcmlnaHQsRlhfRkxPQVQgYm90dG9tKQotCXsgCi0JCXRoaXMtPmxlZnQgPSBsZWZ0OyAKLQkJdGhpcy0+dG9wID0gdG9wOyAKLQkJdGhpcy0+cmlnaHQgPSByaWdodDsgCi0JCXRoaXMtPmJvdHRvbSA9IGJvdHRvbTsgCisJeworCQl0aGlzLT5sZWZ0ID0gbGVmdDsKKwkJdGhpcy0+dG9wID0gdG9wOworCQl0aGlzLT5yaWdodCA9IHJpZ2h0OworCQl0aGlzLT5ib3R0b20gPSBib3R0b207CiAJfQogCiAJQ0xTVF9SZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpCi0JeyAKLQkJdGhpcy0+bGVmdCA9IHJlY3QubGVmdDsgCi0JCXRoaXMtPnRvcCA9IHJlY3QudG9wOyAKLQkJdGhpcy0+cmlnaHQgPSByZWN0LnJpZ2h0OyAKLQkJdGhpcy0+Ym90dG9tID0gcmVjdC5ib3R0b207IAorCXsKKwkJdGhpcy0+bGVmdCA9IHJlY3QubGVmdDsKKwkJdGhpcy0+dG9wID0gcmVjdC50b3A7CisJCXRoaXMtPnJpZ2h0ID0gcmVjdC5yaWdodDsKKwkJdGhpcy0+Ym90dG9tID0gcmVjdC5ib3R0b207CiAJfQogCiAJdm9pZCBEZWZhdWx0KCkKQEAgLTExMSw3ICsxMTEsNyBAQAogCQlyZXR1cm4gQ1BERl9Qb2ludChyaWdodCxib3R0b20pOwogCX0KIAotCWNvbnN0IENMU1RfUmVjdCBvcGVyYXRvciArPSAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSAKKwljb25zdCBDTFNUX1JlY3Qgb3BlcmF0b3IgKz0gKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkKIAl7CiAJCXRoaXMtPmxlZnQgKz0gcG9pbnQueDsKIAkJdGhpcy0+cmlnaHQgKz0gcG9pbnQueDsKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQlyZXR1cm4gKnRoaXM7CiAJfQogCi0JY29uc3QgQ0xTVF9SZWN0IG9wZXJhdG9yIC09IChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIAorCWNvbnN0IENMU1RfUmVjdCBvcGVyYXRvciAtPSAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQogCXsKIAkJdGhpcy0+bGVmdCAtPSBwb2ludC54OwogCQl0aGlzLT5yaWdodCAtPSBwb2ludC54OwpAQCAtMTU5LDggKzE1OSw4IEBACiAJSUZYX0VkaXQqCQkJCQkJR2V0RWRpdCgpIGNvbnN0OwogCiBwdWJsaWM6Ci0Jdm9pZAkJCQkJCQlTZXRSZWN0KGNvbnN0IENMU1RfUmVjdCAmIHJlY3QpOwkJCi0Jdm9pZAkJCQkJCQlTZXRTZWxlY3QoRlhfQk9PTCBiU2VsZWN0ZWQpOwkKKwl2b2lkCQkJCQkJCVNldFJlY3QoY29uc3QgQ0xTVF9SZWN0ICYgcmVjdCk7CisJdm9pZAkJCQkJCQlTZXRTZWxlY3QoRlhfQk9PTCBiU2VsZWN0ZWQpOwogCXZvaWQJCQkJCQkJU2V0Q2FyZXQoRlhfQk9PTCBiQ2FyZXQpOwogCXZvaWQJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIHRleHQpOwogCXZvaWQJCQkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKTsKQEAgLTE2OSwxNCArMTY5LDE0IEBACiAJQ0xTVF9SZWN0CQkJCQkJR2V0UmVjdCgpIGNvbnN0OwogCUZYX0JPT0wJCQkJCQkJSXNTZWxlY3RlZCgpIGNvbnN0OwogCUZYX0JPT0wJCQkJCQkJSXNDYXJldCgpIGNvbnN0OwotCUZYX0ZMT0FUCQkJCQkJR2V0SXRlbUhlaWdodCgpIGNvbnN0OwkKKwlGWF9GTE9BVAkJCQkJCUdldEl0ZW1IZWlnaHQoKSBjb25zdDsKIAlGWF9XT1JECQkJCQkJCUdldEZpcnN0Q2hhcigpIGNvbnN0OwogCiBwcml2YXRlOgogCUlGWF9FZGl0KgkJCQkJCW1fcEVkaXQ7Ci0JRlhfQk9PTAkJCQkJCQltX2JTZWxlY3RlZDsJCS8vyse38dGh1tAKLQlGWF9CT09MCQkJCQkJCW1fYkNhcmV0OwkJLy/Kx7fxzqq9ubXjo6y24NGhyrHTwwotCUNMU1RfUmVjdAkJCQkJCW1fcmNMaXN0SXRlbTsJLy/E2rK/1/ix6gorCUZYX0JPT0wJCQkJCQkJbV9iU2VsZWN0ZWQ7CisJRlhfQk9PTAkJCQkJCQltX2JDYXJldDsKKwlDTFNUX1JlY3QJCQkJCQltX3JjTGlzdEl0ZW07CiB9OwogCiBjbGFzcyBDRlhfTGlzdENvbnRhaW5lcgpAQCAtMjAwLDEzICsyMDAsMTMgQEAKIAkJCQkJCQkJCQkJCQkJCQkJCQlDUERGX1BvaW50IHB0UmlnaHRCb3R0b20gPSBPdXRlclRvSW5uZXIoQ1BERl9Qb2ludChyZWN0LnJpZ2h0LHJlY3QuYm90dG9tKSk7CiAJCQkJCQkJCQkJCQkJCQkJCQkJcmV0dXJuIENMU1RfUmVjdChwdExlZnRUb3AueCxwdExlZnRUb3AueSxwdFJpZ2h0Qm90dG9tLngscHRSaWdodEJvdHRvbS55KTt9CiBwcml2YXRlOgotCUNQREZfUmVjdAkJCQkJCW1fcmNQbGF0ZTsgCQorCUNQREZfUmVjdAkJCQkJCW1fcmNQbGF0ZTsKIAlDTFNUX1JlY3QJCQkJCQltX3JjQ29udGVudDsJCS8vcG9zaXRpdmUgZm9yZXZlciEKIH07CiAKIHRlbXBsYXRlPGNsYXNzIFRZUEU+IGNsYXNzIENMU1RfQXJyYXlUZW1wbGF0ZSA6IHB1YmxpYyBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPgogewotcHVibGljOgkKK3B1YmxpYzoKIAlGWF9CT09MIElzRW1wdHkoKSB7IHJldHVybiBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPjo6R2V0U2l6ZSgpIDw9IDA7IH0KIAlUWVBFIEdldEF0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QgeyBpZiAobkluZGV4ID49IDAgJiYgbkluZGV4IDwgQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT46OkdldFNpemUoKSkgcmV0dXJuIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRBdChuSW5kZXgpOyByZXR1cm4gTlVMTDt9CiAJdm9pZCBSZW1vdmVBdChGWF9JTlQzMiBuSW5kZXgpe2lmIChuSW5kZXggPj0gMCAmJiBuSW5kZXggPCBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPjo6R2V0U2l6ZSgpKSBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPjo6UmVtb3ZlQXQobkluZGV4KTt9CkBAIC0yMzAsMzQgKzIzMCwzNCBAQAogCXZpcnR1YWwgRlhfSU5UMzIJCQkJR2V0Q291bnQoKSBjb25zdDsKIAl2aXJ0dWFsIEZYX0JPT0wJCQkJCUlzSXRlbVNlbGVjdGVkKEZYX0lOVDMyIG5JbmRleCkgY29uc3Q7CiAJdmlydHVhbCBGWF9GTE9BVAkJCQlHZXRGaXJzdEhlaWdodCgpIGNvbnN0OwotCQorCiAJdmlydHVhbCB2b2lkCQkJCQlTZXRNdWx0aXBsZVNlbChGWF9CT09MIGJNdWx0aXBsZSk7Ci0JdmlydHVhbCBGWF9CT09MCQkJCQlJc011bHRpcGxlU2VsKCkgY29uc3Q7CQorCXZpcnR1YWwgRlhfQk9PTAkJCQkJSXNNdWx0aXBsZVNlbCgpIGNvbnN0OwogCXZpcnR1YWwgRlhfQk9PTAkJCQkJSXNWYWxpZChGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsKLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCUZpbmROZXh0KEZYX0lOVDMyIG5JbmRleCxGWF9XQ0hBUiBuQ2hhcikgY29uc3Q7CQorCXZpcnR1YWwgRlhfSU5UMzIJCQkJRmluZE5leHQoRlhfSU5UMzIgbkluZGV4LEZYX1dDSEFSIG5DaGFyKSBjb25zdDsKIAogcHJvdGVjdGVkOgogCXZpcnR1YWwgdm9pZAkJCQkJRW1wdHkoKTsKIAogCXZvaWQJCQkJCQkJQWRkSXRlbShGWF9MUENXU1RSIHN0cik7Ci0JdmlydHVhbCB2b2lkCQkJCQlSZUFycmFuZ2UoRlhfSU5UMzIgbkl0ZW1JbmRleCk7CQorCXZpcnR1YWwgdm9pZAkJCQkJUmVBcnJhbmdlKEZYX0lOVDMyIG5JdGVtSW5kZXgpOwogCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0SXRlbVJlY3QoRlhfSU5UMzIgbkluZGV4KSBjb25zdDsJCisJdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0SXRlbVJlY3QoRlhfSU5UMzIgbkluZGV4KSBjb25zdDsKIAlDRlhfV2lkZVN0cmluZwkJCQkJR2V0SXRlbVRleHQoRlhfSU5UMzIgbkluZGV4KSBjb25zdDsKIAogCXZvaWQJCQkJCQkJU2V0SXRlbVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCk7CiAJdm9pZAkJCQkJCQlTZXRJdGVtQ2FyZXQoRlhfSU5UMzIgbkl0ZW1JbmRleCwgRlhfQk9PTCBiQ2FyZXQpOwogCi0JdmlydHVhbCBGWF9JTlQzMgkJCQlHZXRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsJCQorCXZpcnR1YWwgRlhfSU5UMzIJCQkJR2V0SXRlbUluZGV4KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7CiAJRlhfSU5UMzIJCQkJCQlHZXRGaXJzdFNlbGVjdGVkKCkgY29uc3Q7CiAJRlhfSU5UMzIJCQkJCQlHZXRMYXN0U2VsZWN0ZWQoKSBjb25zdDsKIAlGWF9XQ0hBUgkJCQkJCVRvdXBwZXIoRlhfV0NIQVIgYykgY29uc3Q7Ci0JCQorCiBwcml2YXRlOgogCUNMU1RfQXJyYXlUZW1wbGF0ZTxDRlhfTGlzdEl0ZW0qPgltX2FMaXN0SXRlbXM7CiAJRlhfRkxPQVQJCQkJCQkJbV9mRm9udFNpemU7CiAJSUZYX0VkaXRfRm9udE1hcCoJCQkJCW1fcEZvbnRNYXA7Ci0JRlhfQk9PTAkJCQkJCQkJbV9iTXVsdGlwbGU7CQorCUZYX0JPT0wJCQkJCQkJCW1fYk11bHRpcGxlOwogfTsKIAogc3RydWN0IENQTFNUX1NlbGVjdF9JdGVtCkBAIC0zMjUsMTMgKzMyNSwxMyBAQAogCXZvaWQJCQkJCQkJU2Nyb2xsVG9MaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KTsKIAl2aXJ0dWFsIENQREZfUmVjdAkJCQlHZXRJdGVtUmVjdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0OwogCUZYX0lOVDMyCQkJCQkJR2V0Q2FyZXQoKSBjb25zdCB7cmV0dXJuIG1fbkNhcmV0SW5kZXg7fQotCUZYX0lOVDMyCQkJCQkJR2V0U2VsZWN0KCkgY29uc3Qge3JldHVybiBtX25TZWxJdGVtO30JCisJRlhfSU5UMzIJCQkJCQlHZXRTZWxlY3QoKSBjb25zdCB7cmV0dXJuIG1fblNlbEl0ZW07fQogCUZYX0lOVDMyCQkJCQkJR2V0VG9wSXRlbSgpIGNvbnN0OwogCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldENvbnRlbnRSZWN0KCkgY29uc3Q7CiAJdmlydHVhbCBGWF9JTlQzMgkJCQlHZXRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsKIAogCXZvaWQJCQkJCQkJQWRkU3RyaW5nKEZYX0xQQ1dTVFIgc3RyaW5nKTsKLQl2b2lkCQkJCQkJCVNldFRvcEl0ZW0oRlhfSU5UMzIgbkluZGV4KTsJCisJdm9pZAkJCQkJCQlTZXRUb3BJdGVtKEZYX0lOVDMyIG5JbmRleCk7CiAJdm9pZAkJCQkJCQlTZWxlY3QoRlhfSU5UMzIgbkl0ZW1JbmRleCk7CiAJdmlydHVhbCB2b2lkCQkJCQlTZXRDYXJldChGWF9JTlQzMiBuSXRlbUluZGV4KTsKIAl2aXJ0dWFsIHZvaWQJCQkJCUVtcHR5KCk7CkBAIC0zNDMsMTAgKzM0MywxMCBAQAogCXZvaWQJCQkJCQkJU2V0U2luZ2xlU2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpOwogCXZvaWQJCQkJCQkJSW52YWxpZGF0ZUl0ZW0oRlhfSU5UMzIgbkl0ZW1JbmRleCk7CiAJdm9pZAkJCQkJCQlTZWxlY3RJdGVtcygpOwotCUZYX0JPT0wJCQkJCQkJSXNJdGVtVmlzaWJsZShGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsJCQorCUZYX0JPT0wJCQkJCQkJSXNJdGVtVmlzaWJsZShGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsKIAl2b2lkCQkJCQkJCVNldFNjcm9sbEluZm8oKTsKIAl2b2lkCQkJCQkJCVNldFNjcm9sbFBvc1koRlhfRkxPQVQgZnkpOwotCXZpcnR1YWwgdm9pZAkJCQkJUmVBcnJhbmdlKEZYX0lOVDMyIG5JdGVtSW5kZXgpOwkKKwl2aXJ0dWFsIHZvaWQJCQkJCVJlQXJyYW5nZShGWF9JTlQzMiBuSXRlbUluZGV4KTsKIAogcHJpdmF0ZToKIAlJRlhfTGlzdF9Ob3RpZnkqCQkJCW1fcE5vdGlmeTsKQEAgLTM2MCw0ICszNjAsMyBAQAogfTsKIAogI2VuZGlmCi0K