ZGlmZiAtLWdpdCBhL2FwL2FwcC9pbmNsdWRlL2ZsYWdzX2FwaS5oIGIvYXAvYXBwL2luY2x1ZGUvZmxhZ3NfYXBpLmgKaW5kZXggYzc3OWVmNC4uYWMyZGI4MCAxMDA3NTUKLS0tIGEvYXAvYXBwL2luY2x1ZGUvZmxhZ3NfYXBpLmgKKysrIGIvYXAvYXBwL2luY2x1ZGUvZmxhZ3NfYXBpLmgKQEAgLTEsNiArMSw2IEBACiAvKioKICAqIEBmaWxlIGZsYWdzX2FwaS5oCi0gKiBAYnJpZWYgZmxhZ3PliIbljLrmjqXlj6MKKyAqIEBicmllZiBmbGFnc7fWx/i907/aCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDIzIFNhbmVjaGlwcyBUZWNobm9sb2d5IENvLiwgTHRkLgogICogQGF1dGhvciAKQEAgLTgsNyArOCw3IEBACiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIO+8iOW/hemAie+8mkdQTHYyIExpY2VuY2XvvIkKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiCjqLHY0aGjukdQTHYyIExpY2VuY2WjqQogICoKICAqLwogCkBAIC00Miw1OSArNDIsNTkgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqCi0gKiBAYnJpZWYgIOWIneWni+WMlmZsYWdz5YiG5Yy6Ci0gKiBAcGFyYW1bb3V0XSAgcF9mbGFnc19pbmZvICBmbGFnc+WIneWni+WMluaVsOaNrgotICogQHJldHVybiAgMCDliJ3lp4vljJbmiJDlip8sIC0xIOWIneWni+WMluWksei0pQorICogQGJyaWVmICCz9cq8u69mbGFnc7fWx/gKKyAqIEBwYXJhbVtvdXRdICBwX2ZsYWdzX2luZm8gIGZsYWdzs/XKvLuvyv2+3QorICogQHJldHVybiAgMCCz9cq8u6+zybmmLCAtMSCz9cq8u6/Kp7DcCiAgKiBAbm90ZQogICovCiBpbnQgZmxhZ3NfaW5pdCgpOwogCiAKIC8qKgotICogQGJyaWVmICDojrflj5ZmbGFnc+WIhuWMuuWGheWuuQotICogQHBhcmFtW291dF0gIHBfZmxhZ3NfaW5mbyAgZmxhZ3PliIbljLrlhoXlrrkKLSAqIEByZXR1cm4gIDAg6I635Y+W5oiQ5YqfLCAtMSDojrflj5blpLHotKUKKyAqIEBicmllZiAgu/HIoWZsYWdzt9bH+MTayN0KKyAqIEBwYXJhbVtvdXRdICBwX2ZsYWdzX2luZm8gIGZsYWdzt9bH+MTayN0KKyAqIEByZXR1cm4gIDAgu/HIobPJuaYsIC0xILvxyKHKp7DcCiAgKiBAbm90ZQogICovCiBpbnQgZmxhZ3NfZ2V0KFRfRkxBR1NfSU5GTyAqcF9mbGFnc19pbmZvKTsKIAogCiAvKioKLSAqIEBicmllZiAg6K6+572uZmxhZ3PliIbljLrlhoXlrrkKLSAqIEBwYXJhbVtvdXRdICBwX2ZsYWdzX2luZm8gIGZsYWdz5YiG5Yy65YaF5a65Ci0gKiBAcmV0dXJuICAwIOiuvue9ruaIkOWKnywgLTEg6K6+572u5aSx6LSlCisgKiBAYnJpZWYgIMno1sNmbGFnc7fWx/jE2sjdCisgKiBAcGFyYW1baW5dICBwX2ZsYWdzX2luZm8gIGZsYWdzt9bH+MTayN0KKyAqIEByZXR1cm4gIDAgyejWw7PJuaYsIC0xIMno1sPKp7DcCiAgKiBAbm90ZQogICovCiBpbnQgZmxhZ3Nfc2V0KFRfRkxBR1NfSU5GTyAqcF9mbGFnc19pbmZvKTsKIAogCiAvKioKLSAqIEBicmllZiAg6I635Y+WZmxhZ3PliIbljLrkuK11Ymlmc+eKtuaAgQotICogQHBhcmFtW291dF0gIHN0YXR1cyAgdWJpZnPnirbmgIEKLSAqIEByZXR1cm4gIDAg6I635Y+W5oiQ5YqfLCAtMSDojrflj5blpLHotKUKKyAqIEBicmllZiAgu/HIoWZsYWdzt9bH+NbQdWJpZnPXtMysCisgKiBAcGFyYW1bb3V0XSAgc3RhdHVzICB1Ymlmc9e0zKwKKyAqIEByZXR1cm4gIDAgu/HIobPJuaYsIC0xILvxyKHKp7DcCiAgKiBAbm90ZQogICovCiBpbnQgZmxhZ3NfZ2V0X3ViaWZzX3N0YXR1cyhUX1VCSUZTX1NUQVRVUyAqcF91Ymlmc19zdGF0dXMpOwogCiAKIC8qKgotICogQGJyaWVmICDorr7nva5mbGFnc+WIhuWMuuS4rXViaWZz54q25oCBCi0gKiBAcGFyYW1baW5dICBzdGF0dXMgIHViaWZz54q25oCBCi0gKiBAcmV0dXJuICAwIOiuvue9ruaIkOWKnywgLTEg6K6+572u5aSx6LSlCisgKiBAYnJpZWYgIMno1sNmbGFnc7fWx/jW0HViaWZz17TMrAorICogQHBhcmFtW2luXSAgc3RhdHVzICB1Ymlmc9e0zKwKKyAqIEByZXR1cm4gIDAgyejWw7PJuaYsIC0xIMno1sPKp7DcCiAgKiBAbm90ZQogICovCiBpbnQgZmxhZ3Nfc2V0X3ViaWZzX3N0YXR1cyhUX1VCSUZTX1NUQVRVUyAqcF91Ymlmc19zdGF0dXMpOwogCiAKIC8qKgotICogQGJyaWVmICDojrflj5blvZPliY3ns7vnu58KLSAqIEByZXR1cm4gIOW9k+WJjei/kOihjOezu+e7nworICogQGJyaWVmICC78cihtbHHsM+1zbMKKyAqIEByZXR1cm4gILWxx7DUy9DQz7XNswogICogQG5vdGUKICAqLwogaW50IGZsYWdzX2dldF9jdXJyZW50X3N5c3RlbSgpOwogCiAvKioKLSAqIEBicmllZiAgwrvDscOIwqFmbGFnc8K3w5bDh8O4w5bDkG52cm9fZmxhZ8OXwrTDjMKsCisgKiBAYnJpZWYgILvxyKFmbGFnc7fWx/jW0G52cm9fZmxhZ9e0zKwKICAqIEBwYXJhbVtvdXRdICAKICAqIEByZXR1cm4gIG52cm9fZmxhZwogICogQG5vdGUKQEAgLTEwMiwxMyArMTAyLDUyIEBACiB1bnNpZ25lZCBpbnQgZmxhZ3NfZ2V0X252cm9mbGFnKHZvaWQpOwogCiAvKioKLSAqIEBicmllZiAgw4nDqMOWw4NmbGFnc8K3w5bDh8O4w5bDkG52cm9fZmxhZwotICogQHBhcmFtW2luXSAgZmxhZyBudnJvw5fCtMOMwqwKLSAqIEByZXR1cm4gIDAgw4nDqMOWw4PCs8OJwrnCpiwgLTEgw4nDqMOWw4PDisKnwrDDnAorICogQGJyaWVmICDJ6NbDZmxhZ3O31sf41tBudnJvX2ZsYWcKKyAqIEBwYXJhbVtpbl0gIGZsYWcgbnZyb9e0zKwKKyAqIEByZXR1cm4gIDAgyejWw7PJuaYsIC0xIMno1sPKp7DcCiAgKiBAbm90ZQogICovCiBpbnQgZmxhZ3Nfc2V0X252cm9mbGFnKHVuc2lnbmVkIGludCBmbGFnKTsKIAogCisvKioKKyAqIEBicmllZiAgu/HIoWZsYWdzt9bH+MTayN0ozt5DUkMpCisgKiBAcGFyYW1bb3V0XSAgcF9mbGFnc19pbmZvICBmbGFnc7fWx/jE2sjdCisgKiBAcmV0dXJuICAwILvxyKGzybmmLCAtMSC78cihyqew3AorICogQG5vdGUgILTLQVBJvfbTw9Patfey4qOs1f3KvbT6wuuyu7/JyrnTwworCisgKi8KK2ludCBmbGFnc19nZXRfbm9jcmMoVF9GTEFHU19JTkZPICpwX2ZsYWdzX2luZm8pOworCisKKy8qKgorICogQGJyaWVmICDJ6NbDZmxhZ3O31sf4xNrI3SjO3kNSQykKKyAqIEBwYXJhbVtpbl0gIHBfZmxhZ3NfaW5mbyAgZmxhZ3O31sf4xNrI3QorICogQHJldHVybiAgMCDJ6NbDs8m5piwgLTEgyejWw8qnsNwKKyAqIEBub3RlICC0y0FQSb3208PT2rX3suKjrNX9yr20+sLrsru/ycq508MKKyAqLworaW50IGZsYWdzX3NldF9ub2NyYyhUX0ZMQUdTX0lORk8gKnBfZmxhZ3NfaW5mbyk7CisKKworLyoqCisgKiBAYnJpZWYgILP1yry7r0NSQzMywuux7SjQobbLKQorICogQHBhcmFtICDO3gorICogQHJldHVybiDO3gorICogQG5vdGUKKyAqLwordm9pZCBjcmMzMmluaXRfbGUodm9pZCk7CisKKworLyoqCisgKiBAYnJpZWYgILzGy+NDUkMzMtCj0enC6yjQobbLKQorICogQHBhcmFtW2luXSAgY3JjILP1yrzWtQorICogQHBhcmFtW2luXSAgcCAg0OjSqrzGy+NDUkMzMtCj0enC67XEyv2+3WJ1ZmZlcta41esKKyAqIEBwYXJhbVtpbl0gIGxlbiAgYnVmZmVyIEBwtcS089ChCisgKiBAcmV0dXJuICC8xsvjy/m1w7XEQ1JDMzLQo9HpwusKKyAqIEBub3RlCisgKi8KK3Vuc2lnbmVkIGludCBjcmMzMl9sZSh1bnNpZ25lZCBpbnQgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKKworCiAjZW5kaWYgLy8gRkxBR1NfQVBJX0gKIAo=