ZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ2c2ltL2xpYnZzaW0uYyBiL2FwL2xpYi9saWJ2c2ltL2xpYnZzaW0uYwppbmRleCAyMjA2N2NkLi5lMGYyNzViIDEwMDc1NQotLS0gYS9hcC9saWIvbGlidnNpbS9saWJ2c2ltLmMKKysrIGIvYXAvbGliL2xpYnZzaW0vbGlidnNpbS5jCkBAIC0zNyw3ICszNyw5IEBACiBpbnQgZ19yZWFkX3RocmVhZF9zdGF0ZSA9IC0xOwogaW50IGdfbXNnX3RocmVhZF9zdGF0ZSA9IC0xOwogVlNJTV9DT01NQU5EIGdfdnNpbV9hcGR1X3Byb2Nlc3NfY2I7CitTb2Z0U2ltX0NPTU1BTkQgZ19zb2Z0c2ltX2FwZHVfcHJvY2Vzc19jYjsKIHp0ZV9tZG1fZXZlbnRfaW5kX2NhbGxiYWNrIGdfdnNpbV9ldmVudF9pbmRfY2I7Cit1bnNpZ25lZCBjaGFyIGdfdnNpbV9zbG90WzJdOwogCiBpbnQzMl90IHp0ZV9tZG1fZXZlbnRfaW5kX2NiKEVfTU9ERU1fRVZFTlRfSUQgZXZlbnRfaWQsIHZvaWQgKmluZF9kYXRhLCB1aW50MzJfdCAgaW5kX2RhdGFfbGVuKQogewpAQCAtMTI1LDcgKzEyNyw3IEBACiBzdGF0aWMgdm9pZCByZWFkX3RocmVhZF9lbnRyeSh2b2lkICphcmcpCiB7CiAJcHJjdGwoUFJfU0VUX05BTUUsICJ2c2ltX3JlYWQiLCAwLCAwLCAwKTsKLQl3aGlsZShnX3ZzaW1fYXBkdV9wcm9jZXNzX2NiKQorCXdoaWxlKGdfdnNpbV9ldmVudF9pbmRfY2IpCiAJewogCQlWU0lNX01TR19CVUYgbXNnX2luID0gezB9OwogCQlWU0lNX01TR19CVUYgbXNnX291dCA9IHswfTsKQEAgLTE1MCw4ICsxNTIsMTQgQEAKIAkJCXZzaW1fc2V0KE1TR19DTURfVlNJTV9TRVRfU1RBTkRCWSwwKTsKIAkJfQogCQltc2dfaW4udXNEYXRhTGVuID0gc2l6ZW9mKG1zZ19pbi5hdWNEYXRhQnVmKTsKLQkJcmV0ID0gZ192c2ltX2FwZHVfcHJvY2Vzc19jYigmbXNnX291dC5hdWNEYXRhQnVmWzJdLCBtc2dfb3V0LnVzRGF0YUxlbiwgbXNnX2luLmF1Y0RhdGFCdWYsIAotCQkmbXNnX2luLnVzRGF0YUxlbiwgbXNnX291dC5hdWNEYXRhQnVmWzBdKTsKKwkJaWYoZ192c2ltX2FwZHVfcHJvY2Vzc19jYiAmJiBtc2dfb3V0LmF1Y0RhdGFCdWZbMF0gPCAyICYmIGdfdnNpbV9zbG90W21zZ19vdXQuYXVjRGF0YUJ1ZlswXV0gPT0gMSl7CisJCQlyZXQgPSBnX3ZzaW1fYXBkdV9wcm9jZXNzX2NiKCZtc2dfb3V0LmF1Y0RhdGFCdWZbMl0sIG1zZ19vdXQudXNEYXRhTGVuLCBtc2dfaW4uYXVjRGF0YUJ1ZiwgCisJCQkmbXNnX2luLnVzRGF0YUxlbiwgbXNnX291dC5hdWNEYXRhQnVmWzBdKTsKKwkJfQorCQlpZihnX3NvZnRzaW1fYXBkdV9wcm9jZXNzX2NiICYmIG1zZ19vdXQuYXVjRGF0YUJ1ZlswXSA8IDIgJiYgZ192c2ltX3Nsb3RbbXNnX291dC5hdWNEYXRhQnVmWzBdXSA9PSAyKXsKKwkJCXJldCA9IGdfc29mdHNpbV9hcGR1X3Byb2Nlc3NfY2IoJm1zZ19vdXQuYXVjRGF0YUJ1ZlsyXSwgbXNnX291dC51c0RhdGFMZW4sIG1zZ19pbi5hdWNEYXRhQnVmLCAKKwkJCSZtc2dfaW4udXNEYXRhTGVuLCBtc2dfb3V0LmF1Y0RhdGFCdWZbMF0pOworCQl9CiAJCXZzaW1fZGVidWdfcHJpbnRmKCIjI3ZzaW0jIyBnX3ZzaW1fYXBkdV9wcm9jZXNzX2NiIHJldD0weCV4IGxlbj0lZFxuIiwgcmV0LCBtc2dfaW4udXNEYXRhTGVuKTsKIAkJLy/H0NDpxOK/qAogCQlpZihpc19hdXRoKXsKQEAgLTIxNCw3ICsyMjIsMTEgQEAKIAkJCQkJY2hhciBpbWVpW109Ijg2Mjc2OTAyNTQzNTk1NiI7CiAJCQkJCWZpYm9fc2V0X0lNRUlfYnlfc2ltaWQoaW1laSxzaXplb2YoaW1laSksMSk7CiAJCQkJCWZpYm9fbWRtX2V2ZW50X3JlZ2lzdCh6dGVfbWRtX2V2ZW50X2luZF9jYik7Ci0JCQkJCWZpYm9fdnNpbV9pbml0KHp0ZV92c2ltX2luZF9jYiwxKTsKKwkJCQkJdnNpbV9zZXQoTVNHX0NNRF9WU0lNX1NFVF9TVEFOREJZLDEpOworCQkJCQl2c2ltX2NhcmRfc3dpdGNoX3JlcSgxKTsKKwkJCQkJdnNpbV9zZXQoTVNHX0NNRF9WU0lNX1NFVF9TV0lUQ0gsMSk7CisJCQkJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTFcclxuIiwgTlVMTCwgTlVMTCk7CisJCQkJCWdfdnNpbV9zbG90WzFdID0gMTsKIAkJCQl9CiAJCQkJaWYoc3RNc2cuYXVjRGF0YUJ1ZlswXSA9PSAyKXsKIAkJCQkJZmlib192c2ltX2Nsb3NlKHp0ZV92c2ltX2luZF9jYiwxKTsKQEAgLTI0Niw5ICsyNTgsMTMgQEAKIAogaW50MzJfdCB6dGVfYXRWc2ltSW5pdChWU0lNX0NPTU1BTkQgdnNpbV9hcGR1X3Byb2Nlc3NfZm4sIHVpbnQ4X3QgblNpbUlEKQogeworCWNoYXIgc3RhdFs0XSA9IHswfTsKKwkKKwlzY19jZmdfZ2V0KCJ2c2ltX3N0YXQiLHN0YXQsc2l6ZW9mKHN0YXQpKTsKIAl2c2ltX2RlYnVnX3ByaW50ZigiIyN2c2ltIyMgWyVzXSBzdGFydFxuIiwgX19GVU5DVElPTl9fKTsKLQlpZih2c2ltX2FwZHVfcHJvY2Vzc19mbiA9PSBOVUxMIHx8IG5TaW1JRCAhPSAxKXsKLQkJcHJpbnRmKCIjI3ZzaW0jIyBpbml0IHBhcmFtIGVyciBmbj0weCV4IHNpbT0lZFxuIiwgdnNpbV9hcGR1X3Byb2Nlc3NfZm4sIG5TaW1JRCk7CisJaWYodnNpbV9hcGR1X3Byb2Nlc3NfZm4gPT0gTlVMTCB8fCBuU2ltSUQgIT0gMSB8fCBnX3ZzaW1fYXBkdV9wcm9jZXNzX2NiIHx8IGF0b2koc3RhdCkpeworCQlwcmludGYoIiMjdnNpbSMjIGluaXQgcGFyYW0gZXJyIGZuPTB4JXggb2xkPTB4JXggc2ltPSVkIHN0YXQ9JWRcbiIsIAorCQkJdnNpbV9hcGR1X3Byb2Nlc3NfZm4sIGdfdnNpbV9hcGR1X3Byb2Nlc3NfY2IsIG5TaW1JRCwgYXRvaShzdGF0KSk7CiAJCXJldHVybiAtMTsKIAl9CiAJZ192c2ltX2FwZHVfcHJvY2Vzc19jYiA9IHZzaW1fYXBkdV9wcm9jZXNzX2ZuOwpAQCAtMjYwLDIzICsyNzYsMTEzIEBACiAJCXByaW50ZigiIyN2c2ltIyMgaW5pdCBmYWlsIHJlYWQ9JWQgbXNnPSVkXG4iLCBnX3JlYWRfdGhyZWFkX3N0YXRlLCBnX21zZ190aHJlYWRfc3RhdGUpOwogCQlyZXR1cm4gLTE7CiAJfQorCWdfdnNpbV9zbG90WzFdID0gMTsKKwlzY19jZmdfc2V0KCJ2c2ltX3N0YXQiLCIxIik7CiAJdnNpbV9zZXQoTVNHX0NNRF9WU0lNX1NFVF9TVEFOREJZLDEpOy8vtMvKsdTGv6jOtL2ozfjC58G0vdOjrM/Ix9DK/b7d1NnH0M34CiAJdnNpbV9jYXJkX3N3aXRjaF9yZXEoMSk7CiAJdnNpbV9zZXQoTVNHX0NNRF9WU0lNX1NFVF9TV0lUQ0gsMSk7CisJZ2V0X21vZGVtX2luZm8oIkFUK1pDQVJEU1dJVENIPTEsMVxyXG4iLCBOVUxMLCBOVUxMKTsKIAlnZXRfbW9kZW1faW5mbygiQVQrQ0ZVTj0xXHJcbiIsIE5VTEwsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi1pbnQzMl90IHp0ZV9hdFZzaW1DbG9zZShWU0lNX0NPTU1BTkQgdnNpbV9hcGR1X3Byb2Nlc3NfZm4sIHVpbnQ4X3QgblNpbUlEKQoraW50MzJfdCB6dGVfYXRTb2Z0U2ltSW5pdChTb2Z0U2ltX0NPTU1BTkQgc29mdHNzaW1fYXBkdV9wcm9jZXNzX2ZuLCB1aW50OF90IG5TaW1JRCkKK3sKKwljaGFyIHN0YXRbNF0gPSB7MH07CisJCisJc2NfY2ZnX2dldCgic29mdHNpbV9zdGF0IixzdGF0LHNpemVvZihzdGF0KSk7CisJdnNpbV9kZWJ1Z19wcmludGYoIiMjdnNpbSMjIFslc10gc3RhcnRcbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYoc29mdHNzaW1fYXBkdV9wcm9jZXNzX2ZuID09IE5VTEwgfHwgKG5TaW1JRCAhPSAxICYmIG5TaW1JRCAhPSAwKSB8fCBnX3NvZnRzaW1fYXBkdV9wcm9jZXNzX2NiIHx8IGF0b2koc3RhdCkpeworCQlwcmludGYoIiMjdnNpbSMjIHNvZnQgaW5pdCBwYXJhbSBlcnIgZm49MHgleCBvbGQ9MHgleCBzaW09JWRcbiIsIAorCQkJc29mdHNzaW1fYXBkdV9wcm9jZXNzX2ZuLCBnX3NvZnRzaW1fYXBkdV9wcm9jZXNzX2NiLCBuU2ltSUQsIGF0b2koc3RhdCkpOworCQlyZXR1cm4gLTE7CisJfQorCWdfdnNpbV9zbG90W25TaW1JRF0gPSAyOworCXNjX2NmZ19zZXQoInNvZnRzaW1fc3RhdCIsIjEiKTsKKwlnX3NvZnRzaW1fYXBkdV9wcm9jZXNzX2NiID0gc29mdHNzaW1fYXBkdV9wcm9jZXNzX2ZuOworCWlmKG5TaW1JRCl7CisJCXZzaW1fc2V0KE1TR19DTURfVlNJTV9TRVRfU1RBTkRCWSwxKTsvL7TLyrHUxr+ozrS9qM34wufBtL3To6zPyMfQyv2+3dTZx9DN+AorCQl2c2ltX2NhcmRfc3dpdGNoX3JlcSgxKTsKKwkJdnNpbV9zZXQoTVNHX0NNRF9WU0lNX1NFVF9TV0lUQ0gsMSk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtaQ0FSRFNXSVRDSD0yLDFcclxuIiwgTlVMTCwgTlVMTCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTFcclxuIiwgTlVMTCwgTlVMTCk7CisJfWVsc2V7CisJCXVpbnQ4X3Qgc2ltID0gMDsKKwkJdWludDhfdCByZXQgPSAwOworCQl6dGVfR2V0R1REVUFMU0lNKCZzaW0pOworCQlpZihzaW0gIT0gblNpbUlEKQorCQkJenRlX1NldEdURFVBTFNJTShuU2ltSUQpOworCQlyZXQgPSB2c2ltX2dldF9jYXJkc3RhdF9mcm9tcHMoKTsKKwkJaWYocmV0ID49IDAgJiYgblNpbUlEICE9IHJldCkKKwkJCXZzaW1fY2FyZF9zd2l0Y2hfcmVxKG5TaW1JRCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTBcclxuIiwgTlVMTCwgTlVMTCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTVcclxuIiwgTlVMTCwgTlVMTCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtaQ0FSRFNXSVRDSD0yLDBcclxuIiwgTlVMTCwgTlVMTCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTFcclxuIiwgTlVMTCwgTlVMTCk7CisJCWlmKHNpbSAhPSBuU2ltSUQpCisJCQl6dGVfU2V0R1REVUFMU0lNKHNpbSk7CisJCWlmKHJldCA+PSAwICYmIG5TaW1JRCAhPSByZXQpCisJCQl2c2ltX2NhcmRfc3dpdGNoX3JlcShyZXQpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50MzJfdCB6dGVfYXRTb2Z0U2ltQ2xvc2UoVlNJTV9DT01NQU5EIHZzaW1fYXBkdV9wcm9jZXNzX2ZuLCB1aW50OF90IG5TaW1JRCkKIHsKIAl2c2ltX2RlYnVnX3ByaW50ZigiIyN2c2ltIyMgWyVzXSBzdGFydFxuIiwgX19GVU5DVElPTl9fKTsKKwlpZihuU2ltSUQgIT0gMSAmJiBuU2ltSUQgIT0gMCl7CisJCXByaW50ZigiIyN2c2ltIyMgc29mdCBjbG9zZSBwYXJhbSBlcnIgc2ltPSVkXG4iLCBuU2ltSUQpOworCQlyZXR1cm4gLTE7CisJfQorCWlmKG5TaW1JRCl7CisJCXp0ZV9TZXRHVERBVEFTSU0oMSk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTBcclxuIiwgTlVMTCwgTlVMTCk7CisJCXZzaW1fY2FyZF9zd2l0Y2hfcmVxKDApOworCQl6dGVfU2V0R1REVUFMU0lNKDApOworCQl2c2ltX3NldChNU0dfQ01EX1ZTSU1fUkVTRVRfRkxPV19TVEFUSVNUSUMsMSk7CisJfWVsc2V7CisJCXVpbnQ4X3Qgc2ltID0gMDsKKwkJdWludDhfdCByZXQgPSAwOworCQl6dGVfR2V0R1REVUFMU0lNKCZzaW0pOworCQlpZihzaW0gIT0gblNpbUlEKQorCQkJenRlX1NldEdURFVBTFNJTShuU2ltSUQpOworCQlyZXQgPSB2c2ltX2dldF9jYXJkc3RhdF9mcm9tcHMoKTsKKwkJaWYocmV0ID49IDAgJiYgblNpbUlEICE9IHJldCkKKwkJCXZzaW1fY2FyZF9zd2l0Y2hfcmVxKG5TaW1JRCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTBcclxuIiwgTlVMTCwgTlVMTCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTVcclxuIiwgTlVMTCwgTlVMTCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtaQ0FSRFNXSVRDSD0wLDBcclxuIiwgTlVMTCwgTlVMTCk7CisJCWdldF9tb2RlbV9pbmZvKCJBVCtDRlVOPTFcclxuIiwgTlVMTCwgTlVMTCk7CisJCWlmKHNpbSAhPSBuU2ltSUQpCisJCQl6dGVfU2V0R1REVUFMU0lNKHNpbSk7CisJCWlmKHJldCA+PSAwICYmIG5TaW1JRCAhPSByZXQpCisJCQl2c2ltX2NhcmRfc3dpdGNoX3JlcShyZXQpOworCX0KKwlnX3ZzaW1fYXBkdV9wcm9jZXNzX2NiID0gTlVMTDsKKwlnX3ZzaW1fc2xvdFtuU2ltSURdID0gMDsKKwlzY19jZmdfc2V0KCJzb2Z0c2ltX3N0YXQiLCIwIik7CisJcmV0dXJuIDA7Cit9CisKK2ludDMyX3QgenRlX2F0VnNpbUNsb3NlKFNvZnRTaW1fQ09NTUFORCBzb2Z0c3NpbV9hcGR1X3Byb2Nlc3NfZm4sIHVpbnQ4X3QgblNpbUlEKQoreworCXZzaW1fZGVidWdfcHJpbnRmKCIjI3ZzaW0jIyBbJXNdIHN0YXJ0XG4iLCBfX0ZVTkNUSU9OX18pOworCWlmKG5TaW1JRCAhPSAxICYmIG5TaW1JRCAhPSAwKXsKKwkJcHJpbnRmKCIjI3ZzaW0jIyBjbG9zZSBwYXJhbSBlcnIgc2ltPSVkXG4iLCBuU2ltSUQpOworCQlyZXR1cm4gLTE7CisJfQogCXp0ZV9TZXRHVERBVEFTSU0oMSk7CiAJZ2V0X21vZGVtX2luZm8oIkFUK0NGVU49MFxyXG4iLCBOVUxMLCBOVUxMKTsKIAl2c2ltX2NhcmRfc3dpdGNoX3JlcSgwKTsKIAl6dGVfU2V0R1REVUFMU0lNKDApOworCXZzaW1fc2V0KE1TR19DTURfVlNJTV9SRVNFVF9GTE9XX1NUQVRJU1RJQywxKTsKKwlnX3ZzaW1fYXBkdV9wcm9jZXNzX2NiID0gTlVMTDsKKwlnX3ZzaW1fc2xvdFsxXSA9IDA7CisJc2NfY2ZnX3NldCgidnNpbV9zdGF0IiwiMCIpOwogCXJldHVybiAwOwogfQogCisKIGludDMyX3QgenRlX1NldEdUREFUQVNJTSh1aW50OF90IG5TaW1JRCkKIHsKIAlpbnQgcmV0ID0gMDsK