ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxNDVhOGFmLi40MWMxOTY4IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDE0ICsxLDIyIEBACisJKiBWZXJzaW9uIDIuMC40IHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCiAyMDAxLTA2LTI3ICBEYXZpZCBUdXJuZXIgPGRhdmlkQGZyZWV0eXBlLm9yZz4KIAotCSogc3JjL3NmbnQvdHRsb2FkLmMgKFRUX0xvYWRfS2Vybik6IHRoZSBrZXJuIHRhYmxlIGxvYWRlciBub3cgZW5zdXJlcworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IENoYW5nZWQgdGhlIGRlZmluaXRpb24gb2YgdGhlCisJRlRfQ0FMTEJBQ0tfREVGIG1hY3JvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y29uZmlnLmgsIHNyYy8qLyouYzogQ2hhbmdlZCB0aGUgZGVmaW5pdGlvbiBhbmQKKwl1c2Ugb2YgdGhlIEZUX0NBTExCQUNLX0RFRiBtYWNybyBpbiBvcmRlciB0byBzdXBwb3J0IDE2LWJpdAorCWNvbXBpbGVycy4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW46IENoYW5nZWQgdGhlIGRlZmluaXRpb24gb2YgdGhlCisJRlRfQ0FMTEJBQ0tfREVGIG1hY3JvLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAoVFRfTG9hZF9LZXJuKTogVGhlIGtlcm4gdGFibGUgbG9hZGVyIG5vdyBlbnN1cmVzCiAJdGhhdCB0aGUga2VybmluZyB0YWJsZSBpcyBjb3JyZWN0bHkgc29ydGVkIChzb21lIHByb2JsZW0gZm9udHMgZG9uJ3QKLQloYXZlIGEgY29ycmVjdCBrZXJuIHRhYmxlICEhKQotCi0JKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjogY2hhbmdlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKLQlGVF9DQUxMQkFDS19ERUYgbWFjcm8KLQotCSogaW5jbHVkZS9mcmVldHlwZS9mdGNvbmZpZy5oLCBzcmMvKi8qLmM6IGNoYW5nZWQgdGhlIGRlZmluaXRpb24gYW5kCi0JdXNlcyBvZiB0aGUgRlRfQ0FMTEJBQ0tfREVGIG1hY3JvIGluIG9yZGVyIHRvIHN1cHBvcnQgMTYtYml0IGNvbXBpbGVycworCWhhdmUgYSBjb3JyZWN0IGtlcm4gdGFibGUpLgogCiAyMDAxLTA2LTI2ICBXb2xmZ2FuZyBEb21y9nNlICA8cG9ydGhvcy5kb21yb2VzZUBoYXJ6LmRlPgogCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9mdGNvbmZpZy5pbiBiL2J1aWxkcy91bml4L2Z0Y29uZmlnLmluCmluZGV4IDUyZDVkZTcuLjRmYTdlOGIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L2Z0Y29uZmlnLmluCisrKyBiL2J1aWxkcy91bml4L2Z0Y29uZmlnLmluCkBAIC0yMTIsOCArMjEyLDcgQEAKICNlbmRpZiAvKiAhRlRfRVhQT1JUX1ZBUiAqLwogCiAgIC8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBuZWVkZWQgdG8gY29tcGlsZSB0aGUgbGlicmFyeSB3aXRoIGEgICAqLwotICAvKiBDKysgY29tcGlsZXIuICBOb3RlIHRoYXQgd2UgZG8gdGhpcyBmb3IgY29udmVuaWVuY2UgLS0gcGxlYXNlICAgKi8KLSAgLyogZG9uJ3QgYXNrIGZvciBtb3JlIEMrKyBmZWF0dXJlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEMrKyBjb21waWxlciBhbmQgd2l0aCAxNmJpdCBjb21waWxlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICAvKiBUaGlzIGlzIHNwZWNpYWwuICBXaXRoaW4gQysrLCB5b3UgbXVzdCBzcGVjaWZ5IGBleHRlcm4gIkMiJyBmb3IgKi8KQEAgLTIzMSwyMyArMjMwLDI3IEBACiAgIC8qIEZUX0NBTExCQUNLX1RBQkxFX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY29uc3RhbnQgdmFyaWFibGUgICAqLwogICAvKiB0aGF0IGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTb21lIDE2Yml0IGNvbXBpbGVycyBoYXZlIHRvIHJlZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBpbnNlcnQgICAgKi8KKyAgLyogdGhlIGluZmFtb3VzIGBfY2RlY2wnIG9yIGBfX2Zhc3RjYWxsJyBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmbmRlZiBGVF9DQUxMQkFDS19ERUYKLSMgIGlmZGVmIF9fY3BsdXNwbHVzCi0jICAgIGRlZmluZSBGVF9DQUxMQkFDS19ERUYoeCkgIGV4dGVybiAiQyIgeAotIyAgZWxzZQotIyAgICBkZWZpbmUgRlRfQ0FMTEJBQ0tfREVGKHgpICBzdGF0aWMgeAotIyAgZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiB4CisjZWxzZQorI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgc3RhdGljIHgKICNlbmRpZgorI2VuZGlmIC8qIEZUX0NBTExCQUNLX0RFRiAqLwogCiAjaWZuZGVmIEZUX0NBTExCQUNLX1RBQkxFCi0jICBpZmRlZiBfX2NwbHVzcGx1cwotIyAgICBkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEUgICAgICBleHRlcm4gIkMiCi0jICAgIGRlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIGV4dGVybiAiQyIKLSMgIGVsc2UKLSMgICAgZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuCi0jICAgIGRlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIC8qIG5vdGhpbmcgKi8KLSMgIGVuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEUgICAgICBleHRlcm4gIkMiCisjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgZXh0ZXJuICJDIgorI2Vsc2UKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEUgICAgICBleHRlcm4KKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICAvKiBub3RoaW5nICovCiAjZW5kaWYKKyNlbmRpZiAvKiBGVF9DQUxMQkFDS19UQUJMRSAqLwogCiAKIEZUX0VORF9IRUFERVIKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2Z0c3lzdGVtLmMgYi9idWlsZHMvdW5peC9mdHN5c3RlbS5jCmluZGV4IDk1ZGVmNjQuLmRjNmY5ZjQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L2Z0c3lzdGVtLmMKKysrIGIvYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYwpAQCAtOTEsNyArOTEsNyBAQAogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVGhlIGFkZHJlc3Mgb2YgbmV3bHkgYWxsb2NhdGVkIGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9DQUxMQkFDS19ERUYodm9pZCopCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCogKQogICBmdF9hbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgICBsb25nICAgICAgIHNpemUgKQogICB7CkBAIC0xMjEsNyArMTIxLDcgQEAKICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRoZSBhZGRyZXNzIG9mIHRoZSByZWFsbG9jYXRlZCBtZW1vcnkgYmxvY2suICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfQ0FMTEJBQ0tfREVGKHZvaWQqKQorICBGVF9DQUxMQkFDS19ERUYoIHZvaWQqICkKICAgZnRfcmVhbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgICAgIGxvbmcgICAgICAgY3VyX3NpemUsCiAgICAgICAgICAgICAgIGxvbmcgICAgICAgbmV3X3NpemUsCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGJsb2NrICAgOjogVGhlIGFkZHJlc3Mgb2YgYmxvY2sgaW4gbWVtb3J5IHRvIGJlIGZyZWVkLiAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfQ0FMTEJBQ0tfREVGKHZvaWQpCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCiAgIGZ0X2ZyZWUoIEZUX01lbW9yeSAgbWVtb3J5LAogICAgICAgICAgICB2b2lkKiAgICAgIGJsb2NrICkKICAgewpAQCAtMTg5LDcgKzE4OSw3IEBACiAgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBzdHJlYW0gOjogQSBwb2ludGVyIHRvIHRoZSBzdHJlYW0gb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKQorICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQogICBmdF9jbG9zZV9zdHJlYW0oIEZUX1N0cmVhbSAgc3RyZWFtICkKICAgewogICAgIG11bm1hcCggKE1VTk1BUF9BUkdfQ0FTVClzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciwgc3RyZWFtLT5zaXplICk7CkBAIC0yMDIsOCArMjAyLDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfTmV3X1N0cmVhbSggY29uc3QgY2hhciogIGZpbGVwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgIHN0cmVhbSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTmV3X1N0cmVhbSggY29uc3QgY2hhciogIGZpbGVwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgIHN0cmVhbSApCiAgIHsKICAgICBpbnQgICAgICAgICAgZmlsZTsKICAgICBzdHJ1Y3Qgc3RhdCAgc3RhdF9idWY7CkBAIC0yNzEsNyArMjcyLDggQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfTWVtb3J5ICkgIEZUX05ld19NZW1vcnkoIHZvaWQgKQorICBGVF9FWFBPUlRfREVGKCBGVF9NZW1vcnkgKQorICBGVF9OZXdfTWVtb3J5KCB2b2lkICkKICAgewogICAgIEZUX01lbW9yeSAgbWVtb3J5OwogCkBAIC0yOTEsNyArMjkzLDggQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVF9Eb25lX01lbW9yeSggRlRfTWVtb3J5ICBtZW1vcnkgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfRG9uZV9NZW1vcnkoIEZUX01lbW9yeSAgbWVtb3J5ICkKICAgewogICAgIG1lbW9yeS0+ZnJlZSggbWVtb3J5LCBtZW1vcnkgKTsKICAgfQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3Ztcy9mdHN5c3RlbS5jIGIvYnVpbGRzL3Ztcy9mdHN5c3RlbS5jCmluZGV4IDk1ZGVmNjQuLjA3MjlkZjQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy92bXMvZnRzeXN0ZW0uYworKysgYi9idWlsZHMvdm1zL2Z0c3lzdGVtLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLS8qIHdlIHVzZSBvdXIgc3BlY2lhbCBmdGNvbmZpZy5oIGZpbGUsIG5vdCB0aGUgc3RhbmRhcmQgb25lICovCisgIC8qIHdlIHVzZSBvdXIgc3BlY2lhbCBmdGNvbmZpZy5oIGZpbGUsIG5vdCB0aGUgc3RhbmRhcmQgb25lICovCiAjaW5jbHVkZSA8ZnRjb25maWcuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKICNpbmNsdWRlIEZUX1NZU1RFTV9ICkBAIC05MSw3ICs5MSw3IEBACiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUaGUgYWRkcmVzcyBvZiBuZXdseSBhbGxvY2F0ZWQgYmxvY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKikKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkKiApCiAgIGZ0X2FsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgIGxvbmcgICAgICAgc2l6ZSApCiAgIHsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVGhlIGFkZHJlc3Mgb2YgdGhlIHJlYWxsb2NhdGVkIG1lbW9yeSBibG9jay4gICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9DQUxMQkFDS19ERUYodm9pZCopCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCogKQogICBmdF9yZWFsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgICAgbG9uZyAgICAgICBjdXJfc2l6ZSwKICAgICAgICAgICAgICAgbG9uZyAgICAgICBuZXdfc2l6ZSwKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYmxvY2sgICA6OiBUaGUgYWRkcmVzcyBvZiBibG9jayBpbiBtZW1vcnkgdG8gYmUgZnJlZWQuICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9DQUxMQkFDS19ERUYodm9pZCkKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKICAgZnRfZnJlZSggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgIHZvaWQqICAgICAgYmxvY2sgKQogICB7CkBAIC0xODksNyArMTg5LDcgQEAKICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHN0cmVhbSA6OiBBIHBvaW50ZXIgdG8gdGhlIHN0cmVhbSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfQ0FMTEJBQ0tfREVGKHZvaWQpCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCiAgIGZ0X2Nsb3NlX3N0cmVhbSggRlRfU3RyZWFtICBzdHJlYW0gKQogICB7CiAgICAgbXVubWFwKCAoTVVOTUFQX0FSR19DQVNUKXN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyLCBzdHJlYW0tPnNpemUgKTsKQEAgLTIwMiw4ICsyMDIsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9OZXdfU3RyZWFtKCBjb25zdCBjaGFyKiAgZmlsZXBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgc3RyZWFtICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9OZXdfU3RyZWFtKCBjb25zdCBjaGFyKiAgZmlsZXBhdGhuYW1lLAorICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgc3RyZWFtICkKICAgewogICAgIGludCAgICAgICAgICBmaWxlOwogICAgIHN0cnVjdCBzdGF0ICBzdGF0X2J1ZjsKQEAgLTI3MSw3ICsyNzIsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9NZW1vcnkgKSAgRlRfTmV3X01lbW9yeSggdm9pZCApCisgIEZUX0VYUE9SVF9ERUYoIEZUX01lbW9yeSApCisgIEZUX05ld19NZW1vcnkoIHZvaWQgKQogICB7CiAgICAgRlRfTWVtb3J5ICBtZW1vcnk7CiAKQEAgLTI5MSw3ICsyOTMsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX0RvbmVfTWVtb3J5KCBGVF9NZW1vcnkgIG1lbW9yeSApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9Eb25lX01lbW9yeSggRlRfTWVtb3J5ICBtZW1vcnkgKQogICB7CiAgICAgbWVtb3J5LT5mcmVlKCBtZW1vcnksIG1lbW9yeSApOwogICB9CmRpZmYgLS1naXQgYS9kb2NzL0NIQU5HRVMgYi9kb2NzL0NIQU5HRVMKaW5kZXggNjU4OTljZC4uNzk0NmM4NyAxMDA2NDQKLS0tIGEvZG9jcy9DSEFOR0VTCisrKyBiL2RvY3MvQ0hBTkdFUwpAQCAtMjMsOCArMjMsOCBAQAogICAtIFVwZGF0ZWQgdGhlIFVuaXgtc3BlY2lmaWMgcG9ydGlvbnMgb2YgdGhlIGJ1aWxkIHN5c3RlbSAobmV3IGxpYnRvb2wKICAgICB2ZXJzaW9uLCBldGMuKS4KIAotICAtIHRoZSBTRk5UIGtlcm5pbmcgbG9kYWVyIG5vdyBlbnN1cmVzIHRoYXQgdGhlIHRhYmxlIGlzIHNvcnRlZCAoc2luY2Ugc29tZQotICAgIHByb2JsZW0gZm9udHMgZG8gbm90IG1lZXQgdGhpcyByZXF1aXJlbWVudCAhISkKKyAgLSBUaGUgU0ZOVCBrZXJuaW5nIGxvZGFlciBub3cgZW5zdXJlcyB0aGF0IHRoZSB0YWJsZSBpcyBzb3J0ZWQgKHNpbmNlIHNvbWUKKyAgICBwcm9ibGVtIGZvbnRzIGRvIG5vdCBtZWV0IHRoaXMgcmVxdWlyZW1lbnQpLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCmluZGV4IDE0YWU4OGYuLjNmYThkM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaApAQCAtMjc2LDggKzI3Niw3IEBACiAjZW5kaWYgLyogIUZUX0VYUE9SVF9WQVIgKi8KIAogICAvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCBhICAgKi8KLSAgLyogQysrIGNvbXBpbGVyLiAgTm90ZSB0aGF0IHdlIGRvIHRoaXMgZm9yIGNvbnZlbmllbmNlIC0tIHBsZWFzZSAgICovCi0gIC8qIGRvbid0IGFzayBmb3IgbW9yZSBDKysgZmVhdHVyZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBDKysgY29tcGlsZXIgYW5kIHdpdGggMTZiaXQgY29tcGlsZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgLyogVGhpcyBpcyBzcGVjaWFsLiAgV2l0aGluIEMrKywgeW91IG11c3Qgc3BlY2lmeSBgZXh0ZXJuICJDIicgZm9yICovCkBAIC0yOTUsMjQgKzI5NCwyNyBAQAogICAvKiBGVF9DQUxMQkFDS19UQUJMRV9ERUYgaXMgdXNlZCB0byBfZGVmaW5lXyBhIGNvbnN0YW50IHZhcmlhYmxlICAgKi8KICAgLyogdGhhdCBjb250YWlucyBwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTb21lIDE2Yml0IGNvbXBpbGVycyBoYXZlIHRvIHJlZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBpbnNlcnQgICAgKi8KKyAgLyogdGhlIGluZmFtb3VzIGBfY2RlY2wnIG9yIGBfX2Zhc3RjYWxsJyBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmbmRlZiBGVF9DQUxMQkFDS19ERUYKLSMgIGlmZGVmIF9fY3BsdXNwbHVzCi0jICAgIGRlZmluZSBGVF9DQUxMQkFDS19ERUYoeCkgIGV4dGVybiAiQyIgeAotIyAgZWxzZQotIyAgICBkZWZpbmUgRlRfQ0FMTEJBQ0tfREVGKHgpICBzdGF0aWMgeAotIyAgZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiB4CisjZWxzZQorI2RlZmluZSBGVF9DQUxMQkFDS19ERUYoIHggKSAgc3RhdGljIHgKICNlbmRpZgorI2VuZGlmIC8qIEZUX0NBTExCQUNLX0RFRiAqLwogCiAjaWZuZGVmIEZUX0NBTExCQUNLX1RBQkxFCi0jICBpZmRlZiBfX2NwbHVzcGx1cwotIyAgICBkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEUgICAgICBleHRlcm4gIkMiCi0jICAgIGRlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYgIGV4dGVybiAiQyIKLSMgIGVsc2UKLSMgICAgZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuCi0jICAgIGRlZmluZSBGVF9DQUxMQkFDS19UQUJMRV9ERUYKLSMgIGVuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEUgICAgICBleHRlcm4gIkMiCisjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFX0RFRiAgZXh0ZXJuICJDIgorI2Vsc2UKKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEUgICAgICBleHRlcm4KKyNkZWZpbmUgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICAvKiBub3RoaW5nICovCiAjZW5kaWYKKyNlbmRpZiAvKiBGVF9DQUxMQkFDS19UQUJMRSAqLwogCiAKIEZUX0VORF9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvaGludC9haGFuZ2xlcy5jIGIvc3JjL2F1dG9oaW50L2FoYW5nbGVzLmMKaW5kZXggM2YxYjQzYy4uYjE2ZmE3NyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9oaW50L2FoYW5nbGVzLmMKKysrIGIvc3JjL2F1dG9oaW50L2FoYW5nbGVzLmMKQEAgLTY0LDggKzY0LDggQEAKICAgfTsKIAogCi0gIEZUX0xPQ0FMX0RFRgotICBBSF9BbmdsZSAgYWhfYW5nbGUoIEZUX1ZlY3RvciogIHYgKQorICBGVF9MT0NBTF9ERUYgQUhfQW5nbGUKKyAgYWhfYW5nbGUoIEZUX1ZlY3RvciogIHYgKQogICB7CiAgICAgRlRfUG9zICAgIGR4LCBkeTsKICAgICBBSF9BbmdsZSAgYW5nbGU7CmRpZmYgLS1naXQgYS9zcmMvYXV0b2hpbnQvYWhhbmdsZXMuaCBiL3NyYy9hdXRvaGludC9haGFuZ2xlcy5oCmluZGV4IGY2NmFkMTcuLjZjYjY5YTIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvaGludC9haGFuZ2xlcy5oCisrKyBiL3NyYy9hdXRvaGludC9haGFuZ2xlcy5oCkBAIC00Nyw4ICs0Nyw4IEBACiAgIGNvbnN0IEFIX0FuZ2xlICBhaF9hcmN0YW5bMUwgPDwgQUhfQVRBTl9CSVRTXTsKIAogCi0gIEZUX0xPQ0FMCi0gIEFIX0FuZ2xlICBhaF9hbmdsZSggRlRfVmVjdG9yKiAgdiApOworICBGVF9MT0NBTCBBSF9BbmdsZQorICBhaF9hbmdsZSggRlRfVmVjdG9yKiAgdiApOwogCiAKIEZUX0VORF9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvaGludC9haGdsb2JhbC5jIGIvc3JjL2F1dG9oaW50L2FoZ2xvYmFsLmMKaW5kZXggN2VhZjlkMy4uZGE5ZTk3NCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9oaW50L2FoZ2xvYmFsLmMKKysrIGIvc3JjL2F1dG9oaW50L2FoZ2xvYmFsLmMKQEAgLTM5LDkgKzM5LDkgQEAKIAogCiAgIC8qIHNpbXBsZSBpbnNlcnRpb24gc29ydCAqLwotICBzdGF0aWMKLSAgdm9pZCAgc29ydF92YWx1ZXMoIEZUX0ludCAgIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgdGFibGUgKQorICBzdGF0aWMgdm9pZAorICBzb3J0X3ZhbHVlcyggRlRfSW50ICAgY291bnQsCisgICAgICAgICAgICAgICBGVF9Qb3MqICB0YWJsZSApCiAgIHsKICAgICBGVF9JbnQgIGksIGosIHN3YXA7CiAKQEAgLTYxLDggKzYxLDggQEAKICAgfQogCiAKLSAgc3RhdGljCi0gIEZUX0Vycm9yICBhaF9oaW50ZXJfY29tcHV0ZV9ibHVlcyggQUhfSGludGVyKiAgaGludGVyICkKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFoX2hpbnRlcl9jb21wdXRlX2JsdWVzKCBBSF9IaW50ZXIqICBoaW50ZXIgKQogICB7CiAgICAgQUhfQmx1ZSAgICAgICBibHVlOwogICAgIEFIX0dsb2JhbHMqICAgZ2xvYmFscyA9ICZoaW50ZXItPmdsb2JhbHMtPmRlc2lnbjsKQEAgLTI4NSw4ICsyODUsOCBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgRlRfRXJyb3IgIGFoX2hpbnRlcl9jb21wdXRlX3dpZHRocyggQUhfSGludGVyKiAgaGludGVyICkKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFoX2hpbnRlcl9jb21wdXRlX3dpZHRocyggQUhfSGludGVyKiAgaGludGVyICkKICAgewogICAgIC8qIHNjYW4gdGhlIGFycmF5IG9mIHNlZ21lbnRzIGluIGVhY2ggZGlyZWN0aW9uICovCiAgICAgQUhfT3V0bGluZSogIG91dGxpbmUgPSBoaW50ZXItPmdseXBoOwpAQCAtMzg0LDggKzM4NCw4IEBACiAgIH0KIAogCi0gIEZUX0xPQ0FMX0RFRgotICBGVF9FcnJvciAgYWhfaGludGVyX2NvbXB1dGVfZ2xvYmFscyggQUhfSGludGVyKiAgaGludGVyICkKKyAgRlRfTE9DQUxfREVGIEZUX0Vycm9yCisgIGFoX2hpbnRlcl9jb21wdXRlX2dsb2JhbHMoIEFIX0hpbnRlciogIGhpbnRlciApCiAgIHsKICAgICByZXR1cm4gYWhfaGludGVyX2NvbXB1dGVfd2lkdGhzKCBoaW50ZXIgKSB8fAogICAgICAgICAgICBhaF9oaW50ZXJfY29tcHV0ZV9ibHVlcyAoIGhpbnRlciApOwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9oaW50L2FoZ2x5cGguYyBiL3NyYy9hdXRvaGludC9haGdseXBoLmMKaW5kZXggYmUwZDA5Yi4uY2I0OGVjNCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9oaW50L2FoZ2x5cGguYworKysgYi9zcmMvYXV0b2hpbnQvYWhnbHlwaC5jCkBAIC0zMiw3ICszMiw4IEBACiAKICNpZmRlZiBBSF9ERUJVRwogCi0gIHZvaWQgIGFoX2R1bXBfZWRnZXMoIEFIX091dGxpbmUqICBvdXRsaW5lICkKKyAgdm9pZAorICBhaF9kdW1wX2VkZ2VzKCBBSF9PdXRsaW5lKiAgb3V0bGluZSApCiAgIHsKICAgICBBSF9FZGdlKiAgICAgZWRnZXM7CiAgICAgQUhfRWRnZSogICAgIGVkZ2VfbGltaXQ7CkBAIC04Myw3ICs4NCw4IEBACiAKIAogICAvKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZHVtcCB0aGUgYXJyYXkgb2YgbGlua2VkIHNlZ21lbnRzICovCi0gIHZvaWQgIGFoX2R1bXBfc2VnbWVudHMoIEFIX091dGxpbmUqICBvdXRsaW5lICkKKyAgdm9pZAorICBhaF9kdW1wX3NlZ21lbnRzKCBBSF9PdXRsaW5lKiAgb3V0bGluZSApCiAgIHsKICAgICBBSF9TZWdtZW50KiAgc2VnbWVudHM7CiAgICAgQUhfU2VnbWVudCogIHNlZ21lbnRfbGltaXQ7CkBAIC0xMzUsOSArMTM3LDkgQEAKIAogCiAgIC8qIGNvbXB1dGUgdGhlIGRpcmVjdGlvbiB2YWx1ZSBvZiBhIGdpdmVuIHZlY3Rvci4uICovCi0gIHN0YXRpYwotICBBSF9EaXJlY3Rpb24gIGFoX2NvbXB1dGVfZGlyZWN0aW9uKCBGVF9Qb3MgIGR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIGR5ICkKKyAgc3RhdGljIEFIX0RpcmVjdGlvbgorICBhaF9jb21wdXRlX2RpcmVjdGlvbiggRlRfUG9zICBkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgZHkgKQogICB7CiAgICAgQUhfRGlyZWN0aW9uICBkaXI7CiAgICAgRlRfUG9zICAgICAgICBheCA9IEFCUyggZHggKTsKQEAgLTE2Myw5ICsxNjUsOSBAQAogCiAgIC8qIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBhaF9nZXRfb3JpZW50YXRpb24gKHNlZSBiZWxvdykgdG8gdGVzdCAqLwogICAvKiB0aGUgZmlsbCBkaXJlY3Rpb24gb2YgYSBnaXZlbiBiYm94IGV4dHJlbWEgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljCi0gIGludCAgYWhfdGVzdF9leHRyZW1hKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICBuICkKKyAgc3RhdGljIGludAorICBhaF90ZXN0X2V4dHJlbWEoIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICBuICkKICAgewogICAgIEZUX1ZlY3RvciAgKnByZXYsICpjdXIsICpuZXh0OwogICAgIEZUX1BvcyAgICAgIHByb2R1Y3Q7CkBAIC0yMTcsOCArMjE5LDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciAxIG9yIC0xLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljCi0gIGludCAgYWhfZ2V0X29yaWVudGF0aW9uKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApCisgIHN0YXRpYyBpbnQKKyAgYWhfZ2V0X29yaWVudGF0aW9uKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApCiAgIHsKICAgICBGVF9CQm94ICBib3g7CiAgICAgRlRfQkJveCAgaW5kaWNlczsKQEAgLTI5OSw5ICszMDEsOSBAQAogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgQ3JlYXRlcyBhIG5ldyBhbmQgZW1wdHkgQUhfT3V0bGluZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9MT0NBTF9ERUYKLSAgRlRfRXJyb3IgIGFoX291dGxpbmVfbmV3KCBGVF9NZW1vcnkgICAgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSF9PdXRsaW5lKiogIGFvdXRsaW5lICkKKyAgRlRfTE9DQUxfREVGIEZUX0Vycm9yCisgIGFoX291dGxpbmVfbmV3KCBGVF9NZW1vcnkgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgIEFIX091dGxpbmUqKiAgYW91dGxpbmUgKQogICB7CiAgICAgRlRfRXJyb3IgICAgIGVycm9yOwogICAgIEFIX091dGxpbmUqICBvdXRsaW5lOwpAQCAtMzI1LDggKzMyNyw4IEBACiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBEZXN0cm95cyBhIGdpdmVuIEFIX091dGxpbmUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0xPQ0FMX0RFRgotICB2b2lkICBhaF9vdXRsaW5lX2RvbmUoIEFIX091dGxpbmUqICBvdXRsaW5lICkKKyAgRlRfTE9DQUxfREVGIHZvaWQKKyAgYWhfb3V0bGluZV9kb25lKCBBSF9PdXRsaW5lKiAgb3V0bGluZSApCiAgIHsKICAgICBGVF9NZW1vcnkgbWVtb3J5ID0gb3V0bGluZS0+bWVtb3J5OwogCkBAIC0zNDksOSArMzUxLDkgQEAKICAgLyogICAgU2F2ZXMgdGhlIGNvbnRlbnQgb2YgYSBnaXZlbiBBSF9PdXRsaW5lIG9iamVjdCBpbnRvIGEgZmFjZSdzIGdseXBoICovCiAgIC8qICAgIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfTE9DQUxfREVGCi0gIHZvaWQgIGFoX291dGxpbmVfc2F2ZSggQUhfT3V0bGluZSogIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQUhfTG9hZGVyKiAgIGdsb2FkZXIgKQorICBGVF9MT0NBTF9ERUYgdm9pZAorICBhaF9vdXRsaW5lX3NhdmUoIEFIX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgIEFIX0xvYWRlciogICBnbG9hZGVyICkKICAgewogICAgIEFIX1BvaW50KiAgIHBvaW50ICAgICAgID0gb3V0bGluZS0+cG9pbnRzOwogICAgIEFIX1BvaW50KiAgIHBvaW50X2xpbWl0ID0gcG9pbnQgKyBvdXRsaW5lLT5udW1fcG9pbnRzOwpAQCAtMzg0LDkgKzM4Niw5IEBACiAgIC8qICAgIExvYWRzIGFuIHVuc2NhbGVkIG91dGxpbmUgZnJvbSBhIGdseXBoIHNsb3QgaW50byBhbiBBSF9PdXRsaW5lICAgICAqLwogICAvKiAgICBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0xPQ0FMX0RFRgotICBGVF9FcnJvciAgYWhfb3V0bGluZV9sb2FkKCBBSF9PdXRsaW5lKiAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgIGZhY2UgKQorICBGVF9MT0NBTF9ERUYgRlRfRXJyb3IKKyAgYWhfb3V0bGluZV9sb2FkKCBBSF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgZmFjZSApCiAgIHsKICAgICBGVF9NZW1vcnkgICBtZW1vcnkgICAgICAgPSBvdXRsaW5lLT5tZW1vcnk7CiAgICAgRlRfRXJyb3IgICAgZXJyb3IgICAgICAgID0gQUhfRXJyX09rOwpAQCAtNjE5LDkgKzYyMSw5IEBACiAgIH0KIAogCi0gIEZUX0xPQ0FMX0RFRgotICB2b2lkICBhaF9zZXR1cF91diggQUhfT3V0bGluZSogIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICBBSF9VViAgICAgICAgc291cmNlICkKKyAgRlRfTE9DQUxfREVGIHZvaWQKKyAgYWhfc2V0dXBfdXYoIEFIX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgQUhfVVYgICAgICAgIHNvdXJjZSApCiAgIHsKICAgICBBSF9Qb2ludCogIHBvaW50ICAgICAgID0gb3V0bGluZS0+cG9pbnRzOwogICAgIEFIX1BvaW50KiAgcG9pbnRfbGltaXQgPSBwb2ludCArIG91dGxpbmUtPm51bV9wb2ludHM7CkBAIC02NzMsOCArNjc1LDggQEAKICAgfQogCiAKLSAgRlRfTE9DQUxfREVGCi0gIHZvaWQgIGFoX291dGxpbmVfY29tcHV0ZV9zZWdtZW50cyggQUhfT3V0bGluZSogIG91dGxpbmUgKQorICBGVF9MT0NBTF9ERUYgdm9pZAorICBhaF9vdXRsaW5lX2NvbXB1dGVfc2VnbWVudHMoIEFIX091dGxpbmUqICBvdXRsaW5lICkKICAgewogICAgIGludCAgICAgICAgICAgZGltZW5zaW9uOwogICAgIEFIX1NlZ21lbnQqICAgc2VnbWVudHM7CkBAIC05MTYsOCArOTE4LDggQEAKICAgfQogCiAKLSAgRlRfTE9DQUxfREVGCi0gIHZvaWQgIGFoX291dGxpbmVfbGlua19zZWdtZW50cyggQUhfT3V0bGluZSogIG91dGxpbmUgKQorICBGVF9MT0NBTF9ERUYgdm9pZAorICBhaF9vdXRsaW5lX2xpbmtfc2VnbWVudHMoIEFIX091dGxpbmUqICBvdXRsaW5lICkKICAgewogICAgIEFIX1NlZ21lbnQqICBzZWdtZW50czsKICAgICBBSF9TZWdtZW50KiAgc2VnbWVudF9saW1pdDsKQEAgLTEwMzYsOSArMTAzOCw4IEBACiAgIH0KIAogCi0KLSAgc3RhdGljCi0gIHZvaWQgIGFoX291dGxpbmVfY29tcHV0ZV9lZGdlcyggQUhfT3V0bGluZSogIG91dGxpbmUgKQorICBzdGF0aWMgdm9pZAorICBhaF9vdXRsaW5lX2NvbXB1dGVfZWRnZXMoIEFIX091dGxpbmUqICBvdXRsaW5lICkKICAgewogICAgIEFIX0VkZ2UqICAgICAgZWRnZXM7CiAgICAgQUhfU2VnbWVudCogICBzZWdtZW50czsKQEAgLTEyOTAsOCArMTI5MSw4IEBACiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBQZXJmb3JtcyBmZWF0dXJlIGRldGVjdGlvbiBvbiBhIGdpdmVuIEFIX091dGxpbmUgb2JqZWN0LiAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0xPQ0FMX0RFRgotICB2b2lkICBhaF9vdXRsaW5lX2RldGVjdF9mZWF0dXJlcyggQUhfT3V0bGluZSogIG91dGxpbmUgKQorICBGVF9MT0NBTF9ERUYgdm9pZAorICBhaF9vdXRsaW5lX2RldGVjdF9mZWF0dXJlcyggQUhfT3V0bGluZSogIG91dGxpbmUgKQogICB7CiAgICAgYWhfb3V0bGluZV9jb21wdXRlX3NlZ21lbnRzKCBvdXRsaW5lICk7CiAgICAgYWhfb3V0bGluZV9saW5rX3NlZ21lbnRzICAgKCBvdXRsaW5lICk7CkBAIC0xMzA4LDkgKzEzMDksOSBAQAogICAvKiAgICBDb21wdXRlcyB0aGUgYGJsdWUgZWRnZXMnIGluIGEgZ2l2ZW4gb3V0bGluZSAoaS5lLiB0aG9zZSB0aGF0IG11c3QgKi8KICAgLyogICAgYmUgc25hcHBlZCB0byBhIGJsdWUgem9uZSBlZGdlICh0b3Agb3IgYm90dG9tKS4gICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9MT0NBTF9ERUYKLSAgdm9pZCAgYWhfb3V0bGluZV9jb21wdXRlX2JsdWVfZWRnZXMoIEFIX091dGxpbmUqICAgICAgIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSF9GYWNlX0dsb2JhbHMqICBmYWNlX2dsb2JhbHMgKQorICBGVF9MT0NBTF9ERUYgdm9pZAorICBhaF9vdXRsaW5lX2NvbXB1dGVfYmx1ZV9lZGdlcyggQUhfT3V0bGluZSogICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIX0ZhY2VfR2xvYmFscyogIGZhY2VfZ2xvYmFscyApCiAgIHsKICAgICBBSF9FZGdlKiAgICAgZWRnZSAgICAgICA9IG91dGxpbmUtPmhvcnpfZWRnZXM7CiAgICAgQUhfRWRnZSogICAgIGVkZ2VfbGltaXQgPSBlZGdlICsgb3V0bGluZS0+bnVtX2hlZGdlczsKQEAgLTE0NDIsOSArMTQ0Myw5IEBACiAgIC8qICAgIHRoZSBjb250ZW50cyBvZiB0aGUgZGV0ZWN0ZWQgZWRnZXMgKGJhc2ljYWxseSBjaGFuZ2UgdGhlIGBibHVlICAgICAqLwogICAvKiAgICBlZGdlJyBwb2ludGVyIGZyb20gYGRlc2lnbiB1bml0cycgdG8gYHNjYWxlZCBvbmVzJykuICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0xPQ0FMX0RFRgotICB2b2lkICBhaF9vdXRsaW5lX3NjYWxlX2JsdWVfZWRnZXMoIEFIX091dGxpbmUqICAgICAgIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfRmFjZV9HbG9iYWxzKiAgZ2xvYmFscyApCisgIEZUX0xPQ0FMX0RFRiB2b2lkCisgIGFoX291dGxpbmVfc2NhbGVfYmx1ZV9lZGdlcyggQUhfT3V0bGluZSogICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSF9GYWNlX0dsb2JhbHMqICBnbG9iYWxzICkKICAgewogICAgIEFIX0VkZ2UqICBlZGdlICAgICAgID0gb3V0bGluZS0+aG9yel9lZGdlczsKICAgICBBSF9FZGdlKiAgZWRnZV9saW1pdCA9IGVkZ2UgKyBvdXRsaW5lLT5udW1faGVkZ2VzOwpAQCAtMTQ2MSw2ICsxNDYyLDQgQEAKICAgfQogCiAKLQotCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvaGludC9haGdseXBoLmggYi9zcmMvYXV0b2hpbnQvYWhnbHlwaC5oCmluZGV4IGQ5MTA2NTEuLjUzMmE1YmMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvaGludC9haGdseXBoLmgKKysrIGIvc3JjL2F1dG9oaW50L2FoZ2x5cGguaApAQCAtNDUsNDMgKzQ1LDQ0IEBACiAgIH0gQUhfVVY7CiAKIAotICBGVF9MT0NBTAotICB2b2lkICBhaF9zZXR1cF91diggQUhfT3V0bGluZSogIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICBBSF9VViAgICAgICAgc291cmNlICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgYWhfc2V0dXBfdXYoIEFIX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgQUhfVVYgICAgICAgIHNvdXJjZSApOwogCiAKICAgLyogQUhfT3V0bGluZSBmdW5jdGlvbnMgLSB0aGV5IHNob3VsZCBiZSB0eXBpY2FsbHkgY2FsbGVkIGluIHRoaXMgb3JkZXIgKi8KIAotICBGVF9MT0NBTAotICBGVF9FcnJvciAgYWhfb3V0bGluZV9uZXcoIEZUX01lbW9yeSAgICAgbWVtb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIX091dGxpbmUqKiAgYW91dGxpbmUgKTsKKyAgRlRfTE9DQUwgRlRfRXJyb3IKKyAgYWhfb3V0bGluZV9uZXcoIEZUX01lbW9yeSAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgQUhfT3V0bGluZSoqICBhb3V0bGluZSApOwogCi0gIEZUX0xPQ0FMCi0gIEZUX0Vycm9yICBhaF9vdXRsaW5lX2xvYWQoIEFIX091dGxpbmUqICBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgZmFjZSApOworICBGVF9MT0NBTCBGVF9FcnJvcgorICBhaF9vdXRsaW5lX2xvYWQoIEFIX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICBmYWNlICk7CiAKLSAgRlRfTE9DQUwKLSAgdm9pZCAgYWhfb3V0bGluZV9jb21wdXRlX3NlZ21lbnRzKCBBSF9PdXRsaW5lKiAgb3V0bGluZSApOworICBGVF9MT0NBTCB2b2lkCisgIGFoX291dGxpbmVfY29tcHV0ZV9zZWdtZW50cyggQUhfT3V0bGluZSogIG91dGxpbmUgKTsKIAotICBGVF9MT0NBTAotICB2b2lkICBhaF9vdXRsaW5lX2xpbmtfc2VnbWVudHMoIEFIX091dGxpbmUqICBvdXRsaW5lICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgYWhfb3V0bGluZV9saW5rX3NlZ21lbnRzKCBBSF9PdXRsaW5lKiAgb3V0bGluZSApOwogCi0gIEZUX0xPQ0FMCi0gIHZvaWQgIGFoX291dGxpbmVfZGV0ZWN0X2ZlYXR1cmVzKCBBSF9PdXRsaW5lKiAgb3V0bGluZSApOworICBGVF9MT0NBTCB2b2lkCisgIGFoX291dGxpbmVfZGV0ZWN0X2ZlYXR1cmVzKCBBSF9PdXRsaW5lKiAgb3V0bGluZSApOwogCi0gIEZUX0xPQ0FMCi0gIHZvaWQgIGFoX291dGxpbmVfY29tcHV0ZV9ibHVlX2VkZ2VzKCBBSF9PdXRsaW5lKiAgICAgICBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfRmFjZV9HbG9iYWxzKiAgZ2xvYmFscyApOworICBGVF9MT0NBTCB2b2lkCisgIGFoX291dGxpbmVfY29tcHV0ZV9ibHVlX2VkZ2VzKCBBSF9PdXRsaW5lKiAgICAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfRmFjZV9HbG9iYWxzKiAgZ2xvYmFscyApOwogCi0gIEZUX0xPQ0FMCi0gIHZvaWQgIGFoX291dGxpbmVfc2NhbGVfYmx1ZV9lZGdlcyggQUhfT3V0bGluZSogICAgICAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSF9GYWNlX0dsb2JhbHMqICBnbG9iYWxzICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgYWhfb3V0bGluZV9zY2FsZV9ibHVlX2VkZ2VzKCBBSF9PdXRsaW5lKiAgICAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIX0ZhY2VfR2xvYmFscyogIGdsb2JhbHMgKTsKIAotICBGVF9MT0NBTAotICB2b2lkICBhaF9vdXRsaW5lX3NhdmUoIEFIX091dGxpbmUqICBvdXRsaW5lLCBBSF9Mb2FkZXIqICBsb2FkZXIgKTsKKyAgRlRfTE9DQUwgdm9pZAorICBhaF9vdXRsaW5lX3NhdmUoIEFIX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgIEFIX0xvYWRlciogICBsb2FkZXIgKTsKIAotICBGVF9MT0NBTAotICB2b2lkICBhaF9vdXRsaW5lX2RvbmUoIEFIX091dGxpbmUqICBvdXRsaW5lICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgYWhfb3V0bGluZV9kb25lKCBBSF9PdXRsaW5lKiAgb3V0bGluZSApOwogCiAKIEZUX0VORF9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvaGludC9haGhpbnQuYyBiL3NyYy9hdXRvaGludC9haGhpbnQuYwppbmRleCA1MDU5NDliLi5hODg4OGE4IDEwMDY0NAotLS0gYS9zcmMvYXV0b2hpbnQvYWhoaW50LmMKKysrIGIvc3JjL2F1dG9oaW50L2FoaGludC5jCkBAIC00MywxMCArNDMsMTAgQEAKIAogICAvKiBzbmFwIGEgZ2l2ZW4gd2lkdGggaW4gc2NhbGVkIGNvb3JkaW5hdGVzIHRvIG9uZSBvZiB0aGUgKi8KICAgLyogY3VycmVudCBzdGFuZGFyZCB3aWR0aHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYwotICBGVF9Qb3MgIGFoX3NuYXBfd2lkdGgoIEZUX1BvcyogIHdpZHRocywKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICB3aWR0aCApCisgIHN0YXRpYyBGVF9Qb3MKKyAgYWhfc25hcF93aWR0aCggRlRfUG9zKiAgd2lkdGhzLAorICAgICAgICAgICAgICAgICBGVF9JbnQgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgRlRfUG9zICAgd2lkdGggKQogICB7CiAgICAgaW50ICAgICBuOwogICAgIEZUX1BvcyAgYmVzdCAgICAgID0gNjQgKyAzMiArIDI7CkBAIC04OCwxMSArODgsMTEgQEAKIAogCiAgIC8qIGFsaWduIG9uZSBzdGVtIGVkZ2UgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIHN0ZW0gZWRnZSAqLwotICBzdGF0aWMKLSAgdm9pZCAgYWhfYWxpZ25fbGlua2VkX2VkZ2UoIEFIX0hpbnRlciogIGhpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIX0VkZ2UqICAgIGJhc2VfZWRnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIX0VkZ2UqICAgIHN0ZW1fZWRnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHZlcnRpY2FsICkKKyAgc3RhdGljIHZvaWQKKyAgYWhfYWxpZ25fbGlua2VkX2VkZ2UoIEFIX0hpbnRlciogIGhpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFIX0VkZ2UqICAgIGJhc2VfZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFIX0VkZ2UqICAgIHN0ZW1fZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHZlcnRpY2FsICkKICAgewogICAgIEZUX1BvcyAgICAgICBkaXN0ICAgID0gc3RlbV9lZGdlLT5vcG9zIC0gYmFzZV9lZGdlLT5vcG9zOwogICAgIEFIX0dsb2JhbHMqICBnbG9iYWxzID0gJmhpbnRlci0+Z2xvYmFscy0+c2NhbGVkOwpAQCAtMTQ2LDEwICsxNDYsMTAgQEAKICAgfQogCiAKLSAgc3RhdGljCi0gIHZvaWQgIGFoX2FsaWduX3NlcmlmX2VkZ2UoIEFIX0hpbnRlciogIGhpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfRWRnZSogICAgYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfRWRnZSogICAgc2VyaWYgKQorICBzdGF0aWMgdm9pZAorICBhaF9hbGlnbl9zZXJpZl9lZGdlKCBBSF9IaW50ZXIqICBoaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIEFIX0VkZ2UqICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgIEFIX0VkZ2UqICAgIHNlcmlmICkKICAgewogICAgIEZUX1BvcyAgZGlzdDsKICAgICBGVF9Qb3MgIHNpZ24gPSAxOwpAQCAtMTkwLDggKzE5MCw4IEBACiAKIAogICAvKiBBbm90aGVyIGFsdGVybmF0aXZlIGVkZ2UgaGludGluZyBhbGdvcml0aG0gKi8KLSAgc3RhdGljCi0gIHZvaWQgIGFoX2hpbnRfZWRnZXNfMyggQUhfSGludGVyKiAgaGludGVyICkKKyAgc3RhdGljIHZvaWQKKyAgYWhfaGludF9lZGdlc18zKCBBSF9IaW50ZXIqICBoaW50ZXIgKQogICB7CiAgICAgQUhfRWRnZSogICAgIGVkZ2VzOwogICAgIEFIX0VkZ2UqICAgICBlZGdlX2xpbWl0OwpAQCAtMzcyLDEwICszNzIsMTAgQEAKICAgfQogCiAKLSAgRlRfTE9DQUxfREVGCi0gIHZvaWQgIGFoX2hpbnRlcl9oaW50X2VkZ2VzKCBBSF9IaW50ZXIqICBoaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICBub19ob3J6X2VkZ2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgbm9fdmVydF9lZGdlcyApCisgIEZUX0xPQ0FMX0RFRiB2b2lkCisgIGFoX2hpbnRlcl9oaW50X2VkZ2VzKCBBSF9IaW50ZXIqICBoaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICBub19ob3J6X2VkZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgbm9fdmVydF9lZGdlcyApCiAgIHsKICAgICBoaW50ZXItPmRpc2FibGVfaG9yel9lZGdlcyA9IG5vX2hvcnpfZWRnZXM7CiAgICAgaGludGVyLT5kaXNhYmxlX3ZlcnRfZWRnZXMgPSBub192ZXJ0X2VkZ2VzOwpAQCAtNDE1LDggKzQxNSw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICBzdGF0aWMKLSAgdm9pZCAgYWhfaGludGVyX2FsaWduX2VkZ2VfcG9pbnRzKCBBSF9IaW50ZXIqICBoaW50ZXIgKQorICBzdGF0aWMgdm9pZAorICBhaF9oaW50ZXJfYWxpZ25fZWRnZV9wb2ludHMoIEFIX0hpbnRlciogIGhpbnRlciApCiAgIHsKICAgICBBSF9PdXRsaW5lKiAgb3V0bGluZSA9IGhpbnRlci0+Z2x5cGg7CiAgICAgQUhfRWRnZSogICAgIGVkZ2VzOwpAQCAtNDc2LDggKzQ3Niw4IEBACiAKIAogICAvKiBoaW50IHRoZSBzdHJvbmcgcG9pbnRzIC0tIHRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgVHJ1ZVR5cGUgYElQJyAqLwotICBzdGF0aWMKLSAgdm9pZCAgYWhfaGludGVyX2FsaWduX3N0cm9uZ19wb2ludHMoIEFIX0hpbnRlciogIGhpbnRlciApCisgIHN0YXRpYyB2b2lkCisgIGFoX2hpbnRlcl9hbGlnbl9zdHJvbmdfcG9pbnRzKCBBSF9IaW50ZXIqICBoaW50ZXIgKQogICB7CiAgICAgQUhfT3V0bGluZSogIG91dGxpbmUgPSBoaW50ZXItPmdseXBoOwogICAgIEZUX0ludCAgICAgICBkaW1lbnNpb247CkBAIC02MDUsMTAgKzYwNSwxMCBAQAogCiAjaWZuZGVmIEFIX09QVElPTl9OT19XRUFLX0lOVEVSUE9MQVRJT04KIAotICBzdGF0aWMKLSAgdm9pZCAgYWhfaXVwX3NoaWZ0KCBBSF9Qb2ludCogIHAxLAotICAgICAgICAgICAgICAgICAgICAgIEFIX1BvaW50KiAgcDIsCi0gICAgICAgICAgICAgICAgICAgICAgQUhfUG9pbnQqICByZWYgKQorICBzdGF0aWMgdm9pZAorICBhaF9pdXBfc2hpZnQoIEFIX1BvaW50KiAgcDEsCisgICAgICAgICAgICAgICAgQUhfUG9pbnQqICBwMiwKKyAgICAgICAgICAgICAgICBBSF9Qb2ludCogIHJlZiApCiAgIHsKICAgICBBSF9Qb2ludCogIHA7CiAgICAgRlRfUG9zICAgICBkZWx0YSA9IHJlZi0+dSAtIHJlZi0+djsKQEAgLTYyMiwxMSArNjIyLDExIEBACiAgIH0KIAogCi0gIHN0YXRpYwotICB2b2lkICBhaF9pdXBfaW50ZXJwKCBBSF9Qb2ludCogIHAxLAotICAgICAgICAgICAgICAgICAgICAgICBBSF9Qb2ludCogIHAyLAotICAgICAgICAgICAgICAgICAgICAgICBBSF9Qb2ludCogIHJlZjEsCi0gICAgICAgICAgICAgICAgICAgICAgIEFIX1BvaW50KiAgcmVmMiApCisgIHN0YXRpYyB2b2lkCisgIGFoX2l1cF9pbnRlcnAoIEFIX1BvaW50KiAgcDEsCisgICAgICAgICAgICAgICAgIEFIX1BvaW50KiAgcDIsCisgICAgICAgICAgICAgICAgIEFIX1BvaW50KiAgcmVmMSwKKyAgICAgICAgICAgICAgICAgQUhfUG9pbnQqICByZWYyICkKICAgewogICAgIEFIX1BvaW50KiAgcDsKICAgICBGVF9Qb3MgICAgIHU7CkBAIC02OTEsOCArNjkxLDggQEAKIAogCiAgIC8qIGludGVycG9sYXRlIHdlYWsgcG9pbnRzIC0tIHRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgVHJ1ZVR5cGUgYElVUCcgKi8KLSAgc3RhdGljCi0gIHZvaWQgIGFoX2hpbnRlcl9hbGlnbl93ZWFrX3BvaW50cyggQUhfSGludGVyKiAgaGludGVyICkKKyAgc3RhdGljIHZvaWQKKyAgYWhfaGludGVyX2FsaWduX3dlYWtfcG9pbnRzKCBBSF9IaW50ZXIqICBoaW50ZXIgKQogICB7CiAgICAgQUhfT3V0bGluZSogIG91dGxpbmUgPSBoaW50ZXItPmdseXBoOwogICAgIEZUX0ludCAgICAgICBkaW1lbnNpb247CkBAIC03OTksOCArNzk5LDggQEAKICNlbmRpZiAvKiAhQUhfT1BUSU9OX05PX1dFQUtfSU5URVJQT0xBVElPTiAqLwogCiAKLSAgRlRfTE9DQUxfREVGCi0gIHZvaWQgIGFoX2hpbnRlcl9hbGlnbl9wb2ludHMoIEFIX0hpbnRlciogIGhpbnRlciApCisgIEZUX0xPQ0FMX0RFRiB2b2lkCisgIGFoX2hpbnRlcl9hbGlnbl9wb2ludHMoIEFIX0hpbnRlciogIGhpbnRlciApCiAgIHsKICAgICBhaF9oaW50ZXJfYWxpZ25fZWRnZV9wb2ludHMoIGhpbnRlciApOwogCkBAIC04MjYsMTAgKzgyNiwxMCBAQAogCiAKICAgLyogc2NhbGUgYW5kIGZpdCB0aGUgZ2xvYmFsIG1ldHJpY3MgKi8KLSAgc3RhdGljCi0gIHZvaWQgIGFoX2hpbnRlcl9zY2FsZV9nbG9iYWxzKCBBSF9IaW50ZXIqICBoaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICB4X3NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgeV9zY2FsZSApCisgIHN0YXRpYyB2b2lkCisgIGFoX2hpbnRlcl9zY2FsZV9nbG9iYWxzKCBBSF9IaW50ZXIqICBoaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICB4X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgeV9zY2FsZSApCiAgIHsKICAgICBGVF9JbnQgICAgICAgICAgICBuOwogICAgIEFIX0ZhY2VfR2xvYmFscyogIGdsb2JhbHMgPSBoaW50ZXItPmdsb2JhbHM7CkBAIC04NzksOCArODc5LDggQEAKICAgfQogCiAKLSAgc3RhdGljCi0gIHZvaWQgIGFoX2hpbnRlcl9hbGlnbiggQUhfSGludGVyKiAgaGludGVyICkKKyAgc3RhdGljIHZvaWQKKyAgYWhfaGludGVyX2FsaWduKCBBSF9IaW50ZXIqICBoaW50ZXIgKQogICB7CiAgICAgYWhfaGludGVyX2FsaWduX2VkZ2VfcG9pbnRzKCBoaW50ZXIgKTsKICAgICBhaF9oaW50ZXJfYWxpZ25fcG9pbnRzKCBoaW50ZXIgKTsKQEAgLTg4OCw4ICs4ODgsOCBAQAogCiAKICAgLyogZmluYWxpemUgYSBoaW50ZXIgb2JqZWN0ICovCi0gIEZUX0xPQ0FMX0RFRgotICB2b2lkIGFoX2hpbnRlcl9kb25lKCBBSF9IaW50ZXIqICBoaW50ZXIgKQorICBGVF9MT0NBTF9ERUYgdm9pZAorICBhaF9oaW50ZXJfZG9uZSggQUhfSGludGVyKiAgaGludGVyICkKICAgewogICAgIGlmICggaGludGVyICkKICAgICB7CkBAIC05MTEsOSArOTExLDkgQEAKIAogCiAgIC8qIGNyZWF0ZSBhIG5ldyBlbXB0eSBoaW50ZXIgb2JqZWN0ICovCi0gIEZUX0xPQ0FMX0RFRgotICBGVF9FcnJvciAgYWhfaGludGVyX25ldyggRlRfTGlicmFyeSAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBBSF9IaW50ZXIqKiAgYWhpbnRlciApCisgIEZUX0xPQ0FMX0RFRiBGVF9FcnJvcgorICBhaF9oaW50ZXJfbmV3KCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgQUhfSGludGVyKiogIGFoaW50ZXIgKQogICB7CiAgICAgQUhfSGludGVyKiAgaGludGVyID0gMDsKICAgICBGVF9NZW1vcnkgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CkBAIC05NDcsMTAgKzk0NywxMCBAQAogCiAKICAgLyogY3JlYXRlIGEgZmFjZSdzIGF1dG9oaW50IGdsb2JhbHMgKi8KLSAgRlRfTE9DQUxfREVGCi0gIEZUX0Vycm9yICBhaF9oaW50ZXJfbmV3X2ZhY2VfZ2xvYmFscyggQUhfSGludGVyKiAgIGhpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSF9HbG9iYWxzKiAgZ2xvYmFscyApCisgIEZUX0xPQ0FMX0RFRiBGVF9FcnJvcgorICBhaF9oaW50ZXJfbmV3X2ZhY2VfZ2xvYmFscyggQUhfSGludGVyKiAgIGhpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfR2xvYmFscyogIGdsb2JhbHMgKQogICB7CiAgICAgRlRfRXJyb3IgICAgICAgICAgZXJyb3I7CiAgICAgRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5ID0gaGludGVyLT5tZW1vcnk7CkBAIC05NzksOCArOTc5LDggQEAKIAogCiAgIC8qIGRpc2NhcmQgYSBmYWNlJ3MgYXV0b2hpbnQgZ2xvYmFscyAqLwotICBGVF9MT0NBTF9ERUYKLSAgdm9pZCAgYWhfaGludGVyX2RvbmVfZmFjZV9nbG9iYWxzKCBBSF9GYWNlX0dsb2JhbHMqICBnbG9iYWxzICkKKyAgRlRfTE9DQUxfREVGIHZvaWQKKyAgYWhfaGludGVyX2RvbmVfZmFjZV9nbG9iYWxzKCBBSF9GYWNlX0dsb2JhbHMqICBnbG9iYWxzICkKICAgewogICAgIEZUX0ZhY2UgICAgZmFjZSAgID0gZ2xvYmFscy0+ZmFjZTsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPm1lbW9yeTsKQEAgLTk5MCwxMSArOTkwLDExIEBACiAgIH0KIAogCi0gIHN0YXRpYwotICBGVF9FcnJvciAgYWhfaGludGVyX2xvYWQoIEFIX0hpbnRlciogIGhpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsb2FkX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGRlcHRoICkKKyAgc3RhdGljIEZUX0Vycm9yCisgIGFoX2hpbnRlcl9sb2FkKCBBSF9IaW50ZXIqICBoaW50ZXIsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBkZXB0aCApCiAgIHsKICAgICBGVF9GYWNlICAgICAgICAgICBmYWNlICAgICA9IGhpbnRlci0+ZmFjZTsKICAgICBGVF9HbHlwaFNsb3QgICAgICBzbG90ICAgICA9IGZhY2UtPmdseXBoOwpAQCAtMTMwOCwxMiArMTMwOCwxMiBAQAogCiAKICAgLyogbG9hZCBhbmQgaGludCBhIGdpdmVuIGdseXBoICovCi0gIEZUX0xPQ0FMX0RFRgotICBGVF9FcnJvciAgYWhfaGludGVyX2xvYWRfZ2x5cGgoIEFIX0hpbnRlciogICAgaGludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGxvYWRfZmxhZ3MgKQorICBGVF9MT0NBTF9ERUYgRlRfRXJyb3IKKyAgYWhfaGludGVyX2xvYWRfZ2x5cGgoIEFIX0hpbnRlciogICAgaGludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgbG9hZF9mbGFncyApCiAgIHsKICAgICBGVF9GYWNlICAgICAgICAgICBmYWNlICAgICAgICAgPSBzbG90LT5mYWNlOwogICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yOwpAQCAtMTM2MiwxMSArMTM2MiwxMSBAQAogCiAKICAgLyogcmV0cmlldmUgYSBmYWNlJ3MgYXV0b2hpbnQgZ2xvYmFscyBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyAqLwotICBGVF9MT0NBTF9ERUYKLSAgdm9pZCAgYWhfaGludGVyX2dldF9nbG9iYWxfaGludHMoIEFIX0hpbnRlciogIGhpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgICBnbG9iYWxfaGludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKiAgICAgICBnbG9iYWxfbGVuICkKKyAgRlRfTE9DQUxfREVGIHZvaWQKKyAgYWhfaGludGVyX2dldF9nbG9iYWxfaGludHMoIEFIX0hpbnRlciogIGhpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgICBnbG9iYWxfaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKiAgICAgICBnbG9iYWxfbGVuICkKICAgewogICAgIEFIX0dsb2JhbHMqICBnbG9iYWxzID0gMDsKICAgICBGVF9NZW1vcnkgICAgbWVtb3J5ICA9IGhpbnRlci0+bWVtb3J5OwpAQCAtMTM5OSw5ICsxMzk5LDkgQEAKICAgfQogCiAKLSAgRlRfTE9DQUxfREVGCi0gIHZvaWQgIGFoX2hpbnRlcl9kb25lX2dsb2JhbF9oaW50cyggQUhfSGludGVyKiAgaGludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgIGdsb2JhbF9oaW50cyApCisgIEZUX0xPQ0FMX0RFRiB2b2lkCisgIGFoX2hpbnRlcl9kb25lX2dsb2JhbF9oaW50cyggQUhfSGludGVyKiAgaGludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgIGdsb2JhbF9oaW50cyApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGhpbnRlci0+bWVtb3J5OwogCmRpZmYgLS1naXQgYS9zcmMvYXV0b2hpbnQvYWhoaW50LmggYi9zcmMvYXV0b2hpbnQvYWhoaW50LmgKaW5kZXggZmJkNzIzMC4uNTVkODFjYiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9oaW50L2FoaGludC5oCisrKyBiL3NyYy9hdXRvaGludC9haGhpbnQuaApAQCAtMzcsMzQgKzM3LDM0IEBACiAKIAogICAvKiBjcmVhdGUgYSBuZXcgZW1wdHkgaGludGVyIG9iamVjdCAqLwotICBGVF9MT0NBTAotICBGVF9FcnJvciBhaF9oaW50ZXJfbmV3KCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfSGludGVyKiogIGFoaW50ZXIgKTsKKyAgRlRfTE9DQUwgRlRfRXJyb3IKKyAgYWhfaGludGVyX25ldyggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgIEFIX0hpbnRlcioqICBhaGludGVyICk7CiAKICAgLyogTG9hZCBhIGhpbnRlZCBnbHlwaCBpbiB0aGUgaGludGVyICovCi0gIEZUX0xPQ0FMCi0gIEZUX0Vycm9yICBhaF9oaW50ZXJfbG9hZF9nbHlwaCggQUhfSGludGVyKiAgICBoaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgbG9hZF9mbGFncyApOworICBGVF9MT0NBTCBGVF9FcnJvcgorICBhaF9oaW50ZXJfbG9hZF9nbHlwaCggQUhfSGludGVyKiAgICBoaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBsb2FkX2ZsYWdzICk7CiAKICAgLyogZmluYWxpemUgYSBoaW50ZXIgb2JqZWN0ICovCi0gIEZUX0xPQ0FMCi0gIHZvaWQgIGFoX2hpbnRlcl9kb25lKCBBSF9IaW50ZXIqICBoaW50ZXIgKTsKKyAgRlRfTE9DQUwgdm9pZAorICBhaF9oaW50ZXJfZG9uZSggQUhfSGludGVyKiAgaGludGVyICk7CiAKLSAgRlRfTE9DQUwKLSAgdm9pZCAgYWhfaGludGVyX2RvbmVfZmFjZV9nbG9iYWxzKCBBSF9GYWNlX0dsb2JhbHMqICBnbG9iYWxzICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgYWhfaGludGVyX2RvbmVfZmFjZV9nbG9iYWxzKCBBSF9GYWNlX0dsb2JhbHMqICBnbG9iYWxzICk7CiAKLSAgRlRfTE9DQUwKLSAgdm9pZCAgYWhfaGludGVyX2dldF9nbG9iYWxfaGludHMoIEFIX0hpbnRlciogIGhpbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgICBnbG9iYWxfaGludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKiAgICAgICBnbG9iYWxfbGVuICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgYWhfaGludGVyX2dldF9nbG9iYWxfaGludHMoIEFIX0hpbnRlciogIGhpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgICBnbG9iYWxfaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKiAgICAgICBnbG9iYWxfbGVuICk7CiAKLSAgRlRfTE9DQUwKLSAgdm9pZCAgYWhfaGludGVyX2RvbmVfZ2xvYmFsX2hpbnRzKCBBSF9IaW50ZXIqICBoaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgZ2xvYmFsX2hpbnRzICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgYWhfaGludGVyX2RvbmVfZ2xvYmFsX2hpbnRzKCBBSF9IaW50ZXIqICBoaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgZ2xvYmFsX2hpbnRzICk7CiAKIAogRlRfRU5EX0hFQURFUgpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9oaW50L2FobG9hZGVyLmggYi9zcmMvYXV0b2hpbnQvYWhsb2FkZXIuaAppbmRleCBhZWE2MGMzLi4wZjdiMTczIDEwMDY0NAotLS0gYS9zcmMvYXV0b2hpbnQvYWhsb2FkZXIuaAorKysgYi9zcmMvYXV0b2hpbnQvYWhsb2FkZXIuaApAQCAtNjksNDAgKzY5LDQwIEBACiAgIH07CiAKIAotICBGVF9MT0NBTAotICBGVF9FcnJvciAgQUhfR2x5cGhMb2FkZXJfTmV3KCBGVF9NZW1vcnkgICAgICAgICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIX0dseXBoTG9hZGVyKiogIGFsb2FkZXIgKTsKKyAgRlRfTE9DQUwgRlRfRXJyb3IKKyAgQUhfR2x5cGhMb2FkZXJfTmV3KCBGVF9NZW1vcnkgICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgQUhfR2x5cGhMb2FkZXIqKiAgYWxvYWRlciApOwogCi0gIEZUX0xPQ0FMCi0gIEZUX0Vycm9yICBBSF9HbHlwaExvYWRlcl9DcmVhdGVfRXh0cmEoIEFIX0dseXBoTG9hZGVyKiAgbG9hZGVyICk7CisgIEZUX0xPQ0FMIEZUX0Vycm9yCisgIEFIX0dseXBoTG9hZGVyX0NyZWF0ZV9FeHRyYSggQUhfR2x5cGhMb2FkZXIqICBsb2FkZXIgKTsKIAotICBGVF9MT0NBTAotICB2b2lkICBBSF9HbHlwaExvYWRlcl9Eb25lKCBBSF9HbHlwaExvYWRlciogIGxvYWRlciApOworICBGVF9MT0NBTCB2b2lkCisgIEFIX0dseXBoTG9hZGVyX0RvbmUoIEFIX0dseXBoTG9hZGVyKiAgbG9hZGVyICk7CiAKLSAgRlRfTE9DQUwKLSAgdm9pZCAgQUhfR2x5cGhMb2FkZXJfUmVzZXQoIEFIX0dseXBoTG9hZGVyKiAgbG9hZGVyICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgQUhfR2x5cGhMb2FkZXJfUmVzZXQoIEFIX0dseXBoTG9hZGVyKiAgbG9hZGVyICk7CiAKLSAgRlRfTE9DQUwKLSAgdm9pZCAgQUhfR2x5cGhMb2FkZXJfUmV3aW5kKCBBSF9HbHlwaExvYWRlciogIGxvYWRlciApOworICBGVF9MT0NBTCB2b2lkCisgIEFIX0dseXBoTG9hZGVyX1Jld2luZCggQUhfR2x5cGhMb2FkZXIqICBsb2FkZXIgKTsKIAotICBGVF9MT0NBTAotICBGVF9FcnJvciAgQUhfR2x5cGhMb2FkZXJfQ2hlY2tfUG9pbnRzKCBBSF9HbHlwaExvYWRlciogIGxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBuX3BvaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBuX2NvbnRvdXJzICk7CisgIEZUX0xPQ0FMIEZUX0Vycm9yCisgIEFIX0dseXBoTG9hZGVyX0NoZWNrX1BvaW50cyggQUhfR2x5cGhMb2FkZXIqICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBuX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgIG5fY29udG91cnMgKTsKIAotICBGVF9MT0NBTAotICBGVF9FcnJvciAgQUhfR2x5cGhMb2FkZXJfQ2hlY2tfU3ViZ2x5cGhzKCBBSF9HbHlwaExvYWRlciogIGxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBuX3N1YnMgKTsKKyAgRlRfTE9DQUwgRlRfRXJyb3IKKyAgQUhfR2x5cGhMb2FkZXJfQ2hlY2tfU3ViZ2x5cGhzKCBBSF9HbHlwaExvYWRlciogIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgIG5fc3VicyApOwogCi0gIEZUX0xPQ0FMCi0gIHZvaWQgIEFIX0dseXBoTG9hZGVyX1ByZXBhcmUoIEFIX0dseXBoTG9hZGVyKiAgbG9hZGVyICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgQUhfR2x5cGhMb2FkZXJfUHJlcGFyZSggQUhfR2x5cGhMb2FkZXIqICBsb2FkZXIgKTsKIAotICBGVF9MT0NBTAotICB2b2lkICBBSF9HbHlwaExvYWRlcl9BZGQoIEFIX0dseXBoTG9hZGVyKiAgbG9hZGVyICk7CisgIEZUX0xPQ0FMIHZvaWQKKyAgQUhfR2x5cGhMb2FkZXJfQWRkKCBBSF9HbHlwaExvYWRlciogIGxvYWRlciApOwogCi0gIEZUX0xPQ0FMCi0gIEZUX0Vycm9yICBBSF9HbHlwaExvYWRlcl9Db3B5X1BvaW50cyggQUhfR2x5cGhMb2FkZXIqICB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXIqICBzb3VyY2UgKTsKKyAgRlRfTE9DQUwgRlRfRXJyb3IKKyAgQUhfR2x5cGhMb2FkZXJfQ29weV9Qb2ludHMoIEFIX0dseXBoTG9hZGVyKiAgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXIqICBzb3VyY2UgKTsKIAogI2Vsc2UgLyogX1NUQU5EQUxPTkUgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9oaW50L2FobW9kdWxlLmMgYi9zcmMvYXV0b2hpbnQvYWhtb2R1bGUuYwppbmRleCA3YjcyNmM3Li5kMTZiMjYwIDEwMDY0NAotLS0gYS9zcmMvYXV0b2hpbnQvYWhtb2R1bGUuYworKysgYi9zcmMvYXV0b2hpbnQvYWhtb2R1bGUuYwpAQCAtMzIsMjEgKzMyLDIxIEBACiAgIH0gRlRfQXV0b0hpbnRlclJlYzsKIAogCi0gIEZUX0NBTExCQUNLX0RFRihGVF9FcnJvcikKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCiAgIGZ0X2F1dG9oaW50ZXJfaW5pdCggRlRfQXV0b0hpbnRlciAgbW9kdWxlICkKICAgewogICAgIHJldHVybiBhaF9oaW50ZXJfbmV3KCBtb2R1bGUtPnJvb3QubGlicmFyeSwgJm1vZHVsZS0+aGludGVyICk7CiAgIH0KIAogCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKQorICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQogICBmdF9hdXRvaGludGVyX2RvbmUoIEZUX0F1dG9IaW50ZXIgIG1vZHVsZSApCiAgIHsKICAgICBhaF9oaW50ZXJfZG9uZSggbW9kdWxlLT5oaW50ZXIgKTsKICAgfQogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Vycm9yKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgZnRfYXV0b2hpbnRlcl9sb2FkKCBGVF9BdXRvSGludGVyICBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgc2xvdCwKICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgICAgICBzaXplLApAQCAtNTgsNyArNTgsNyBAQAogICB9CiAKIAotICBGVF9DQUxMQkFDS19ERUYodm9pZCkKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKICAgZnRfYXV0b2hpbnRlcl9yZXNldCggRlRfQXV0b0hpbnRlciAgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICBmYWNlICkKICAgewpAQCAtNjksNyArNjksNyBAQAogICB9CiAKIAotICBGVF9DQUxMQkFDS19ERUYodm9pZCkKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKICAgZnRfYXV0b2hpbnRlcl9nZXRfZ2xvYmFscyggRlRfQXV0b0hpbnRlciAgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgICAgICBnbG9iYWxfaGludHMsCkBAIC04MCw3ICs4MCw3IEBACiAgIH0KIAogCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKQorICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQogICBmdF9hdXRvaGludGVyX2RvbmVfZ2xvYmFscyggRlRfQXV0b0hpbnRlciAgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgZ2xvYmFsX2hpbnRzICkKICAgewpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9oaW50L2Fob3B0aW0uYyBiL3NyYy9hdXRvaGludC9haG9wdGltLmMKaW5kZXggODQ4NTI2Yy4uZTI5OTJlYSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9oaW50L2Fob3B0aW0uYworKysgYi9zcmMvYXV0b2hpbnQvYWhvcHRpbS5jCkBAIC02NSw4ICs2NSw4IEBACiAKICNkZWZpbmUgRkxPQVQoIHggKSAgKCAoZmxvYXQpKCAoeCkgLyA2NC4wICkgKQogCi0gIHN0YXRpYwotICB2b2lkICBvcHRpbV9sb2coIGNvbnN0IGNoYXIqICBmbXQsIC4uLiApCisgIHN0YXRpYyB2b2lkCisgIG9wdGltX2xvZyggY29uc3QgY2hhciogIGZtdCwgLi4uICkKICAgewogICAgIHZhX2xpc3QgIGFwOwogCkBAIC03Nyw4ICs3Nyw4IEBACiAgIH0KIAogCi0gIHN0YXRpYwotICB2b2lkICBBSF9EdW1wX1N0ZW1zKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQorICBzdGF0aWMgdm9pZAorICBBSF9EdW1wX1N0ZW1zKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQogICB7CiAgICAgaW50ICAgICAgIG47CiAgICAgQUhfU3RlbSogIHN0ZW07CkBAIC05OCw4ICs5OCw4IEBACiAgIH0KIAogCi0gIHN0YXRpYwotICB2b2lkICBBSF9EdW1wX1N0ZW1zMiggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyICkKKyAgc3RhdGljIHZvaWQKKyAgQUhfRHVtcF9TdGVtczIoIEFIX09wdGltaXplciogIG9wdGltaXplciApCiAgIHsKICAgICBpbnQgICAgICAgbjsKICAgICBBSF9TdGVtKiAgc3RlbTsKQEAgLTExNyw4ICsxMTcsOCBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgdm9pZCAgQUhfRHVtcF9TcHJpbmdzKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQorICBzdGF0aWMgdm9pZAorICBBSF9EdW1wX1NwcmluZ3MoIEFIX09wdGltaXplciogIG9wdGltaXplciApCiAgIHsKICAgICBpbnQgIG47CiAgICAgQUhfU3ByaW5nKiAgc3ByaW5nOwpAQCAtMTU2LDkgKzE1Niw5IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgc3RhdGljCi0gIGludCAgdmFsaWRfc3RlbV9zZWdtZW50cyggQUhfU2VnbWVudCogIHNlZzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfU2VnbWVudCogIHNlZzIgKQorICBzdGF0aWMgaW50CisgIHZhbGlkX3N0ZW1fc2VnbWVudHMoIEFIX1NlZ21lbnQqICBzZWcxLAorICAgICAgICAgICAgICAgICAgICAgICBBSF9TZWdtZW50KiAgc2VnMiApCiAgIHsKICAgICByZXR1cm4gc2VnMS0+c2VyaWYgPT0gMCAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICBzZWcyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCkBAIC0xNzAsOCArMTcwLDggQEAKIAogCiAgIC8qIGNvbXB1dGUgYWxsIHN0ZW1zIGluIGFuIG91dGxpbmUgKi8KLSAgc3RhdGljCi0gIGludCAgb3B0aW1fY29tcHV0ZV9zdGVtcyggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyICkKKyAgc3RhdGljIGludAorICBvcHRpbV9jb21wdXRlX3N0ZW1zKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQogICB7CiAgICAgQUhfT3V0bGluZSogIG91dGxpbmUgPSBvcHRpbWl6ZXItPm91dGxpbmU7CiAgICAgRlRfRml4ZWQgICAgIHNjYWxlOwpAQCAtMzMyLDkgKzMzMiw5IEBACiAKIAogICAvKiByZXR1cm5zIHRoZSBzcHJpbmcgYXJlYSBiZXR3ZWVuIHR3byBzdGVtcywgMCBpZiBub25lICovCi0gIHN0YXRpYwotICBGVF9Qb3MgIHN0ZW1fc3ByaW5nX2FyZWEoIEFIX1N0ZW0qICBzdGVtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSF9TdGVtKiAgc3RlbTIgKQorICBzdGF0aWMgRlRfUG9zCisgIHN0ZW1fc3ByaW5nX2FyZWEoIEFIX1N0ZW0qICBzdGVtMSwKKyAgICAgICAgICAgICAgICAgICAgQUhfU3RlbSogIHN0ZW0yICkKICAgewogICAgIEZUX1BvcyAgYXJlYTEgPSBzdGVtMS0+bWF4X2Nvb3JkIC0gc3RlbTEtPm1pbl9jb29yZDsKICAgICBGVF9Qb3MgIGFyZWEyID0gc3RlbTItPm1heF9jb29yZCAtIHN0ZW0yLT5taW5fY29vcmQ7CkBAIC0zNjIsOCArMzYyLDggQEAKIAogCiAgIC8qIGNvbXB1dGUgYWxsIHNwcmluZ3MgaW4gYW4gb3V0bGluZSAqLwotICBzdGF0aWMKLSAgaW50ICBvcHRpbV9jb21wdXRlX3NwcmluZ3MoIEFIX09wdGltaXplciogIG9wdGltaXplciApCisgIHN0YXRpYyBpbnQKKyAgb3B0aW1fY29tcHV0ZV9zcHJpbmdzKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQogICB7CiAgICAgLyogYmFzaWNhbGx5LCBhIHNwcmluZyBleGlzdHMgYmV0d2VlbiB0d28gc3RlbXMgaWYgbW9zdCBvZiB0aGVpciAqLwogICAgIC8qIHN1cmZhY2UgaXMgYWxpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ2OSw4ICs0NjksOCBAQAogI2lmbmRlZiBBSF9CUlVURV9GT1JDRQogCiAgIC8qIGNvbXB1dGUgYWxsIHNwcmluZyB0ZW5zaW9ucyAqLwotICBzdGF0aWMKLSAgdm9pZCAgb3B0aW1fY29tcHV0ZV90ZW5zaW9ucyggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyICkKKyAgc3RhdGljIHZvaWQKKyAgb3B0aW1fY29tcHV0ZV90ZW5zaW9ucyggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyICkKICAgewogICAgIEFIX1NwcmluZyogIHNwcmluZyA9IG9wdGltaXplci0+c3ByaW5nczsKICAgICBBSF9TcHJpbmcqICBsaW1pdCAgPSBzcHJpbmcgKyBvcHRpbWl6ZXItPm51bV9zcHJpbmdzOwpAQCAtNTI3LDggKzUyNyw4IEBACiAKIAogICAvKiBjb21wdXRlIGFsbCBzdGVtIG1vdmVtZW50cyAtLSByZXR1cm5zIDAgaWYgbm90aGluZyBtb3ZlZCAqLwotICBzdGF0aWMKLSAgaW50ICBvcHRpbV9jb21wdXRlX3N0ZW1fbW92ZW1lbnRzKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQorICBzdGF0aWMgaW50CisgIG9wdGltX2NvbXB1dGVfc3RlbV9tb3ZlbWVudHMoIEFIX09wdGltaXplciogIG9wdGltaXplciApCiAgIHsKICAgICBBSF9TdGVtKiAgc3RlbXMgPSBvcHRpbWl6ZXItPnN0ZW1zOwogICAgIEFIX1N0ZW0qICBsaW1pdCA9IHN0ZW1zICsgb3B0aW1pemVyLT5udW1fc3RlbXM7CkBAIC01ODgsOCArNTg4LDggQEAKIAogCiAgIC8qIGNvbXB1dGUgY3VycmVudCBnbG9iYWwgZGlzdG9ydGlvbiBmcm9tIHNwcmluZ3MgKi8KLSAgc3RhdGljCi0gIEZUX1BvcyAgb3B0aW1fY29tcHV0ZV9kaXN0b3J0aW9uKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQorICBzdGF0aWMgRlRfUG9zCisgIG9wdGltX2NvbXB1dGVfZGlzdG9ydGlvbiggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyICkKICAgewogICAgIEFIX1NwcmluZyogIHNwcmluZyA9IG9wdGltaXplci0+c3ByaW5nczsKICAgICBBSF9TcHJpbmcqICBsaW1pdCAgPSBzcHJpbmcgKyBvcHRpbWl6ZXItPm51bV9zcHJpbmdzOwpAQCAtNjE1LDggKzYxNSw4IEBACiAKIAogICAvKiByZWNvcmQgc3RlbXMgY29uZmlndXJhdGlvbiBpbiBgYmVzdCBvZicgaGlzdG9yeSAqLwotICBzdGF0aWMKLSAgdm9pZCAgb3B0aW1fcmVjb3JkX2NvbmZpZ3VyYXRpb24oIEFIX09wdGltaXplciogIG9wdGltaXplciApCisgIHN0YXRpYyB2b2lkCisgIG9wdGltX3JlY29yZF9jb25maWd1cmF0aW9uKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQogICB7CiAgICAgRlRfUG9zICAgICAgICAgICAgIGRpc3RvcnRpb247CiAgICAgQUhfQ29uZmlndXJhdGlvbiogIGNvbmZpZ3MgPSBvcHRpbWl6ZXItPmNvbmZpZ3M7CkBAIC02NzEsOCArNjcxLDggQEAKICNpZmRlZiBBSF9CUlVURV9GT1JDRQogCiAgIC8qIG9wdGltaXplIG91dGxpbmUgaW4gYSBzaW5nbGUgZGlyZWN0aW9uICovCi0gIHN0YXRpYwotICB2b2lkICBvcHRpbV9jb21wdXRlKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQorICBzdGF0aWMgdm9pZAorICBvcHRpbV9jb21wdXRlKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQogICB7CiAgICAgaW50ICAgICAgIG47CiAgICAgRlRfQm9vbCAgIG1vdmVkOwpAQCAtNzI5LDggKzcyOSw4IEBACiAjZWxzZSAvKiBBSF9CUlVURV9GT1JDRSAqLwogCiAgIC8qIG9wdGltaXplIG91dGxpbmUgaW4gYSBzaW5nbGUgZGlyZWN0aW9uICovCi0gIHN0YXRpYwotICB2b2lkICBvcHRpbV9jb21wdXRlKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQorICBzdGF0aWMgdm9pZAorICBvcHRpbV9jb21wdXRlKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQogICB7CiAgICAgaW50ICBuLCBjb3VudGVyLCBjb3VudGVyMjsKIApAQCAtNzg4LDcgKzc4OCw4IEBACiAKIAogICAvKiByZWxlYXNlcyB0aGUgb3B0aW1pemF0aW9uIGRhdGEgKi8KLSAgdm9pZCBBSF9PcHRpbWl6ZXJfRG9uZSggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyICkKKyAgdm9pZAorICBBSF9PcHRpbWl6ZXJfRG9uZSggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyICkKICAgewogICAgIGlmICggb3B0aW1pemVyICkKICAgICB7CkBAIC04MDUsOSArODA2LDEwIEBACiAKIAogICAvKiBsb2FkcyB0aGUgb3V0bGluZSBpbnRvIHRoZSBvcHRpbWl6ZXIgKi8KLSAgaW50ICBBSF9PcHRpbWl6ZXJfSW5pdCggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBBSF9PdXRsaW5lKiAgICBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgKQorICBpbnQKKyAgQUhfT3B0aW1pemVyX0luaXQoIEFIX09wdGltaXplciogIG9wdGltaXplciwKKyAgICAgICAgICAgICAgICAgICAgIEFIX091dGxpbmUqICAgIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yOwogCkBAIC04NTEsNyArODUzLDggQEAKIAogCiAgIC8qIGNvbXB1dGUgb3B0aW1hbCBvdXRsaW5lICovCi0gIHZvaWQgIEFIX09wdGltaXplcl9Db21wdXRlKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQorICB2b2lkCisgIEFIX09wdGltaXplcl9Db21wdXRlKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKQogICB7CiAgICAgb3B0aW1pemVyLT5udW1fc3RlbXMgICA9IG9wdGltaXplci0+bnVtX2hzdGVtczsKICAgICBvcHRpbWl6ZXItPnN0ZW1zICAgICAgID0gb3B0aW1pemVyLT5ob3J6X3N0ZW1zOwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9oaW50L2Fob3B0aW0uaCBiL3NyYy9hdXRvaGludC9haG9wdGltLmgKaW5kZXggMjliOWMzOC4uNjEwNTIyZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9oaW50L2Fob3B0aW0uaAorKysgYi9zcmMvYXV0b2hpbnQvYWhvcHRpbS5oCkBAIC0xMTMsMTcgKzExMywyMCBAQAogCiAKICAgLyogbG9hZHMgdGhlIG91dGxpbmUgaW50byB0aGUgb3B0aW1pemVyICovCi0gIGludCAgQUhfT3B0aW1pemVyX0luaXQoIEFIX09wdGltaXplciogIG9wdGltaXplciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQUhfT3V0bGluZSogICAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgbWVtb3J5ICk7CisgIGludAorICBBSF9PcHRpbWl6ZXJfSW5pdCggQUhfT3B0aW1pemVyKiAgb3B0aW1pemVyLAorICAgICAgICAgICAgICAgICAgICAgQUhfT3V0bGluZSogICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSApOwogCiAKICAgLyogY29tcHV0ZSBvcHRpbWFsIG91dGxpbmUgKi8KLSAgdm9pZCAgQUhfT3B0aW1pemVyX0NvbXB1dGUoIEFIX09wdGltaXplciogIG9wdGltaXplciApOworICB2b2lkCisgIEFIX09wdGltaXplcl9Db21wdXRlKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKTsKIAogCiAgIC8qIHJlbGVhc2UgdGhlIG9wdGltaXphdGlvbiBkYXRhICovCi0gIHZvaWQgQUhfT3B0aW1pemVyX0RvbmUoIEFIX09wdGltaXplciogIG9wdGltaXplciApOworICB2b2lkCisgIEFIX09wdGltaXplcl9Eb25lKCBBSF9PcHRpbWl6ZXIqICBvcHRpbWl6ZXIgKTsKIAogCiBGVF9FTkRfSEVBREVSCmRpZmYgLS1naXQgYS9zcmMvYXV0b2hpbnQvYWh0eXBlcy5oIGIvc3JjL2F1dG9oaW50L2FodHlwZXMuaAppbmRleCAxMWI3NTE5Li41ZWY2YTg5IDEwMDY0NAotLS0gYS9zcmMvYXV0b2hpbnQvYWh0eXBlcy5oCisrKyBiL3NyYy9hdXRvaGludC9haHR5cGVzLmgKQEAgLTQxMyw3ICs0MTMsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYmx1ZV9zaG9vdHMgOjogVGhlIG92ZXJzaG9vdCBwb3NpdGlvbnMgb2YgYmx1ZSB6b25lcy4gICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHN0cnVjdCBBSF9HbG9iYWxzXworICB0eXBlZGVmIHN0cnVjdCAgQUhfR2xvYmFsc18KICAgewogICAgIEZUX0ludCAgICBudW1fd2lkdGhzOwogICAgIEZUX0ludCAgICBudW1faGVpZ2h0czsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmJveC5jIGIvc3JjL2Jhc2UvZnRiYm94LmMKaW5kZXggZDZlMTFkMi4uZmVjYjdmZiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYm94LmMKKysrIGIvc3JjL2Jhc2UvZnRiYm94LmMKQEAgLTU5LDkgKzU5LDkgQEAKICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEFsd2F5cyAwLiAgTmVlZGVkIGZvciB0aGUgaW50ZXJmYWNlIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljCi0gIGludCAgQkJveF9Nb3ZlX1RvKCBGVF9WZWN0b3IqICB0bywKLSAgICAgICAgICAgICAgICAgICAgIFRCQm94X1JlYyogIHVzZXIgKQorICBzdGF0aWMgaW50CisgIEJCb3hfTW92ZV9UbyggRlRfVmVjdG9yKiAgdG8sCisgICAgICAgICAgICAgICAgVEJCb3hfUmVjKiAgdXNlciApCiAgIHsKICAgICB1c2VyLT5sYXN0ID0gKnRvOwogCkBAIC05NSw5ICs5NSw5IEBACiAgIC8qICAgIG1pbiA6OiBUaGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBtaW5pbXVtLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBtYXggOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgbWF4aW11bS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYwotICB2b2lkICBCQm94X0NvbmljX0NoZWNrKCBGVF9Qb3MgICB5MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgeTIsCisgIHN0YXRpYyB2b2lkCisgIEJCb3hfQ29uaWNfQ2hlY2soIEZUX1BvcyAgIHkxLAorICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICB5MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgeTMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogIG1pbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgbWF4ICkKQEAgLTE1NiwxMCArMTU2LDEwIEBACiAgIC8qICAgIEluIHRoZSBjYXNlIG9mIGEgbm9uLW1vbm90b25vdXMgYXJjLCB3ZSBjb21wdXRlIGRpcmVjdGx5IHRoZSAgICAgICAqLwogICAvKiAgICBleHRyZW11bSBjb29yZGluYXRlcywgYXMgaXQgaXMgc3VmZmljaWVudGx5IGZhc3QuICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYwotICBpbnQgIEJCb3hfQ29uaWNfVG8oIEZUX1ZlY3RvciogIGNvbnRyb2wsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgdG8sCi0gICAgICAgICAgICAgICAgICAgICAgVEJCb3hfUmVjKiAgdXNlciApCisgIHN0YXRpYyBpbnQKKyAgQkJveF9Db25pY19UbyggRlRfVmVjdG9yKiAgY29udHJvbCwKKyAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgdG8sCisgICAgICAgICAgICAgICAgIFRCQm94X1JlYyogIHVzZXIgKQogICB7CiAgICAgLyogd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBgdG8nIHNpbmNlIGl0IGlzIGFsd2F5cyBhbiBgb24nIHBvaW50LCB0aHVzICovCiAgICAgLyogd2l0aGluIHRoZSBiYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yMDcsMTMgKzIwNywxMyBAQAogICAvKiAgICBtYXggOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgbWF4aW11bS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWYgMAotICBzdGF0aWMKLSAgdm9pZCAgQkJveF9DdWJpY19DaGVjayggRlRfUG9zICAgcDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgIHAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICBwMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgcDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogIG1pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgbWF4ICkKKyAgc3RhdGljIHZvaWQKKyAgQkJveF9DdWJpY19DaGVjayggRlRfUG9zICAgcDEsCisgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgIHAyLAorICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICBwMywKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgcDQsCisgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogIG1pbiwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgbWF4ICkKICAgewogICAgIEZUX1BvcyAgc3RhY2tbMzIqMyArIDFdLCAqYXJjOwogCkBAIC0zMTksMTMgKzMxOSwxMyBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgdm9pZCAgQkJveF9DdWJpY19DaGVjayggRlRfUG9zICAgeTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgIHkyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICB5MywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgeTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogIG1pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgbWF4ICkKKyAgc3RhdGljIHZvaWQKKyAgQkJveF9DdWJpY19DaGVjayggRlRfUG9zICAgeTEsCisgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgIHkyLAorICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICB5MywKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgeTQsCisgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogIG1pbiwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgbWF4ICkKICAgewogICAgIC8qIGFsd2F5cyBjb21wYXJlIGZpcnN0IGFuZCBsYXN0IHBvaW50cyAqLwogICAgIGlmICAgICAgKCB5MSA8ICptaW4gKSAgKm1pbiA9IHkxOwpAQCAtNTE5LDExICs1MTksMTEgQEAKICAgLyogICAgSW4gdGhlIGNhc2Ugb2YgYSBub24tbW9ub3Rvbm91cyBhcmMsIHdlIGRvbid0IGNvbXB1dGUgZGlyZWN0bHkgICAgICovCiAgIC8qICAgIGV4dHJlbXVtIGNvb3JkaW5hdGVzLCB3ZSBzdWJkaXZpc2UgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljCi0gIGludCAgQkJveF9DdWJpY19UbyggRlRfVmVjdG9yKiAgY29udHJvbDEsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgY29udHJvbDIsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgdG8sCi0gICAgICAgICAgICAgICAgICAgICAgVEJCb3hfUmVjKiAgdXNlciApCisgIHN0YXRpYyBpbnQKKyAgQkJveF9DdWJpY19UbyggRlRfVmVjdG9yKiAgY29udHJvbDEsCisgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGNvbnRyb2wyLAorICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICB0bywKKyAgICAgICAgICAgICAgICAgVEJCb3hfUmVjKiAgdXNlciApCiAgIHsKICAgICAvKiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGB0bycgc2luY2UgaXQgaXMgYWx3YXlzIGFuIGBvbicgcG9pbnQsIHRodXMgKi8KICAgICAvKiB3aXRoaW4gdGhlIGJib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU1Niw4ICs1NTYsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRiYm94LmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9PdXRsaW5lX0dldF9CQm94KCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQkJveCAgICAgKmFiYm94ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX0dldF9CQm94KCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQkJveCAgICAgKmFiYm94ICkKICAgewogICAgIEZUX0JCb3ggICAgIGNib3g7CiAgICAgRlRfQkJveCAgICAgYmJveDsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Y2FsYy5jIGIvc3JjL2Jhc2UvZnRjYWxjLmMKaW5kZXggZTZlZDBhYS4uZWEzZjZiYiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRjYWxjLmMKKysrIGIvc3JjL2Jhc2UvZnRjYWxjLmMKQEAgLTc0LDcgKzc0LDggQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9GaXhlZCApICBGVF9Sb3VuZEZpeCggRlRfRml4ZWQgIGEgKQorICBGVF9FWFBPUlRfREVGKCBGVF9GaXhlZCApCisgIEZUX1JvdW5kRml4KCBGVF9GaXhlZCAgYSApCiAgIHsKICAgICByZXR1cm4gKCBhID49IDAgKSA/ICAgKCBhICsgMHg4MDAwTCApICYgLTB4MTAwMDBMCiAgICAgICAgICAgICAgICAgICAgICAgOiAtKCgtYSArIDB4ODAwMEwgKSAmIC0weDEwMDAwTCApOwpAQCAtODMsNyArODQsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkgIEZUX0NlaWxGaXgoIEZUX0ZpeGVkICBhICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQorICBGVF9DZWlsRml4KCBGVF9GaXhlZCAgYSApCiAgIHsKICAgICByZXR1cm4gKCBhID49IDAgKSA/ICAgKCBhICsgMHhGRkZGTCApICYgLTB4MTAwMDBMCiAgICAgICAgICAgICAgICAgICAgICAgOiAtKCgtYSArIDB4RkZGRkwgKSAmIC0weDEwMDAwTCApOwpAQCAtOTIsNyArOTQsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkgIEZUX0Zsb29yRml4KCBGVF9GaXhlZCAgYSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKKyAgRlRfRmxvb3JGaXgoIEZUX0ZpeGVkICBhICkKICAgewogICAgIHJldHVybiAoIGEgPj0gMCApID8gICBhICYgLTB4MTAwMDBMCiAgICAgICAgICAgICAgICAgICAgICAgOiAtKCgtYSkgJiAtMHgxMDAwMEwgKTsKQEAgLTEyMiw3ICsxMjUsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9JbnQzMiApICBGVF9TcXJ0MzIoIEZUX0ludDMyICB4ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfSW50MzIgKQorICBGVF9TcXJ0MzIoIEZUX0ludDMyICB4ICkKICAgewogICAgIEZUX1VMb25nICB2YWwsIHJvb3QsIG5ld3Jvb3QsIG1hc2s7CiAKQEAgLTE1NSw5ICsxNTksMTAgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkgIEZUX011bERpdiggRlRfTG9uZyAgYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBjICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCisgIEZUX011bERpdiggRlRfTG9uZyAgYSwKKyAgICAgICAgICAgICBGVF9Mb25nICBiLAorICAgICAgICAgICAgIEZUX0xvbmcgIGMgKQogICB7CiAgICAgRlRfSW50ICAgczsKICAgICBGVF9Mb25nICBkOwpAQCAtMTc3LDggKzE4Miw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApICBGVF9NdWxGaXgoIEZUX0xvbmcgIGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBiICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCisgIEZUX011bEZpeCggRlRfTG9uZyAgYSwKKyAgICAgICAgICAgICBGVF9Mb25nICBiICkKICAgewogICAgIEZUX0ludCAgIHMgPSAxOwogICAgIEZUX0xvbmcgIGM7CkBAIC0xOTQsOCArMjAwLDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkgIEZUX0RpdkZpeCggRlRfTG9uZyAgYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGIgKQorICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkKKyAgRlRfRGl2Rml4KCBGVF9Mb25nICBhLAorICAgICAgICAgICAgIEZUX0xvbmcgIGIgKQogICB7CiAgICAgRlRfSW50MzIgICBzOwogICAgIEZUX1VJbnQzMiAgcTsKQEAgLTIxOSw4ICsyMjYsOCBAQAogCiAgIC8qIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBGVF9TcXJ0NjQoKSAqLwogCi0gIHN0YXRpYwotICBpbnQgIGZ0X29yZGVyNjQoIEZUX0ludDY0ICB6ICkKKyAgc3RhdGljIGludAorICBmdF9vcmRlcjY0KCBGVF9JbnQ2NCAgeiApCiAgIHsKICAgICBpbnQgIGogPSAwOwogCkBAIC0yMzYsNyArMjQzLDggQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FsYy5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfSW50MzIgKSAgRlRfU3FydDY0KCBGVF9JbnQ2NCAgbCApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0ludDMyICkKKyAgRlRfU3FydDY0KCBGVF9JbnQ2NCAgbCApCiAgIHsKICAgICBGVF9JbnQ2NCAgciwgczsKIApAQCAtMzMwLDkgKzMzOCwxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX0FkZDY0KCBGVF9JbnQ2NCogIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludDY0KiAgeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50NjQgICp6ICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX0FkZDY0KCBGVF9JbnQ2NCogIHgsCisgICAgICAgICAgICBGVF9JbnQ2NCogIHksCisgICAgICAgICAgICBGVF9JbnQ2NCAgKnogKQogICB7CiAgICAgcmVnaXN0ZXIgRlRfVUludDMyICBsbywgaGksIG1heDsKIApAQCAtMzQ4LDkgKzM1NywxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0xvbmcgKSAgRlRfTXVsRGl2KCBGVF9Mb25nICBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGMgKQorICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkKKyAgRlRfTXVsRGl2KCBGVF9Mb25nICBhLAorICAgICAgICAgICAgIEZUX0xvbmcgIGIsCisgICAgICAgICAgICAgRlRfTG9uZyAgYyApCiAgIHsKICAgICBsb25nICBzOwogCkBAIC0zODcsOCArMzk3LDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkgIEZUX011bEZpeCggRlRfTG9uZyAgYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGIgKQorICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkKKyAgRlRfTXVsRml4KCBGVF9Mb25nICBhLAorICAgICAgICAgICAgIEZUX0xvbmcgIGIgKQogICB7CiAgICAgRlRfTG9uZyAgIHM7CiAgICAgRlRfVUxvbmcgIHVhLCB1YjsKQEAgLTQyMiw4ICs0MzMsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0xvbmcgKSAgRlRfRGl2Rml4KCBGVF9Mb25nICBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgYiApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0xvbmcgKQorICBGVF9EaXZGaXgoIEZUX0xvbmcgIGEsCisgICAgICAgICAgICAgRlRfTG9uZyAgYiApCiAgIHsKICAgICBGVF9JbnQzMiAgIHM7CiAgICAgRlRfVUludDMyICBxOwpAQCAtNDYxLDkgKzQ3MywxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX011bFRvNjQoIEZUX0ludDMyICAgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50NjQgICp6ICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX011bFRvNjQoIEZUX0ludDMyICAgeCwKKyAgICAgICAgICAgICAgRlRfSW50MzIgICB5LAorICAgICAgICAgICAgICBGVF9JbnQ2NCAgKnogKQogICB7CiAgICAgRlRfSW50MzIgIHM7CiAKQEAgLTQ4Myw4ICs0OTYsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9JbnQzMiApICBGVF9EaXY2NGJ5MzIoIEZUX0ludDY0KiAgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIHkgKQorICBGVF9FWFBPUlRfREVGKCBGVF9JbnQzMiApCisgIEZUX0RpdjY0YnkzMiggRlRfSW50NjQqICB4LAorICAgICAgICAgICAgICAgIEZUX0ludDMyICAgeSApCiAgIHsKICAgICBGVF9JbnQzMiAgIHM7CiAgICAgRlRfVUludDMyICBxOwpAQCAtNTIwLDEwICs1MzQsMTAgQEAKIAogICAvKiB0d28gaGVscGVyIGZ1bmN0aW9ucyBmb3IgRlRfU3FydDY0KCkgKi8KIAotICBzdGF0aWMKLSAgdm9pZCAgRlRfU3ViNjQoIEZUX0ludDY0KiAgeCwKLSAgICAgICAgICAgICAgICAgIEZUX0ludDY0KiAgeSwKLSAgICAgICAgICAgICAgICAgIEZUX0ludDY0KiAgeiApCisgIHN0YXRpYyB2b2lkCisgIEZUX1N1YjY0KCBGVF9JbnQ2NCogIHgsCisgICAgICAgICAgICBGVF9JbnQ2NCogIHksCisgICAgICAgICAgICBGVF9JbnQ2NCogIHogKQogICB7CiAgICAgcmVnaXN0ZXIgRlRfVUludDMyICBsbywgaGk7CiAKQEAgLTUzNiw4ICs1NTAsOCBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgaW50ICBmdF9vcmRlcjY0KCBGVF9JbnQ2NCogIHogKQorICBzdGF0aWMgaW50CisgIGZ0X29yZGVyNjQoIEZUX0ludDY0KiAgeiApCiAgIHsKICAgICBGVF9VSW50MzIgIGk7CiAgICAgaW50ICAgICAgICBqOwpAQCAtNTYyLDcgKzU3Niw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNhbGMuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0ludDMyICkgIEZUX1NxcnQ2NCggRlRfSW50NjQqICBsICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfSW50MzIgKQorICBGVF9TcXJ0NjQoIEZUX0ludDY0KiAgbCApCiAgIHsKICAgICBGVF9JbnQ2NCAgbDI7CiAgICAgRlRfSW50MzIgIHIsIHM7CkBAIC01OTgsNyArNjEzLDggQEAKIAogICAvKiBhIG5vdC1zby1mYXN0IGJ1dCB3b3JraW5nIDE2LjE2IGZpeGVkIHBvaW50IHNxdWFyZSByb290IGZ1bmN0aW9uICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfSW50MzIgKSAgRlRfU3FydEZpeGVkKCBGVF9JbnQzMiAgeCApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0ludDMyICkKKyAgRlRfU3FydEZpeGVkKCBGVF9JbnQzMiAgeCApCiAgIHsKICAgICBGVF9VSW50MzIgIHJvb3QsIHJlbV9oaSwgcmVtX2xvLCB0ZXN0X2RpdjsKICAgICBGVF9JbnQgICAgIGNvdW50OwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRkZWJ1Zy5jIGIvc3JjL2Jhc2UvZnRkZWJ1Zy5jCmluZGV4IGYyYTIyMzcuLjY0MDBjMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0ZGVidWcuYworKysgYi9zcmMvYmFzZS9mdGRlYnVnLmMKQEAgLTU4LDcgKzU4LDggQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfTWVzc2FnZSggY29uc3QgY2hhciogIGZtdCwgLi4uICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX01lc3NhZ2UoIGNvbnN0IGNoYXIqICBmbXQsIC4uLiApCiAgIHsKICAgICB2YV9saXN0ICBhcDsKIApAQCAtNjksNyArNzAsOCBAQAogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX1BhbmljKCBjb25zdCBjaGFyKiAgZm10LCAuLi4gKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfUGFuaWMoIGNvbnN0IGNoYXIqICBmbXQsIC4uLiApCiAgIHsKICAgICB2YV9saXN0ICBhcDsKIApAQCAtODQsOCArODYsOSBAQAogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX1NldFRyYWNlTGV2ZWwoIEZUX1RyYWNlICBjb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgIGxldmVsICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX1NldFRyYWNlTGV2ZWwoIEZUX1RyYWNlICBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICBsZXZlbCApCiAgIHsKICAgICBpZiAoIGNvbXBvbmVudCA+PSB0cmFjZV9tYXggKQogICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRleHRlbmQuYyBiL3NyYy9iYXNlL2Z0ZXh0ZW5kLmMKaW5kZXggZWJhMjRjMy4uMjQ2NGFhYSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRleHRlbmQuYworKysgYi9zcmMvYmFzZS9mdGV4dGVuZC5jCkBAIC02Myw4ICs2Myw4IEBACiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0xPQ0FMX0RFRgotICBGVF9FcnJvciAgRlRfSW5pdF9FeHRlbnNpb25zKCBGVF9Ecml2ZXIgIGRyaXZlciApCisgIEZUX0xPQ0FMX0RFRiBGVF9FcnJvcgorICBGVF9Jbml0X0V4dGVuc2lvbnMoIEZUX0RyaXZlciAgZHJpdmVyICkKICAgewogICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgIGVycm9yOwogICAgIEZUX01lbW9yeSAgICAgICAgICAgICAgIG1lbW9yeTsKQEAgLTk5LDggKzk5LDggQEAKICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfTE9DQUxfREVGCi0gIEZUX0Vycm9yICBGVF9Eb25lX0V4dGVuc2lvbnMoIEZUX0RyaXZlciAgZHJpdmVyICkKKyAgRlRfTE9DQUxfREVGIEZUX0Vycm9yCisgIEZUX0RvbmVfRXh0ZW5zaW9ucyggRlRfRHJpdmVyICBkcml2ZXIgKQogICB7CiAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBkcml2ZXItPnJvb3QubWVtb3J5OwogCkBAIC0xMTIsOSArMTEyLDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0ZXh0ZW5kLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9SZWdpc3Rlcl9FeHRlbnNpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRHJpdmVyICAgICAgICAgICAgZHJpdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0V4dGVuc2lvbl9DbGFzcyogIGNsYXp6ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9SZWdpc3Rlcl9FeHRlbnNpb24oIEZUX0RyaXZlciAgICAgICAgICAgIGRyaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9FeHRlbnNpb25fQ2xhc3MqICBjbGF6eiApCiAgIHsKICAgICBGVF9FeHRlbnNpb25fUmVnaXN0cnkqICByZWdpc3RyeTsKIApAQCAtMTUzLDEwICsxNTMsMTAgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0ZXh0ZW5kLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkKiApICBGVF9HZXRfRXh0ZW5zaW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBleHRlbnNpb25faWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqICAgICAgIGV4dGVuc2lvbl9pbnRlcmZhY2UgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkKiApCisgIEZUX0dldF9FeHRlbnNpb24oIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgZXh0ZW5zaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgICAgZXh0ZW5zaW9uX2ludGVyZmFjZSApCiAgIHsKICAgICBGVF9FeHRlbnNpb25fUmVnaXN0cnkqICByZWdpc3RyeTsKIApAQCAtMjA5LDggKzIwOSw4IEBACiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBDYWxsZWQgYnkgdGhlIGZhY2Ugb2JqZWN0IGRlc3RydWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0xPQ0FMX0RFRgotICBGVF9FcnJvciAgRlRfRGVzdHJveV9FeHRlbnNpb25zKCBGVF9GYWNlICBmYWNlICkKKyAgRlRfTE9DQUxfREVGIEZUX0Vycm9yCisgIEZUX0Rlc3Ryb3lfRXh0ZW5zaW9ucyggRlRfRmFjZSAgZmFjZSApCiAgIHsKICAgICBGVF9FeHRlbnNpb25fUmVnaXN0cnkqICByZWdpc3RyeTsKICAgICBGVF9NZW1vcnkgICAgICAgICAgICAgICBtZW1vcnk7CkBAIC0yNTcsOCArMjU3LDggQEAKICAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIENhbGxlZCBieSB0aGUgZmFjZSBvYmplY3QgY29uc3RydWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfTE9DQUxfREVGCi0gIEZUX0Vycm9yICBGVF9DcmVhdGVfRXh0ZW5zaW9ucyggRlRfRmFjZSAgZmFjZSApCisgIEZUX0xPQ0FMX0RFRiBGVF9FcnJvcgorICBGVF9DcmVhdGVfRXh0ZW5zaW9ucyggRlRfRmFjZSAgZmFjZSApCiAgIHsKICAgICBGVF9FeHRlbnNpb25fUmVnaXN0cnkqICByZWdpc3RyeTsKICAgICBGVF9NZW1vcnkgICAgICAgICAgICAgICBtZW1vcnk7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGdseXBoLmMgYi9zcmMvYmFzZS9mdGdseXBoLmMKaW5kZXggOGRmNTJmYy4uMWQ5NzgwMiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRnbHlwaC5jCisrKyBiL3NyYy9iYXNlL2Z0Z2x5cGguYwpAQCAtNTUsOCArNTUsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRnbHlwaC5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVF9NYXRyaXhfTXVsdGlwbHkoIEZUX01hdHJpeCogIGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBiICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX01hdHJpeF9NdWx0aXBseSggRlRfTWF0cml4KiAgYSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBiICkKICAgewogICAgIEZUX0ZpeGVkICB4eCwgeHksIHl4LCB5eTsKIApAQCAtNzYsNyArNzcsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRnbHlwaC5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfTWF0cml4X0ludmVydCggRlRfTWF0cml4KiAgbWF0cml4ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9NYXRyaXhfSW52ZXJ0KCBGVF9NYXRyaXgqICBtYXRyaXggKQogICB7CiAgICAgRlRfUG9zICBkZWx0YSwgeHgsIHl5OwogCkBAIC0xMTIsMTAgKzExNCwxMCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgc3RhdGljCi0gIEZUX0Vycm9yICBmdF9iaXRtYXBfY29weSggRlRfTWVtb3J5ICAgbWVtb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCogIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAqICB0YXJnZXQgKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfYml0bWFwX2NvcHkoIEZUX01lbW9yeSAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCogIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCogIHRhcmdldCApCiAgIHsKICAgICBGVF9FcnJvciAgZXJyb3I7CiAgICAgRlRfSW50ICAgIHBpdGNoID0gc291cmNlLT5waXRjaDsKQEAgLTEzNiw5ICsxMzgsOSBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgRlRfRXJyb3IgIGZ0X2JpdG1hcF9nbHlwaF9pbml0KCBGVF9CaXRtYXBHbHlwaCAgZ2x5cGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgIHNsb3QgKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfYml0bWFwX2dseXBoX2luaXQoIEZUX0JpdG1hcEdseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgICBzbG90ICkKICAgewogICAgIEZUX0Vycm9yICAgIGVycm9yICAgPSBGVF9FcnJfT2s7CiAgICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IEZUX0dMWVBIKGdseXBoKS0+bGlicmFyeTsKQEAgLTE2OSw5ICsxNzEsOSBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgRlRfRXJyb3IgIGZ0X2JpdG1hcF9nbHlwaF9jb3B5KCBGVF9CaXRtYXBHbHlwaCAgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcEdseXBoICB0YXJnZXQgKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgZnRfYml0bWFwX2dseXBoX2NvcHkoIEZUX0JpdG1hcEdseXBoICBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXBHbHlwaCAgdGFyZ2V0ICkKICAgewogICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc291cmNlLT5yb290LmxpYnJhcnktPm1lbW9yeTsKIApAQCAtMTgzLDggKzE4NSw4IEBACiAgIH0KIAogCi0gIHN0YXRpYwotICB2b2lkICBmdF9iaXRtYXBfZ2x5cGhfZG9uZSggRlRfQml0bWFwR2x5cGggIGdseXBoICkKKyAgc3RhdGljIHZvaWQKKyAgZnRfYml0bWFwX2dseXBoX2RvbmUoIEZUX0JpdG1hcEdseXBoICBnbHlwaCApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IEZUX0dMWVBIKGdseXBoKS0+bGlicmFyeS0+bWVtb3J5OwogCkBAIC0xOTMsOSArMTk1LDkgQEAKICAgfQogCiAKLSAgc3RhdGljCi0gIHZvaWQgIGZ0X2JpdG1hcF9nbHlwaF9iYm94KCBGVF9CaXRtYXBHbHlwaCAgZ2x5cGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94KiAgICAgICAgY2JveCApCisgIHN0YXRpYyB2b2lkCisgIGZ0X2JpdG1hcF9nbHlwaF9iYm94KCBGVF9CaXRtYXBHbHlwaCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94KiAgICAgICAgY2JveCApCiAgIHsKICAgICBjYm94LT54TWluID0gZ2x5cGgtPmxlZnQgPDwgNjsKICAgICBjYm94LT54TWF4ID0gY2JveC0+eE1pbiArICggZ2x5cGgtPmJpdG1hcC53aWR0aCA8PCA2ICk7CkBAIC0yMjcsOSArMjI5LDkgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICBzdGF0aWMKLSAgRlRfRXJyb3IgIGZ0X291dGxpbmVfZ2x5cGhfaW5pdCggRlRfT3V0bGluZUdseXBoICBnbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICBzbG90ICkKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X291dGxpbmVfZ2x5cGhfaW5pdCggRlRfT3V0bGluZUdseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgIHNsb3QgKQogICB7CiAgICAgRlRfRXJyb3IgICAgIGVycm9yICAgPSBGVF9FcnJfT2s7CiAgICAgRlRfTGlicmFyeSAgIGxpYnJhcnkgPSBGVF9HTFlQSChnbHlwaCktPmxpYnJhcnk7CkBAIC0yNjgsMTYgKzI3MCwxNiBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgdm9pZCAgZnRfb3V0bGluZV9nbHlwaF9kb25lKCBGVF9PdXRsaW5lR2x5cGggIGdseXBoICkKKyAgc3RhdGljIHZvaWQKKyAgZnRfb3V0bGluZV9nbHlwaF9kb25lKCBGVF9PdXRsaW5lR2x5cGggIGdseXBoICkKICAgewogICAgIEZUX091dGxpbmVfRG9uZSggRlRfR0xZUEgoIGdseXBoICktPmxpYnJhcnksICZnbHlwaC0+b3V0bGluZSApOwogICB9CiAKIAotICBzdGF0aWMKLSAgRlRfRXJyb3IgIGZ0X291dGxpbmVfZ2x5cGhfY29weSggRlRfT3V0bGluZUdseXBoICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmVHbHlwaCAgdGFyZ2V0ICkKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X291dGxpbmVfZ2x5cGhfY29weSggRlRfT3V0bGluZUdseXBoICBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZUdseXBoICB0YXJnZXQgKQogICB7CiAgICAgRlRfRXJyb3IgICAgZXJyb3I7CiAgICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IEZUX0dMWVBIKCBzb3VyY2UgKS0+bGlicmFyeTsKQEAgLTI5MiwxMCArMjk0LDEwIEBACiAgIH0KIAogCi0gIHN0YXRpYwotICB2b2lkICBmdF9vdXRsaW5lX2dseXBoX3RyYW5zZm9ybSggRlRfT3V0bGluZUdseXBoICBnbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01hdHJpeCogICAgICAgbWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgICAgICBkZWx0YSApCisgIHN0YXRpYyB2b2lkCisgIGZ0X291dGxpbmVfZ2x5cGhfdHJhbnNmb3JtKCBGVF9PdXRsaW5lR2x5cGggIGdseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWF0cml4KiAgICAgICBtYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgICAgIGRlbHRhICkKICAgewogICAgIGlmICggbWF0cml4ICkKICAgICAgIEZUX091dGxpbmVfVHJhbnNmb3JtKCAmZ2x5cGgtPm91dGxpbmUsIG1hdHJpeCApOwpAQCAtMzA1LDE3ICszMDcsMTcgQEAKICAgfQogCiAKLSAgc3RhdGljCi0gIHZvaWQgIGZ0X291dGxpbmVfZ2x5cGhfYmJveCggRlRfT3V0bGluZUdseXBoICBnbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94KiAgICAgICAgIGJib3ggKQorICBzdGF0aWMgdm9pZAorICBmdF9vdXRsaW5lX2dseXBoX2Jib3goIEZUX091dGxpbmVHbHlwaCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQkJveCogICAgICAgICBiYm94ICkKICAgewogICAgIEZUX091dGxpbmVfR2V0X0NCb3goICZnbHlwaC0+b3V0bGluZSwgYmJveCApOwogICB9CiAKIAotICBzdGF0aWMKLSAgRlRfRXJyb3IgIGZ0X291dGxpbmVfZ2x5cGhfcHJlcGFyZSggRlRfT3V0bGluZUdseXBoICBnbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgICBzbG90ICkKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X291dGxpbmVfZ2x5cGhfcHJlcGFyZSggRlRfT3V0bGluZUdseXBoICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgIHNsb3QgKQogICB7CiAgICAgc2xvdC0+Zm9ybWF0ICAgICAgICAgPSBmdF9nbHlwaF9mb3JtYXRfb3V0bGluZTsKICAgICBzbG90LT5vdXRsaW5lICAgICAgICA9IGdseXBoLT5vdXRsaW5lOwpAQCAtMzQ3LDEwICszNDksMTAgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gICBzdGF0aWMKLSAgIEZUX0Vycm9yICBmdF9uZXdfZ2x5cGgoIEZUX0xpYnJhcnkgICAgICAgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0dseXBoX0NsYXNzKiAgY2xhenosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaCogICAgICAgICAgICAgIGFnbHlwaCApCisgICBzdGF0aWMgRlRfRXJyb3IKKyAgIGZ0X25ld19nbHlwaCggRlRfTGlicmFyeSAgICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICBjb25zdCBGVF9HbHlwaF9DbGFzcyogIGNsYXp6LAorICAgICAgICAgICAgICAgICBGVF9HbHlwaCogICAgICAgICAgICAgIGFnbHlwaCApCiAgICB7CiAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OwogICAgICBGVF9FcnJvciAgIGVycm9yOwpAQCAtMzc0LDggKzM3Niw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGdseXBoLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9HbHlwaF9Db3B5KCBGVF9HbHlwaCAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGggICp0YXJnZXQgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dseXBoX0NvcHkoIEZUX0dseXBoICAgc291cmNlLAorICAgICAgICAgICAgICAgICBGVF9HbHlwaCAgKnRhcmdldCApCiAgIHsKICAgICBGVF9HbHlwaCAgICAgICAgICAgICAgIGNvcHk7CiAgICAgRlRfRXJyb3IgICAgICAgICAgICAgICBlcnJvcjsKQEAgLTQxNCw4ICs0MTcsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRnbHlwaC5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfR2V0X0dseXBoKCBGVF9HbHlwaFNsb3QgIHNsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGggICAgICphZ2x5cGggKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldF9HbHlwaCggRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAqYWdseXBoICkKICAgewogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkgPSBzbG90LT5saWJyYXJ5OwogICAgIEZUX0Vycm9yICAgIGVycm9yOwpAQCAtNDc5LDkgKzQ4MywxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRnbHlwaC5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfR2x5cGhfVHJhbnNmb3JtKCBGVF9HbHlwaCAgICBnbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBtYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgZGVsdGEgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dseXBoX1RyYW5zZm9ybSggRlRfR2x5cGggICAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTWF0cml4KiAgbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGRlbHRhICkKICAgewogICAgIGNvbnN0IEZUX0dseXBoX0NsYXNzKiAgY2xheno7CiAgICAgRlRfRXJyb3IgICAgICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKQEAgLTUxMCw5ICs1MTUsMTAgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Z2x5cGguaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfR2x5cGhfR2V0X0NCb3goIEZUX0dseXBoICBnbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGJib3hfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQkJveCAgKmFjYm94ICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX0dseXBoX0dldF9DQm94KCBGVF9HbHlwaCAgZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgYmJveF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgRlRfQkJveCAgKmFjYm94ICkKICAgewogICAgIGNvbnN0IEZUX0dseXBoX0NsYXNzKiAgY2xheno7CiAKQEAgLTU1OSwxMCArNTY1LDExIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGdseXBoLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9HbHlwaF9Ub19CaXRtYXAoIEZUX0dseXBoKiAgIHRoZV9nbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICByZW5kZXJfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBvcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgZGVzdHJveSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhfVG9fQml0bWFwKCBGVF9HbHlwaCogICB0aGVfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgcmVuZGVyX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgIGRlc3Ryb3kgKQogICB7CiAgICAgRlRfR2x5cGhTbG90UmVjICBkdW1teTsKICAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOwpAQCAtNjUzLDcgKzY2MCw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGdseXBoLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX0RvbmVfR2x5cGgoIEZUX0dseXBoICBnbHlwaCApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9Eb25lX0dseXBoKCBGVF9HbHlwaCAgZ2x5cGggKQogICB7CiAgICAgaWYgKCBnbHlwaCApCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRpbml0LmMgYi9zcmMvYmFzZS9mdGluaXQuYwppbmRleCA5YTBkMjE2Li45Mzc3YjEyIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGluaXQuYworKysgYi9zcmMvYmFzZS9mdGluaXQuYwpAQCAtNjcsOCArNjcsOCBAQAogI3VuZGVmICBGVF9VU0VfTU9EVUxFCiAjZGVmaW5lIEZUX1VTRV9NT0RVTEUoIHggKSAgKGNvbnN0IEZUX01vZHVsZV9DbGFzcyopJngsCiAKLXN0YXRpYwotY29uc3QgRlRfTW9kdWxlX0NsYXNzKiAgY29uc3QgZnRfZGVmYXVsdF9tb2R1bGVzW10gPQorICBzdGF0aWMKKyAgY29uc3QgRlRfTW9kdWxlX0NsYXNzKiAgY29uc3QgZnRfZGVmYXVsdF9tb2R1bGVzW10gPQogICB7CiAjaW5jbHVkZSBGVF9DT05GSUdfTU9EVUxFU19ICiAgICAgMApAQCAtNzcsNyArNzcsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtb2R1bGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKICAgewogICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjsKICAgICBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MqIGNvbnN0KiAgY3VyOwpAQCAtMTAyLDcgKzEwMyw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfSW5pdF9GcmVlVHlwZSggRlRfTGlicmFyeSAgKmFsaWJyYXJ5ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Jbml0X0ZyZWVUeXBlKCBGVF9MaWJyYXJ5ICAqYWxpYnJhcnkgKQogICB7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKICAgICBGVF9NZW1vcnkgIG1lbW9yeTsKQEAgLTEzMSw3ICsxMzMsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX0RvbmVfRnJlZVR5cGUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0RvbmVfRnJlZVR5cGUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQogICB7CiAgICAgaWYgKCBsaWJyYXJ5ICkKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGxpc3QuYyBiL3NyYy9iYXNlL2Z0bGlzdC5jCmluZGV4IDk0NTY0ZTAuLmI5NTgyZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0bGlzdC5jCisrKyBiL3NyYy9iYXNlL2Z0bGlzdC5jCkBAIC00MSw4ICs0MSw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0xpc3ROb2RlICkgIEZUX0xpc3RfRmluZCggRlRfTGlzdCAgbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICBkYXRhICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfTGlzdE5vZGUgKQorICBGVF9MaXN0X0ZpbmQoIEZUX0xpc3QgIGxpc3QsCisgICAgICAgICAgICAgICAgdm9pZCogICAgZGF0YSApCiAgIHsKICAgICBGVF9MaXN0Tm9kZSAgY3VyOwogCkBAIC02Miw4ICs2Myw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfTGlzdF9BZGQoIEZUX0xpc3QgICAgICBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9MaXN0X0FkZCggRlRfTGlzdCAgICAgIGxpc3QsCisgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSApCiAgIHsKICAgICBGVF9MaXN0Tm9kZSAgYmVmb3JlID0gbGlzdC0+dGFpbDsKIApAQCAtODIsOCArODQsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRsaXN0LmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX0xpc3RfSW5zZXJ0KCBGVF9MaXN0ICAgICAgbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfTGlzdF9JbnNlcnQoIEZUX0xpc3QgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgKQogICB7CiAgICAgRlRfTGlzdE5vZGUgIGFmdGVyID0gbGlzdC0+aGVhZDsKIApAQCAtMTAyLDggKzEwNSw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfTGlzdF9SZW1vdmUoIEZUX0xpc3QgICAgICBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9MaXN0X1JlbW92ZSggRlRfTGlzdCAgICAgIGxpc3QsCisgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSApCiAgIHsKICAgICBGVF9MaXN0Tm9kZSAgYmVmb3JlLCBhZnRlcjsKIApAQCAtMTI1LDggKzEyOSw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfTGlzdF9VcCggRlRfTGlzdCAgICAgIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfTGlzdF9VcCggRlRfTGlzdCAgICAgIGxpc3QsCisgICAgICAgICAgICAgIEZUX0xpc3ROb2RlICBub2RlICkKICAgewogICAgIEZUX0xpc3ROb2RlICBiZWZvcmUsIGFmdGVyOwogCkBAIC0xNTQsOSArMTU5LDEwIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX0xpc3RfSXRlcmF0ZSggRlRfTGlzdCAgICAgICAgICAgIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTGlzdF9JdGVyYXRvciAgIGl0ZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICB1c2VyICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9MaXN0X0l0ZXJhdGUoIEZUX0xpc3QgICAgICAgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgIEZUX0xpc3RfSXRlcmF0b3IgICBpdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgdXNlciApCiAgIHsKICAgICBGVF9MaXN0Tm9kZSAgY3VyICAgPSBsaXN0LT5oZWFkOwogICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKQEAgLTE4MCwxMCArMTg2LDExIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGxpc3QuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfTGlzdF9GaW5hbGl6ZSggRlRfTGlzdCAgICAgICAgICAgICBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xpc3RfRGVzdHJ1Y3RvciAgZGVzdHJveSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgICAgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgIHVzZXIgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfTGlzdF9GaW5hbGl6ZSggRlRfTGlzdCAgICAgICAgICAgICBsaXN0LAorICAgICAgICAgICAgICAgICAgICBGVF9MaXN0X0Rlc3RydWN0b3IgIGRlc3Ryb3ksCisgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgIHVzZXIgKQogICB7CiAgICAgRlRfTGlzdE5vZGUgIGN1cjsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRtYWMuYyBiL3NyYy9iYXNlL2Z0bWFjLmMKaW5kZXggZmZmMDJmNC4uZDMxMDcwNCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRtYWMuYworKysgYi9zcmMvYmFzZS9mdG1hYy5jCkBAIC04NCw4ICs4NCw4IEBACiAKICAgLyogUXVpY2snbidkaXJ0eSBQYXNjYWwgc3RyaW5nIHRvIEMgc3RyaW5nIGNvbnZlcnRlci4KICAgICAgV2FybmluZzogdGhpcyBjYWxsIGlzIG5vdCB0aHJlYWQgc2FmZSEgVXNlIHdpdGggY2F1dGlvbi4gKi8KLSAgc3RhdGljCi0gIGNoYXIqICBwMmNfc3RyKCB1bnNpZ25lZCBjaGFyKiAgcHN0ciApCisgIHN0YXRpYyBjaGFyKgorICBwMmNfc3RyKCB1bnNpZ25lZCBjaGFyKiAgcHN0ciApCiAgIHsKICAgICBzdGF0aWMgY2hhciAgY3N0clsyNTZdOwogCkBAIC05Nyw5ICs5Nyw5IEBACiAKIAogICAvKiBHaXZlbiBhIHBhdGhuYW1lLCBmaWxsIGluIGEgZmlsZSBzcGVjLiAqLwotICBzdGF0aWMKLSAgaW50IGZpbGVfc3BlY19mcm9tX3BhdGgoIGNvbnN0IGNoYXIqICBwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTU3BlYyogICAgICBzcGVjICkKKyAgc3RhdGljIGludAorICBmaWxlX3NwZWNfZnJvbV9wYXRoKCBjb25zdCBjaGFyKiAgcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIEZTU3BlYyogICAgICBzcGVjICkKICAgewogICAgIFN0cjI1NSAgICBwX3BhdGg7CiAgICAgRlRfVUxvbmcgIHBhdGhfbGVuOwpAQCAtMTIwLDggKzEyMCw4IEBACiAKIAogICAvKiBSZXR1cm4gdGhlIGZpbGUgdHlwZSBvZiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgc3BlYy4gKi8KLSAgc3RhdGljCi0gIE9TVHlwZSAgZ2V0X2ZpbGVfdHlwZSggRlNTcGVjKiAgc3BlYyApCisgIHN0YXRpYyBPU1R5cGUKKyAgZ2V0X2ZpbGVfdHlwZSggRlNTcGVjKiAgc3BlYyApCiAgIHsKICAgICBGSW5mbyAgZmluZm87CiAKQEAgLTEzNCw5ICsxMzQsOSBAQAogCiAKICAgLyogR2l2ZW4gYSBQb3N0U2NyaXB0IGZvbnQgbmFtZSwgY3JlYXRlIHRoZSBNYWNpbnRvc2ggTFdGTiBmaWxlIG5hbWUuICovCi0gIHN0YXRpYwotICB2b2lkIGNyZWF0ZV9sd2ZuX25hbWUoIGNoYXIqICAgcHNfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdHIyNTUgIGx3Zm5fZmlsZV9uYW1lICkKKyAgc3RhdGljIHZvaWQKKyAgY3JlYXRlX2x3Zm5fbmFtZSggY2hhciogICBwc19uYW1lLAorICAgICAgICAgICAgICAgICAgICBTdHIyNTUgIGx3Zm5fZmlsZV9uYW1lICkKICAgewogICAgIGludCAgICAgICBtYXggPSA1LCBjb3VudCA9IDA7CiAgICAgRlRfQnl0ZSogIHAgPSBsd2ZuX2ZpbGVfbmFtZTsKQEAgLTE2NiwxMSArMTY2LDExIEBACiAKICAgLyogR2l2ZW4gYSBmaWxlIHJlZmVyZW5jZSwgYW5zd2VyIGl0cyBsb2NhdGlvbiBhcyBhIHZSZWZOdW0KICAgICAgYW5kIGEgZGlySUQuICovCi0gIHN0YXRpYwotICBGVF9FcnJvciBnZXRfZmlsZV9sb2NhdGlvbiggc2hvcnQgICAgICAgICAgIHJlZl9udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCogICAgICAgICAgdl9yZWZfbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyogICAgICAgICAgIGRpcl9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqICBmaWxlX25hbWUgKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgZ2V0X2ZpbGVfbG9jYXRpb24oIHNob3J0ICAgICAgICAgICByZWZfbnVtLAorICAgICAgICAgICAgICAgICAgICAgc2hvcnQqICAgICAgICAgIHZfcmVmX251bSwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcqICAgICAgICAgICBkaXJfaWQsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiAgZmlsZV9uYW1lICkKICAgewogICAgIEZDQlBCUmVjICBwYjsKICAgICBPU0VyciAgICAgZXJyb3I7CkBAIC0xOTMsMTAgKzE5MywxMCBAQAogCiAgIC8qIE1ha2UgYSBmaWxlIHNwZWMgZm9yIGFuIExXRk4gZmlsZSBmcm9tIGEgRk9ORCByZXNvdXJjZSBhbmQKICAgICAgYSBmaWxlIG5hbWUuICovCi0gIHN0YXRpYwotICBGVF9FcnJvciBtYWtlX2x3Zm5fc3BlYyggSGFuZGxlICAgICAgICAgIGZvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiAgZmlsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNTcGVjKiAgICAgICAgIHNwZWMgKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgbWFrZV9sd2ZuX3NwZWMoIEhhbmRsZSAgICAgICAgICBmb25kLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogIGZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgIEZTU3BlYyogICAgICAgICBzcGVjICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvcjsKICAgICBzaG9ydCAgICAgcmVmX251bSwgdl9yZWZfbnVtOwpAQCAtMjE5LDExICsyMTksMTEgQEAKIAogICAvKiBMb29rIGluc2lkZSB0aGUgRk9ORCBkYXRhLCBhbnN3ZXIgd2hldGhlciB0aGVyZSBzaG91bGQgYmUgYW4gU0ZOVAogICAgICByZXNvdXJjZSwgYW5kIGFuc3dlciB0aGUgbmFtZSBvZiBhIHBvc3NpYmxlIExXRk4gVHlwZSAxIGZpbGUuICovCi0gIHN0YXRpYwotICB2b2lkIHBhcnNlX2ZvbmQoICBjaGFyKiAgIGZvbmRfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgc2hvcnQqICBoYXZlX3NmbnQsCi0gICAgICAgICAgICAgICAgICAgIHNob3J0KiAgc2ZudF9pZCwKLSAgICAgICAgICAgICAgICAgICAgU3RyMjU1ICBsd2ZuX2ZpbGVfbmFtZSApCisgIHN0YXRpYyB2b2lkCisgIHBhcnNlX2ZvbmQoIGNoYXIqICAgZm9uZF9kYXRhLAorICAgICAgICAgICAgICBzaG9ydCogIGhhdmVfc2ZudCwKKyAgICAgICAgICAgICAgc2hvcnQqICBzZm50X2lkLAorICAgICAgICAgICAgICBTdHIyNTUgIGx3Zm5fZmlsZV9uYW1lICkKICAgewogICAgIEFzc2NFbnRyeSogIGFzc29jOwogICAgIEZhbVJlYyogICAgIGZvbmQ7CkBAIC0yODUsMTEgKzI4NSwxMSBAQAogICAgICBQRkIgcGFyc2VyIHdhbnRzIHRoZSBBU0NJSSBoZWFkZXIgYXMgb25lIGNodW5rLCBhbmQgdGhlIExXRk4KICAgICAgY2h1bmtzIGFyZSBvZnRlbiBub3Qgb3JnYW5pemVkIHRoYXQgd2F5LCBzbyB3ZSdsbCBnbHVlIGNodW5rcwogICAgICBvZiB0aGUgc2FtZSB0eXBlIHRvZ2V0aGVyLiAqLwotICBzdGF0aWMKLSAgRlRfRXJyb3IgcmVhZF9sd2ZuKCBGVF9NZW1vcnkgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgIGx3Zm5fc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiogIHBmYl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgc2l6ZSApCisgIHN0YXRpYyBGVF9FcnJvcgorICByZWFkX2x3Zm4oIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgIEZTU3BlYyogICAgbHdmbl9zcGVjLAorICAgICAgICAgICAgIEZUX0J5dGUqKiAgcGZiX2RhdGEsCisgICAgICAgICAgICAgRlRfVUxvbmcqICBzaXplICkKICAgewogICAgIEZUX0Vycm9yICAgICAgIGVycm9yID0gRlRfRXJyX09rOwogICAgIHNob3J0ICAgICAgICAgIHJlc19yZWYsIHJlc19pZDsKQEAgLTM5NCw4ICszOTQsOCBAQAogCiAgIC8qIEZpbmFsaXplciBmb3IgYSBtZW1vcnkgc3RyZWFtOyBnZXRzIGNhbGxlZCBieSBGVF9Eb25lX0ZhY2UoKS4KICAgICAgSXQgZnJlZXMgdGhlIG1lbW9yeSBpdCB1c2VzLiAqLwotICBzdGF0aWMKLSAgdm9pZCAgbWVtb3J5X3N0cmVhbV9jbG9zZSggRlRfU3RyZWFtICBzdHJlYW0gKQorICBzdGF0aWMgdm9pZAorICBtZW1vcnlfc3RyZWFtX2Nsb3NlKCBGVF9TdHJlYW0gIHN0cmVhbSApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OwogCkBAIC00MDksMTIgKzQwOSwxMiBAQAogCiAKICAgLyogQ3JlYXRlIGEgbmV3IG1lbW9yeSBzdHJlYW0gZnJvbSBhIGJ1ZmZlciBhbmQgYSBzaXplLiAqLwotICBzdGF0aWMKLSAgRlRfRXJyb3IgbmV3X21lbW9yeV9zdHJlYW0oIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICAgYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbV9DbG9zZSAgY2xvc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0qICAgICAgIGFzdHJlYW0gKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgbmV3X21lbW9yeV9zdHJlYW0oIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbV9DbG9zZSAgY2xvc2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0qICAgICAgIGFzdHJlYW0gKQogICB7CiAgICAgICBGVF9FcnJvciAgIGVycm9yOwogICAgICAgRlRfTWVtb3J5ICBtZW1vcnk7CkBAIC00NDcsMTMgKzQ0NywxMyBAQAogCiAKICAgLyogQ3JlYXRlIGEgbmV3IEZUX0ZhY2UgZ2l2ZW4gYSBidWZmZXIgYW5kIGEgZHJpdmVyIG5hbWUuICovCi0gIHN0YXRpYwotICBGVF9FcnJvciBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIEZUX0xpYnJhcnkgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgZHJpdmVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgYWZhY2UgKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgb3Blbl9mYWNlX2Zyb21fYnVmZmVyKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqICAgICAgIGRyaXZlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgIGFmYWNlICkKICAgewogICAgIEZUX09wZW5fQXJncyAgYXJnczsKICAgICBGVF9FcnJvciAgICAgIGVycm9yOwpAQCAtNDkzLDExICs0OTMsMTEgQEAKIAogCiAgIC8qIENyZWF0ZSBhIG5ldyBGVF9GYWNlIGZyb20gYSBmaWxlIHNwZWMgdG8gYW4gTFdGTiBmaWxlLiAqLwotICBzdGF0aWMKLSAgRlRfRXJyb3IgIEZUX05ld19GYWNlX0Zyb21fTFdGTiggRlRfTGlicmFyeSAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNTcGVjKiAgICAgc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgYWZhY2UgKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgRlRfTmV3X0ZhY2VfRnJvbV9MV0ZOKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZTU3BlYyogICAgIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlKiAgICBhZmFjZSApCiAgIHsKICAgICBGVF9CeXRlKiAgIHBmYl9kYXRhOwogICAgIEZUX1VMb25nICAgcGZiX3NpemU7CkBAIC01MzYsMTEgKzUzNiwxMSBAQAogCiAKICAgLyogQ3JlYXRlIGEgbmV3IEZUX0ZhY2UgZnJvbSBhbiBTRk5UIHJlc291cmNlLCBzcGVjaWZpZWQgYnkgcmVzIElELiAqLwotICBzdGF0aWMKLSAgRlRfRXJyb3IgIEZUX05ld19GYWNlX0Zyb21fU0ZOVCggRlRfTGlicmFyeSAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgICAgICAgc2ZudF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgYWZhY2UgKQorICBzdGF0aWMgRlRfRXJyb3IKKyAgRlRfTmV3X0ZhY2VfRnJvbV9TRk5UKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICAgICAgIHNmbnRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlKiAgICBhZmFjZSApCiAgIHsKICAgICBIYW5kbGUgICAgIHNmbnQgPSBOVUxMOwogICAgIEZUX0J5dGUqICAgc2ZudF9kYXRhOwpAQCAtNTc2LDExICs1NzYsMTEgQEAKIAogCiAgIC8qIENyZWF0ZSBhIG5ldyBGVF9GYWNlIGZyb20gYSBmaWxlIHNwZWMgdG8gYSBzdWl0Y2FzZSBmaWxlLiAqLwotICBzdGF0aWMKLSAgRlRfRXJyb3IgIEZUX05ld19GYWNlX0Zyb21fU3VpdGNhc2UoIEZUX0xpYnJhcnkgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgIGFmYWNlICkKKyAgc3RhdGljIEZUX0Vycm9yCisgIEZUX05ld19GYWNlX0Zyb21fU3VpdGNhc2UoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTU3BlYyogICAgIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgIGFmYWNlICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKICAgICBzaG9ydCAgICAgcmVzX3JlZiwgcmVzX2luZGV4OwpAQCAtNjE4LDEwICs2MTgsMTEgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGluIGZ0bWFjLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQoIEZUX0xpYnJhcnkgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlICAgICAgZm9uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBmYWNlX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgKmFmYWNlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlICAgICAgZm9uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgKmFmYWNlICkKICAgewogICAgIHNob3J0ICAgICBzZm50X2lkLCBoYXZlX3NmbnQsIGhhdmVfbHdmbiA9IDA7CiAgICAgU3RyMjU1ICAgIGx3Zm5fZmlsZV9uYW1lOwpAQCAtNjc0LDEwICs2NzUsMTEgQEAKICAgLyogICAgYWNjZXB0cyBwYXRobmFtZXMgdG8gTWFjIHN1aXRjYXNlIGZpbGVzLiAgRm9yIGZ1cnRoZXIgICAgICAgICAgICAgICovCiAgIC8qICAgIGRvY3VtZW50YXRpb24gc2VlIHRoZSBvcmlnaW5hbCBGVF9OZXdfRmFjZSgpIGluIGZyZWV0eXBlLmguICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfTmV3X0ZhY2UoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAqYWZhY2UgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19GYWNlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwYXRobmFtZSwKKyAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgKmFmYWNlICkKICAgewogICAgIEZUX09wZW5fQXJncyAgYXJnczsKICAgICBGU1NwZWMgICAgICAgIHNwZWM7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdG1tLmMgYi9zcmMvYmFzZS9mdG1tLmMKaW5kZXggN2U5ZGJlMC4uZTMyMGFmMCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRtbS5jCisrKyBiL3NyYy9iYXNlL2Z0bW0uYwpAQCAtMzMsOCArMzMsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtbS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfR2V0X011bHRpX01hc3RlciggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsdGlfTWFzdGVyICAqYW1hc3RlciApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X011bHRpX01hc3RlciggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsdGlfTWFzdGVyICAqYW1hc3RlciApCiAgIHsKICAgICBGVF9FcnJvciAgZXJyb3I7CiAKQEAgLTYyLDEwICs2MywxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtbS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgbnVtX2Nvb3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgY29vcmRzICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIG51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICBjb29yZHMgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yOwogCkBAIC05Myw4ICs5NCw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1tLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICBmYWNlLAorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcyggRlRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCiAgIHsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0bmFtZXMuYyBiL3NyYy9iYXNlL2Z0bmFtZXMuYwppbmRleCA4ZWY1N2QxLi45N2UyMDkwIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG5hbWVzLmMKKysrIGIvc3JjL2Jhc2UvZnRuYW1lcy5jCkBAIC0yOSw3ICsyOSw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG5hbWVzLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9VSW50ICkgIEZUX0dldF9TZm50X05hbWVfQ291bnQoIEZUX0ZhY2UgIGZhY2UgKQorICBGVF9FWFBPUlRfREVGKCBGVF9VSW50ICkKKyAgRlRfR2V0X1NmbnRfTmFtZV9Db3VudCggRlRfRmFjZSAgZmFjZSApCiAgIHsKICAgICByZXR1cm4gKGZhY2UgJiYgRlRfSVNfU0ZOVCggZmFjZSApKSA/ICgoVFRfRmFjZSlmYWNlKS0+bnVtX25hbWVzIDogMDsKICAgfQpAQCAtMzcsOSArMzgsMTAgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bmFtZXMuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgRlRfR2V0X1NmbnRfTmFtZSggRlRfRmFjZSAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2ZudE5hbWUgICphbmFtZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1NmbnRfTmFtZSggRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICBGVF9TZm50TmFtZSAgKmFuYW1lICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50OwogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdG9ianMuYyBiL3NyYy9iYXNlL2Z0b2Jqcy5jCmluZGV4IDAxYjA3YmYuLmE3MjBjZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0b2Jqcy5jCisrKyBiL3NyYy9iYXNlL2Z0b2Jqcy5jCkBAIC01MCw5ICs1MCwxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtZW1vcnkuaCAqLwogCi0gIEZUX0JBU0VfREVGKCBGVF9FcnJvciApICBGVF9BbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAqUCApCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX0FsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgIEZUX0xvbmcgICAgc2l6ZSwKKyAgICAgICAgICAgIHZvaWQqICAgICAqUCApCiAgIHsKICAgICBGVF9Bc3NlcnQoIFAgIT0gMCApOwogCkBAIC04MiwxMCArODMsMTEgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bWVtb3J5LmggKi8KIAotICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKSAgRlRfUmVhbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIGN1cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogICAgIFAgKQorICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9SZWFsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgRlRfTG9uZyAgICBjdXJyZW50LAorICAgICAgICAgICAgICBGVF9Mb25nICAgIHNpemUsCisgICAgICAgICAgICAgIHZvaWQqKiAgICAgUCApCiAgIHsKICAgICB2b2lkKiAgUTsKIApAQCAtMTIwLDggKzEyMiw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1lbW9yeS5oICovCiAKLSAgRlRfQkFTRV9ERUYoIHZvaWQgKSAgRlRfRnJlZSggRlRfTWVtb3J5ICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiAgICAgUCApCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgRlRfRnJlZSggRlRfTWVtb3J5ICBtZW1vcnksCisgICAgICAgICAgIHZvaWQqKiAgICAgUCApCiAgIHsKICAgICBGVF9UUkFDRTcoKCAiRlRfRnJlZToiICkpOwogICAgIEZUX1RSQUNFNygoICIgRnJlZWluZyBibG9jayAweCUwOHAsIHJlZiAweCUwOHBcbiIsCkBAIC0xNTksMTAgKzE2MiwxMCBAQAogICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSB2YWxpZCBgYXN0cmVhbScgcGFyYW1ldGVyLiAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMKLSAgRlRfRXJyb3IgIGZ0X25ld19pbnB1dF9zdHJlYW0oIEZUX0xpYnJhcnkgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PcGVuX0FyZ3MqICBhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtKiAgICAgYXN0cmVhbSApCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9uZXdfaW5wdXRfc3RyZWFtKCBGVF9MaWJyYXJ5ICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICBGVF9PcGVuX0FyZ3MqICBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0qICAgICBhc3RyZWFtICkKICAgewogICAgIEZUX0Vycm9yICAgZXJyb3I7CiAgICAgRlRfTWVtb3J5ICBtZW1vcnk7CkBAIC0yMTgsNyArMjIxLDggQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVF9Eb25lX1N0cmVhbSggRlRfU3RyZWFtICBzdHJlYW0gKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfRG9uZV9TdHJlYW0oIEZUX1N0cmVhbSAgc3RyZWFtICkKICAgewogICAgIGlmICggc3RyZWFtICYmIHN0cmVhbS0+Y2xvc2UgKQogICAgIHsKQEAgLTIyOCw5ICsyMzIsOSBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgdm9pZCAgZnRfZG9uZV9zdHJlYW0oIEZUX1N0cmVhbSogIGFzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICBleHRlcm5hbCApCisgIHN0YXRpYyB2b2lkCisgIGZ0X2RvbmVfc3RyZWFtKCBGVF9TdHJlYW0qICBhc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgZXh0ZXJuYWwgKQogICB7CiAgICAgRlRfU3RyZWFtICBzdHJlYW0gPSAqYXN0cmVhbTsKIApAQCAtMjk0LDggKzI5OCw5IEBACiAKIAogICAvKiBjcmVhdGUgYSBuZXcgZ2x5cGggbG9hZGVyICovCi0gIEZUX0JBU0VfREVGKCBGVF9FcnJvciApICBGVF9HbHlwaExvYWRlcl9OZXcoIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXIqICAqYWxvYWRlciApCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX0dseXBoTG9hZGVyX05ldyggRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyKiAgKmFsb2FkZXIgKQogICB7CiAgICAgRlRfR2x5cGhMb2FkZXIqICBsb2FkZXI7CiAgICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsKQEAgLTMxMSw3ICszMTYsOCBAQAogCiAKICAgLyogcmV3aW5kIHRoZSBnbHlwaCBsb2FkZXIgLSByZXNldCBjb3VudGVycyB0byAwICovCi0gIEZUX0JBU0VfREVGKCB2b2lkICkgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIgKQorICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIgKQogICB7CiAgICAgRlRfR2x5cGhMb2FkKiAgYmFzZSAgICA9ICZsb2FkZXItPmJhc2U7CiAgICAgRlRfR2x5cGhMb2FkKiAgY3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQ7CkBAIC0zMjcsNyArMzMzLDggQEAKIAogICAvKiByZXNldCB0aGUgZ2x5cGggbG9hZGVyLCBmcmVlcyBhbGwgYWxsb2NhdGVkIHRhYmxlcyAqLwogICAvKiBhbmQgc3RhcnRzIGZyb20gemVybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9CQVNFX0RFRiggdm9pZCApICBGVF9HbHlwaExvYWRlcl9SZXNldCggRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIgKQorICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX0dseXBoTG9hZGVyX1Jlc2V0KCBGVF9HbHlwaExvYWRlciogIGxvYWRlciApCiAgIHsKICAgICBGVF9NZW1vcnkgbWVtb3J5ID0gbG9hZGVyLT5tZW1vcnk7CiAKQEAgLTM0Nyw3ICszNTQsOCBAQAogCiAKICAgLyogZGVsZXRlIGEgZ2x5cGggbG9hZGVyICovCi0gIEZUX0JBU0VfREVGKCB2b2lkICkgIEZUX0dseXBoTG9hZGVyX0RvbmUoIEZUX0dseXBoTG9hZGVyKiAgbG9hZGVyICkKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9HbHlwaExvYWRlcl9Eb25lKCBGVF9HbHlwaExvYWRlciogIGxvYWRlciApCiAgIHsKICAgICBpZiAoIGxvYWRlciApCiAgICAgewpAQCAtMzYxLDggKzM2OSw4IEBACiAKIAogICAvKiByZS1hZGp1c3QgdGhlIGBjdXJyZW50JyBvdXRsaW5lIGZpZWxkcyAqLwotICBzdGF0aWMKLSAgdm9pZCAgRlRfR2x5cGhMb2FkZXJfQWRqdXN0X1BvaW50cyggRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIgKQorICBzdGF0aWMgdm9pZAorICBGVF9HbHlwaExvYWRlcl9BZGp1c3RfUG9pbnRzKCBGVF9HbHlwaExvYWRlciogIGxvYWRlciApCiAgIHsKICAgICBGVF9PdXRsaW5lKiAgYmFzZSAgICA9ICZsb2FkZXItPmJhc2Uub3V0bGluZTsKICAgICBGVF9PdXRsaW5lKiAgY3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQub3V0bGluZTsKQEAgLTM3OSw4ICszODcsOCBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKSAgRlRfR2x5cGhMb2FkZXJfQ3JlYXRlX0V4dHJhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaExvYWRlciogIGxvYWRlciApCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX0dseXBoTG9hZGVyX0NyZWF0ZV9FeHRyYSggRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIgKQogICB7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxvYWRlci0+bWVtb3J5OwpAQCAtMzk3LDggKzQwNSw4IEBACiAKIAogICAvKiByZS1hZGp1c3QgdGhlIGBjdXJyZW50JyBzdWJnbHlwaHMgZmllbGQgKi8KLSAgc3RhdGljCi0gIHZvaWQgIEZUX0dseXBoTG9hZGVyX0FkanVzdF9TdWJnbHlwaHMoIEZUX0dseXBoTG9hZGVyKiAgbG9hZGVyICkKKyAgc3RhdGljIHZvaWQKKyAgRlRfR2x5cGhMb2FkZXJfQWRqdXN0X1N1YmdseXBocyggRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIgKQogICB7CiAgICAgRlRfR2x5cGhMb2FkKiBiYXNlICAgID0gJmxvYWRlci0+YmFzZTsKICAgICBGVF9HbHlwaExvYWQqIGN1cnJlbnQgPSAmbG9hZGVyLT5jdXJyZW50OwpAQCAtNDEyLDEwICs0MjAsMTAgQEAKICAgLyogZnVuY3Rpb24gcmVhbGxvY2F0ZXMgaXRzIG91dGxpbmUgdGFibGVzIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCBpdCAgICovCiAgIC8qIERPRVNOJ1QgY2hhbmdlIHRoZSBudW1iZXIgb2YgcG9pbnRzIHdpdGhpbiB0aGUgbG9hZGVyISAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkgIEZUX0dseXBoTG9hZGVyX0NoZWNrX1BvaW50cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgbl9wb2ludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgbl9jb250b3VycyApCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX0dseXBoTG9hZGVyX0NoZWNrX1BvaW50cyggRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBuX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgIG5fY29udG91cnMgKQogICB7CiAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSAgPSBsb2FkZXItPm1lbW9yeTsKICAgICBGVF9FcnJvciAgICAgZXJyb3IgICA9IEZUX0Vycl9PazsKQEAgLTQ3Myw5ICs0ODEsOSBAQAogICAvKiByZWFsbG9jYXRlcyBpdHMgc3ViZ2x5cGhzIHRhYmxlIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCBpdCBET0VTICovCiAgIC8qIE5PVCBjaGFuZ2UgdGhlIG51bWJlciBvZiBzdWJnbHlwaHMgd2l0aGluIHRoZSBsb2FkZXIhICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKSAgRlRfR2x5cGhMb2FkZXJfQ2hlY2tfU3ViZ2x5cGhzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaExvYWRlciogIGxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBuX3N1YnMgKQorICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9HbHlwaExvYWRlcl9DaGVja19TdWJnbHlwaHMoIEZUX0dseXBoTG9hZGVyKiAgbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgbl9zdWJzICkKICAgewogICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbG9hZGVyLT5tZW1vcnk7CiAgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FcnJfT2s7CkBAIC01MDQsNyArNTEyLDggQEAKIAogCiAgIC8qIHByZXBhcmUgbG9hZGVyIGZvciB0aGUgYWRkaXRpb24gb2YgYSBuZXcgZ2x5cGggb24gdG9wIG9mIHRoZSBiYXNlIG9uZSAqLwotICBGVF9CQVNFX0RFRiggdm9pZCApICBGVF9HbHlwaExvYWRlcl9QcmVwYXJlKCBGVF9HbHlwaExvYWRlciogIGxvYWRlciApCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgRlRfR2x5cGhMb2FkZXJfUHJlcGFyZSggRlRfR2x5cGhMb2FkZXIqICBsb2FkZXIgKQogICB7CiAgICAgRlRfR2x5cGhMb2FkKiAgY3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQ7CiAKQEAgLTUxOSw3ICs1MjgsOCBAQAogCiAKICAgLyogYWRkIGN1cnJlbnQgZ2x5cGggdG8gdGhlIGJhc2UgaW1hZ2UgLSBhbmQgcHJlcGFyZSBmb3IgYW5vdGhlciAqLwotICBGVF9CQVNFX0RFRiggdm9pZCApICBGVF9HbHlwaExvYWRlcl9BZGQoIEZUX0dseXBoTG9hZGVyKiAgbG9hZGVyICkKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9HbHlwaExvYWRlcl9BZGQoIEZUX0dseXBoTG9hZGVyKiAgbG9hZGVyICkKICAgewogICAgIEZUX0dseXBoTG9hZCogIGJhc2UgICAgPSAmbG9hZGVyLT5iYXNlOwogICAgIEZUX0dseXBoTG9hZCogIGN1cnJlbnQgPSAmbG9hZGVyLT5jdXJyZW50OwpAQCAtNTQ2LDkgKzU1Niw5IEBACiAgIH0KIAogCi0gIEZUX0JBU0VfREVGKCBGVF9FcnJvciApICBGVF9HbHlwaExvYWRlcl9Db3B5X1BvaW50cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXIqICB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyKiAgc291cmNlICkKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2x5cGhMb2FkZXJfQ29weV9Qb2ludHMoIEZUX0dseXBoTG9hZGVyKiAgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXIqICBzb3VyY2UgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yOwogICAgIEZUX1VJbnQgICBudW1fcG9pbnRzICAgPSBzb3VyY2UtPmJhc2Uub3V0bGluZS5uX3BvaW50czsKQEAgLTU5Nyw4ICs2MDcsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIHN0YXRpYwotICBGVF9FcnJvciAgZnRfZ2x5cGhzbG90X2luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHN0YXRpYyBGVF9FcnJvcgorICBmdF9nbHlwaHNsb3RfaW5pdCggRlRfR2x5cGhTbG90ICBzbG90ICkKICAgewogICAgIEZUX0RyaXZlciAgICAgICAgIGRyaXZlciA9IHNsb3QtPmZhY2UtPmRyaXZlcjsKICAgICBGVF9Ecml2ZXJfQ2xhc3MqICBjbGF6eiAgPSBkcml2ZXItPmNsYXp6OwpAQCAtNjI1LDggKzYzNSw4IEBACiAgIH0KIAogCi0gIHN0YXRpYwotICB2b2lkICBmdF9nbHlwaHNsb3RfY2xlYXIoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHN0YXRpYyB2b2lkCisgIGZ0X2dseXBoc2xvdF9jbGVhciggRlRfR2x5cGhTbG90ICBzbG90ICkKICAgewogICAgIC8qIGZyZWUgYml0bWFwIGlmIG5lZWRlZCAqLwogICAgIGlmICggc2xvdC0+ZmxhZ3MgJiBmdF9nbHlwaF9vd25fYml0bWFwICkKQEAgLTY1Nyw4ICs2NjcsOCBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgdm9pZCAgZnRfZ2x5cGhzbG90X2RvbmUoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHN0YXRpYyB2b2lkCisgIGZ0X2dseXBoc2xvdF9kb25lKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQogICB7CiAgICAgRlRfRHJpdmVyICAgICAgICAgZHJpdmVyID0gc2xvdC0+ZmFjZS0+ZHJpdmVyOwogICAgIEZUX0RyaXZlcl9DbGFzcyogIGNsYXp6ICA9IGRyaXZlci0+Y2xheno7CkBAIC02ODUsOCArNjk1LDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b2Jqcy5oICovCiAKLSAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkgIEZUX05ld19HbHlwaFNsb3QoIEZUX0ZhY2UgICAgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICphc2xvdCApCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19HbHlwaFNsb3QoIEZUX0ZhY2UgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgKmFzbG90ICkKICAgewogICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yOwogICAgIEZUX0RyaXZlciAgICAgICAgIGRyaXZlcjsKQEAgLTcyOCw3ICs3MzksOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KIAotICBGVF9CQVNFX0RFRiggdm9pZCApICBGVF9Eb25lX0dseXBoU2xvdCggRlRfR2x5cGhTbG90ICBzbG90ICkKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9Eb25lX0dseXBoU2xvdCggRlRfR2x5cGhTbG90ICBzbG90ICkKICAgewogICAgIGlmICggc2xvdCApCiAgICAgewpAQCAtNzU5LDkgKzc3MSwxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfU2V0X1RyYW5zZm9ybSggRlRfRmFjZSAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBtYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgZGVsdGEgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfU2V0X1RyYW5zZm9ybSggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfTWF0cml4KiAgbWF0cml4LAorICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBkZWx0YSApCiAgIHsKICAgICBGVF9GYWNlX0ludGVybmFsICBpbnRlcm5hbDsKIApAQCAtODA1LDE0ICs4MTgsMTYgQEAKICAgfQogCiAKLSAgc3RhdGljIEZUX1JlbmRlcmVyICBmdF9sb29rdXBfZ2x5cGhfcmVuZGVyZXIoIEZUX0dseXBoU2xvdCAgc2xvdCApOworICBzdGF0aWMgRlRfUmVuZGVyZXIKKyAgZnRfbG9va3VwX2dseXBoX3JlbmRlcmVyKCBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKIAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX0xvYWRfR2x5cGgoIEZUX0ZhY2UgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICBsb2FkX2ZsYWdzICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Mb2FkX0dseXBoKCBGVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICBGVF9VSW50ICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgRlRfSW50ICAgbG9hZF9mbGFncyApCiAgIHsKICAgICBGVF9FcnJvciAgICAgIGVycm9yOwogICAgIEZUX0RyaXZlciAgICAgZHJpdmVyOwpAQCAtOTQ1LDkgKzk2MCwxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX0xvYWRfQ2hhciggRlRfRmFjZSAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIGNoYXJfY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgbG9hZF9mbGFncyApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTG9hZF9DaGFyKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcl9jb2RlLAorICAgICAgICAgICAgICAgIEZUX0ludCAgICBsb2FkX2ZsYWdzICkKICAgewogICAgIEZUX1VJbnQgIGdseXBoX2luZGV4OwogCkBAIC05NjQsMTAgKzk4MCwxMCBAQAogCiAKICAgLyogZGVzdHJ1Y3RvciBmb3Igc2l6ZXMgbGlzdCAqLwotICBzdGF0aWMKLSAgdm9pZCAgZGVzdHJveV9zaXplKCBGVF9NZW1vcnkgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfRHJpdmVyICBkcml2ZXIgKQorICBzdGF0aWMgdm9pZAorICBkZXN0cm95X3NpemUoIEZUX01lbW9yeSAgbWVtb3J5LAorICAgICAgICAgICAgICAgIEZUX1NpemUgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICBGVF9Ecml2ZXIgIGRyaXZlciApCiAgIHsKICAgICAvKiBmaW5hbGl6ZSBjbGllbnQtc3BlY2lmaWMgZGF0YSAqLwogICAgIGlmICggc2l6ZS0+Z2VuZXJpYy5maW5hbGl6ZXIgKQpAQCAtOTgzLDEwICs5OTksMTAgQEAKIAogCiAgIC8qIGRlc3RydWN0b3IgZm9yIGZhY2VzIGxpc3QgKi8KLSAgc3RhdGljCi0gIHZvaWQgIGRlc3Ryb3lfZmFjZSggRlRfTWVtb3J5ICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgIEZUX0RyaXZlciAgZHJpdmVyICkKKyAgc3RhdGljIHZvaWQKKyAgZGVzdHJveV9mYWNlKCBGVF9NZW1vcnkgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgRlRfRHJpdmVyICBkcml2ZXIgKQogICB7CiAgICAgRlRfRHJpdmVyX0NsYXNzKiAgY2xhenogPSBkcml2ZXItPmNsYXp6OwogCkBAIC0xMDI2LDggKzEwNDIsOCBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgdm9pZCAgRGVzdHJveV9Ecml2ZXIoIEZUX0RyaXZlciAgZHJpdmVyICkKKyAgc3RhdGljIHZvaWQKKyAgRGVzdHJveV9Ecml2ZXIoIEZUX0RyaXZlciAgZHJpdmVyICkKICAgewogICAgIEZUX0xpc3RfRmluYWxpemUoICZkcml2ZXItPmZhY2VzX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xpc3RfRGVzdHJ1Y3RvcilkZXN0cm95X2ZhY2UsCkBAIC0xMDQ4LDEzICsxMDY0LDEzIEBACiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgc29tZSB3b3JrIGZvciBGVF9PcGVuX0ZhY2UoKS4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYwotICBGVF9FcnJvciAgb3Blbl9mYWNlKCBGVF9Ecml2ZXIgICAgICBkcml2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlKiAgICAgICBhZmFjZSApCisgIHN0YXRpYyBGVF9FcnJvcgorICBvcGVuX2ZhY2UoIEZUX0RyaXZlciAgICAgIGRyaXZlciwKKyAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICBzdHJlYW0sCisgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAorICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcywKKyAgICAgICAgICAgICBGVF9GYWNlKiAgICAgICBhZmFjZSApCiAgIHsKICAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnk7CiAgICAgRlRfRHJpdmVyX0NsYXNzKiAgY2xheno7CkBAIC0xMTA5LDEwICsxMTI1LDExIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfTmV3X0ZhY2UoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAqYWZhY2UgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19GYWNlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwYXRobmFtZSwKKyAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgKmFmYWNlICkKICAgewogICAgIEZUX09wZW5fQXJncyAgYXJnczsKIApAQCAtMTEzMiwxMSArMTE0OSwxMiBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX05ld19NZW1vcnlfRmFjZSggRlRfTGlicmFyeSAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfQnl0ZSogIGZpbGVfYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICAgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBmYWNlX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICphZmFjZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfTmV3X01lbW9yeV9GYWNlKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgZmlsZV9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgKmFmYWNlICkKICAgewogICAgIEZUX09wZW5fQXJncyAgYXJnczsKIApAQCAtMTE1NSwxMCArMTE3MywxMSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX09wZW5fRmFjZSggRlRfTGlicmFyeSAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PcGVuX0FyZ3MqICBhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAqYWZhY2UgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX09wZW5fRmFjZSggRlRfTGlicmFyeSAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICBGVF9PcGVuX0FyZ3MqICBhcmdzLAorICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAqYWZhY2UgKQogICB7CiAgICAgRlRfRXJyb3IgICAgIGVycm9yOwogICAgIEZUX0RyaXZlciAgICBkcml2ZXI7CkBAIC0xMzMyLDggKzEzNTEsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX0F0dGFjaF9GaWxlKCBGVF9GYWNlICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0F0dGFjaF9GaWxlKCBGVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUgKQogICB7CiAgICAgRlRfT3Blbl9BcmdzICBvcGVuOwogCkBAIC0xMzUyLDggKzEzNzIsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX0F0dGFjaF9TdHJlYW0oIEZUX0ZhY2UgICAgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX09wZW5fQXJncyogIHBhcmFtZXRlcnMgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0F0dGFjaF9TdHJlYW0oIEZUX0ZhY2UgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX09wZW5fQXJncyogIHBhcmFtZXRlcnMgKQogICB7CiAgICAgRlRfU3RyZWFtICBzdHJlYW07CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKQEAgLTEzOTUsNyArMTQxNiw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfRG9uZV9GYWNlKCBGVF9GYWNlICBmYWNlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Eb25lX0ZhY2UoIEZUX0ZhY2UgIGZhY2UgKQogICB7CiAgICAgRlRfRXJyb3IgICAgIGVycm9yOwogICAgIEZUX0RyaXZlciAgICBkcml2ZXI7CkBAIC0xNDI4LDggKzE0NTAsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9OZXdfU2l6ZSggRlRfRmFjZSAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplICAqYXNpemUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19TaXplKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgIEZUX1NpemUgICphc2l6ZSApCiAgIHsKICAgICBGVF9FcnJvciAgICAgICAgICBlcnJvcjsKICAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnk7CkBAIC0xNDg5LDcgKzE1MTIsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9Eb25lX1NpemUoIEZUX1NpemUgIHNpemUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0RvbmVfU2l6ZSggRlRfU2l6ZSAgc2l6ZSApCiAgIHsKICAgICBGVF9FcnJvciAgICAgZXJyb3I7CiAgICAgRlRfRHJpdmVyICAgIGRyaXZlcjsKQEAgLTE1MzQsOSArMTU1OCw5IEBACiAgIH0KIAogCi0gIHN0YXRpYwotICB2b2lkICBmdF9yZWNvbXB1dGVfc2NhbGVkX21ldHJpY3MoIEZUX0ZhY2UgICAgICAgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyApCisgIHN0YXRpYyB2b2lkCisgIGZ0X3JlY29tcHV0ZV9zY2FsZWRfbWV0cmljcyggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzICkKICAgewogICAgIC8qIENvbXB1dGUgcm9vdCBhc2NlbmRlciwgZGVzY2VuZGVyLCB0ZXN0IGhlaWdodCwgYW5kIG1heF9hZHZhbmNlICovCiAKQEAgLTE1NTYsMTEgKzE1ODAsMTIgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9TZXRfQ2hhcl9TaXplKCBGVF9GYWNlICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjaGFyX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjaGFyX2hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgaG9yel9yZXNvbHV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICB2ZXJ0X3Jlc29sdXRpb24gKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1NldF9DaGFyX1NpemUoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGNoYXJfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGNoYXJfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBob3J6X3Jlc29sdXRpb24sCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHZlcnRfcmVzb2x1dGlvbiApCiAgIHsKICAgICBGVF9FcnJvciAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKICAgICBGVF9Ecml2ZXIgICAgICAgICBkcml2ZXI7CkBAIC0xNjI2LDkgKzE2NTEsMTAgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9TZXRfUGl4ZWxfU2l6ZXMoIEZUX0ZhY2UgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgcGl4ZWxfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgcGl4ZWxfaGVpZ2h0ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9TZXRfUGl4ZWxfU2l6ZXMoIEZUX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgcGl4ZWxfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgcGl4ZWxfaGVpZ2h0ICkKICAgewogICAgIEZUX0Vycm9yICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOwogICAgIEZUX0RyaXZlciAgICAgICAgIGRyaXZlcjsKQEAgLTE2NzgsMTEgKzE3MDQsMTIgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9HZXRfS2VybmluZyggRlRfRmFjZSAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnRfZ2x5cGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodF9nbHlwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGtlcm5fbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciAgKmFrZXJuaW5nICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfS2VybmluZyggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnRfZ2x5cGgsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGtlcm5fbW9kZSwKKyAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciAgKmFrZXJuaW5nICkKICAgewogICAgIEZUX0Vycm9yICAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgRlRfRHJpdmVyICBkcml2ZXI7CkBAIC0xNzI3LDggKzE3NTQsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX1NlbGVjdF9DaGFybWFwKCBGVF9GYWNlICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0VuY29kaW5nICBlbmNvZGluZyApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2VsZWN0X0NoYXJtYXAoIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfRW5jb2RpbmcgIGVuY29kaW5nICkKICAgewogICAgIEZUX0NoYXJNYXAqICBjdXI7CiAgICAgRlRfQ2hhck1hcCogIGxpbWl0OwpAQCAtMTc1OCw4ICsxNzg2LDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9TZXRfQ2hhcm1hcCggRlRfRmFjZSAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0NoYXJNYXAgIGNoYXJtYXAgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1NldF9DaGFybWFwKCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgRlRfQ2hhck1hcCAgY2hhcm1hcCApCiAgIHsKICAgICBGVF9DaGFyTWFwKiAgY3VyOwogICAgIEZUX0NoYXJNYXAqICBsaW1pdDsKQEAgLTE3ODgsOCArMTgxNyw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfVUludCApICBGVF9HZXRfQ2hhcl9JbmRleCggRlRfRmFjZSAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX1VJbnQgKQorICBGVF9HZXRfQ2hhcl9JbmRleCggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUgKQogICB7CiAgICAgRlRfVUludCAgICByZXN1bHQ7CiAgICAgRlRfRHJpdmVyICBkcml2ZXI7CkBAIC0xODA3LDEwICsxODM3LDExIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfR2V0X0dseXBoX05hbWUoIEZUX0ZhY2UgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldF9HbHlwaF9OYW1lKCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBidWZmZXJfbWF4ICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50OwogCkBAIC0xODQ2LDggKzE4NzcsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gdHR0YWJsZXMuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQqICkgIEZUX0dldF9TZm50X1RhYmxlKCBGVF9GYWNlICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NmbnRfVGFnICB0YWcgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkKiApCisgIEZUX0dldF9TZm50X1RhYmxlKCBGVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1NmbnRfVGFnICB0YWcgKQogICB7CiAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgdGFibGUgPSAwOwogICAgIEZUX0dldF9TZm50X1RhYmxlX0Z1bmMgIGZ1bmM7CkBAIC0xODgxLDkgKzE5MTMsMTAgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICAgLyogbG9va3VwIGEgcmVuZGVyZXIgYnkgZ2x5cGggZm9ybWF0IGluIHRoZSBsaWJyYXJ5J3MgbGlzdCAqLwotICBGVF9CQVNFX0RFRiggRlRfUmVuZGVyZXIgKSAgRlRfTG9va3VwX1JlbmRlcmVyKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoX0Zvcm1hdCAgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSogICAgIG5vZGUgKQorICBGVF9CQVNFX0RFRiggRlRfUmVuZGVyZXIgKQorICBGVF9Mb29rdXBfUmVuZGVyZXIoIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaF9Gb3JtYXQgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSogICAgIG5vZGUgKQogICB7CiAgICAgRlRfTGlzdE5vZGUgICBjdXI7CiAgICAgRlRfUmVuZGVyZXIgICByZXN1bHQgPSAwOwpAQCAtMTkyMiw4ICsxOTU1LDggQEAKICAgfQogCiAKLSAgc3RhdGljCi0gIEZUX1JlbmRlcmVyICBmdF9sb29rdXBfZ2x5cGhfcmVuZGVyZXIoIEZUX0dseXBoU2xvdCAgc2xvdCApCisgIHN0YXRpYyBGVF9SZW5kZXJlcgorICBmdF9sb29rdXBfZ2x5cGhfcmVuZGVyZXIoIEZUX0dseXBoU2xvdCAgc2xvdCApCiAgIHsKICAgICBGVF9GYWNlICAgICAgZmFjZSAgICA9IHNsb3QtPmZhY2U7CiAgICAgRlRfTGlicmFyeSAgIGxpYnJhcnkgPSBGVF9GQUNFX0xJQlJBUlkoIGZhY2UgKTsKQEAgLTE5MzcsOCArMTk3MCw4IEBACiAgIH0KIAogCi0gIHN0YXRpYwotICB2b2lkICBmdF9zZXRfY3VycmVudF9yZW5kZXJlciggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHN0YXRpYyB2b2lkCisgIGZ0X3NldF9jdXJyZW50X3JlbmRlcmVyKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKICAgewogICAgIEZUX1JlbmRlcmVyICByZW5kZXJlcjsKIApAQCAtMTk0OCw4ICsxOTgxLDggQEAKICAgfQogCiAKLSAgc3RhdGljCi0gIEZUX0Vycm9yICBmdF9hZGRfcmVuZGVyZXIoIEZUX01vZHVsZSAgbW9kdWxlICkKKyAgc3RhdGljIEZUX0Vycm9yCisgIGZ0X2FkZF9yZW5kZXJlciggRlRfTW9kdWxlICBtb2R1bGUgKQogICB7CiAgICAgRlRfTGlicmFyeSAgIGxpYnJhcnkgPSBtb2R1bGUtPmxpYnJhcnk7CiAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSAgPSBsaWJyYXJ5LT5tZW1vcnk7CkBAIC0xOTk2LDggKzIwMjksOCBAQAogICB9CiAKIAotICBzdGF0aWMKLSAgdm9pZCAgZnRfcmVtb3ZlX3JlbmRlcmVyKCBGVF9Nb2R1bGUgIG1vZHVsZSApCisgIHN0YXRpYyB2b2lkCisgIGZ0X3JlbW92ZV9yZW5kZXJlciggRlRfTW9kdWxlICBtb2R1bGUgKQogICB7CiAgICAgRlRfTGlicmFyeSAgIGxpYnJhcnkgPSBtb2R1bGUtPmxpYnJhcnk7CiAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSAgPSBsaWJyYXJ5LT5tZW1vcnk7CkBAIC0yMDI1LDggKzIwNTgsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRyZW5kZXIuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX1JlbmRlcmVyICkgIEZUX0dldF9SZW5kZXJlciggRlRfTGlicmFyeSAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoX0Zvcm1hdCAgZm9ybWF0ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfUmVuZGVyZXIgKQorICBGVF9HZXRfUmVuZGVyZXIoIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICBGVF9HbHlwaF9Gb3JtYXQgIGZvcm1hdCApCiAgIHsKICAgICAvKiB0ZXN0IGZvciB2YWxpZCBgbGlicmFyeScgZGVsYXllZCB0byBGVF9Mb29rdXBfUmVuZGVyZXIoKSAqLwogCkBAIC0yMDM2LDEwICsyMDcwLDExIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHJlbmRlci5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfU2V0X1JlbmRlcmVyKCBGVF9MaWJyYXJ5ICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcmVyICAgIHJlbmRlcmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIG51bV9wYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1ldGVycyApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2V0X1JlbmRlcmVyKCBGVF9MaWJyYXJ5ICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcmVyICAgIHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIG51bV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1ldGVycyApCiAgIHsKICAgICBGVF9MaXN0Tm9kZSAgbm9kZTsKICAgICBGVF9FcnJvciAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CkBAIC0yMDgxLDEwICsyMTE2LDEwIEBACiAgIH0KIAogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgcmVuZGVyX21vZGUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCggRlRfTGlicmFyeSAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIHJlbmRlcl9tb2RlICkKICAgewogICAgIEZUX0Vycm9yICAgICBlcnJvciA9IEZUX0Vycl9PazsKICAgICBGVF9SZW5kZXJlciAgcmVuZGVyZXI7CkBAIC0yMTQyLDggKzIxNzcsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX1JlbmRlcl9HbHlwaCggRlRfR2x5cGhTbG90ICBzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgcmVuZGVyX21vZGUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1JlbmRlcl9HbHlwaCggRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgcmVuZGVyX21vZGUgKQogICB7CiAgICAgRlRfTGlicmFyeSAgIGxpYnJhcnk7CiAKQEAgLTIxODUsOCArMjIyMSw4IEBACiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgVGhlIGRyaXZlciBfbXVzdF8gYmUgTE9DS0VEISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYwotICB2b2lkICBEZXN0cm95X01vZHVsZSggRlRfTW9kdWxlICBtb2R1bGUgKQorICBzdGF0aWMgdm9pZAorICBEZXN0cm95X01vZHVsZSggRlRfTW9kdWxlICBtb2R1bGUgKQogICB7CiAgICAgRlRfTWVtb3J5ICAgICAgICAgbWVtb3J5ICA9IG1vZHVsZS0+bWVtb3J5OwogICAgIEZUX01vZHVsZV9DbGFzcyogIGNsYXp6ICAgPSBtb2R1bGUtPmNsYXp6OwpAQCAtMjIxOSw4ICsyMjU1LDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kdWxlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9BZGRfTW9kdWxlKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MqICBjbGF6eiApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfQWRkX01vZHVsZSggRlRfTGlicmFyeSAgICAgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgY29uc3QgRlRfTW9kdWxlX0NsYXNzKiAgY2xhenogKQogICB7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKICAgICBGVF9NZW1vcnkgIG1lbW9yeTsKQEAgLTIzNDUsOCArMjM4Miw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1vZHVsZS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfTW9kdWxlICkgRlRfR2V0X01vZHVsZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBtb2R1bGVfbmFtZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX01vZHVsZSApCisgIEZUX0dldF9Nb2R1bGUoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbW9kdWxlX25hbWUgKQogICB7CiAgICAgRlRfTW9kdWxlICAgcmVzdWx0ID0gMDsKICAgICBGVF9Nb2R1bGUqICBjdXI7CkBAIC0yMzcyLDggKzI0MTAsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvYmpzLmggKi8KIAotICBGVF9CQVNFX0RFRiggY29uc3Qgdm9pZCogKSAgRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBtb2RfbmFtZSApCisgIEZUX0JBU0VfREVGKCBjb25zdCB2b2lkKiApCisgIEZUX0dldF9Nb2R1bGVfSW50ZXJmYWNlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBtb2RfbmFtZSApCiAgIHsKICAgICBGVF9Nb2R1bGUgIG1vZHVsZTsKIApAQCAtMjM4OCw4ICsyNDI3LDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kdWxlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9SZW1vdmVfTW9kdWxlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGUgICBtb2R1bGUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX1JlbW92ZV9Nb2R1bGUoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZSAgIG1vZHVsZSApCiAgIHsKICAgICAvKiB0cnkgdG8gZmluZCB0aGUgbW9kdWxlIGZyb20gdGhlIHRhYmxlLCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZXJlICovCiAKQEAgLTI0NDIsOCArMjQ4Miw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1vZHVsZS5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfTmV3X0xpYnJhcnkoIEZUX01lbW9yeSAgICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICAqYWxpYnJhcnkgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX05ld19MaWJyYXJ5KCBGVF9NZW1vcnkgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgKmFsaWJyYXJ5ICkKICAgewogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkgPSAwOwogICAgIEZUX0Vycm9yICAgIGVycm9yOwpAQCAtMjQ3Niw3ICsyNTE3LDggQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kdWxlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9Eb25lX0xpYnJhcnkoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0RvbmVfTGlicmFyeSggRlRfTGlicmFyeSAgbGlicmFyeSApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeTsKICAgICBGVF9VSW50ICAgIG47CkBAIC0yNTE1LDkgKzI1NTcsMTAgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW9kdWxlLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX1NldF9EZWJ1Z19Ib29rKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgIGhvb2tfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RlYnVnSG9va19GdW5jICBkZWJ1Z19ob29rICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX1NldF9EZWJ1Z19Ib29rKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICBob29rX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgRlRfRGVidWdIb29rX0Z1bmMgIGRlYnVnX2hvb2sgKQogICB7CiAgICAgaWYgKCBsaWJyYXJ5ICYmIGRlYnVnX2hvb2sgJiYKICAgICAgICAgIGhvb2tfaW5kZXggPApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRvdXRsbi5jIGIvc3JjL2Jhc2UvZnRvdXRsbi5jCmluZGV4IDZlNTg1ZTguLjg3MDE5ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0b3V0bG4uYworKysgYi9zcmMvYmFzZS9mdG91dGxuLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdXRsbi5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfT3V0bGluZV9EZWNvbXBvc2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgICAgICAgICAgIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfT3V0bGluZV9GdW5jcyogIGludGVyZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgdXNlciApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9EZWNvbXBvc2UoIEZUX091dGxpbmUqICAgICAgICAgICAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfT3V0bGluZV9GdW5jcyogIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICB1c2VyICkKICAgewogI3VuZGVmIFNDQUxFRAogI2RlZmluZSBTQ0FMRUQoIHggKSAgKCAoICh4KSA8PCBzaGlmdCApIC0gZGVsdGEgKQpAQCAtMjQ5LDExICsyNDksMTEgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfT3V0bGluZV9OZXdfSW50ZXJuYWwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbnVtUG9pbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICBudW1Db250b3VycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lICAqYW5vdXRsaW5lICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX05ld19JbnRlcm5hbCggRlRfTWVtb3J5ICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBudW1Qb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgbnVtQ29udG91cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lICAqYW5vdXRsaW5lICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvcjsKIApAQCAtMjg0LDEwICsyODQsMTEgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b3V0bG4uaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX091dGxpbmVfTmV3KCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBudW1Qb2ludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgbnVtQ29udG91cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lICAqYW5vdXRsaW5lICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX05ldyggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbnVtUG9pbnRzLAorICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgIG51bUNvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSAgKmFub3V0bGluZSApCiAgIHsKICAgICBpZiAoICFsaWJyYXJ5ICkKICAgICAgIHJldHVybiBGVF9FcnJfSW52YWxpZF9MaWJyYXJ5X0hhbmRsZTsKQEAgLTI5OSw4ICszMDAsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdXRsbi5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfT3V0bGluZV9Db3B5KCBGVF9PdXRsaW5lKiAgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUgICp0YXJnZXQgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfQ29weSggRlRfT3V0bGluZSogIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lICAqdGFyZ2V0ICkKICAgewogICAgIEZUX0ludCAgaXNfb3duZXI7CiAKQEAgLTMzMCw4ICszMzIsOSBAQAogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9PdXRsaW5lX0RvbmVfSW50ZXJuYWwoIEZUX01lbW9yeSAgICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfRG9uZV9JbnRlcm5hbCggRlRfTWVtb3J5ICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSApCiAgIHsKICAgICBpZiAoIG91dGxpbmUgKQogICAgIHsKQEAgLTM1Miw4ICszNTUsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdXRsbi5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfT3V0bGluZV9Eb25lKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9Eb25lKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSApCiAgIHsKICAgICAvKiBjaGVjayBmb3IgdmFsaWQgYG91dGxpbmUnIGluIEZUX091dGxpbmVfRG9uZV9JbnRlcm5hbCgpICovCiAKQEAgLTM2Niw4ICszNzAsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdXRsbi5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVF9PdXRsaW5lX0dldF9DQm94KCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94ICAgICAqYWNib3ggKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfT3V0bGluZV9HZXRfQ0JveCggRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0JCb3ggICAgICphY2JveCApCiAgIHsKICAgICBGVF9Qb3MgIHhNaW4sIHlNaW4sIHhNYXgsIHlNYXg7CiAKQEAgLTQxNSw5ICs0MjAsMTAgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b3V0bG4uaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIEZUX091dGxpbmUqICBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHlPZmZzZXQgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHhPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeU9mZnNldCApCiAgIHsKICAgICBGVF9VU2hvcnQgICBuOwogICAgIEZUX1ZlY3RvciogIHZlYyA9IG91dGxpbmUtPnBvaW50czsKQEAgLTQzNCw3ICs0NDAsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdXRsbi5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVF9PdXRsaW5lX1JldmVyc2UoIEZUX091dGxpbmUqICBvdXRsaW5lICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX091dGxpbmVfUmV2ZXJzZSggRlRfT3V0bGluZSogIG91dGxpbmUgKQogICB7CiAgICAgRlRfVVNob3J0ICBuOwogICAgIEZUX0ludCAgICAgZmlyc3QsIGxhc3Q7CkBAIC00ODksOSArNDk2LDEwIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9PdXRsaW5lX1JlbmRlciggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgICAgICAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1Jhc3Rlcl9QYXJhbXMqICBwYXJhbXMgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX091dGxpbmVfUmVuZGVyKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICAgICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgRlRfUmFzdGVyX1BhcmFtcyogIHBhcmFtcyApCiAgIHsKICAgICBGVF9FcnJvciAgICAgZXJyb3I7CiAgICAgRlRfQm9vbCAgICAgIHVwZGF0ZSA9IDA7CkBAIC01MzksOSArNTQ3LDEwIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9PdXRsaW5lX0dldF9CaXRtYXAoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCAgICphYml0bWFwICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX0dldF9CaXRtYXAoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCAgICphYml0bWFwICkKICAgewogICAgIEZUX1Jhc3Rlcl9QYXJhbXMgIHBhcmFtczsKIApAQCAtNTYzLDggKzU3Miw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oIEZUX1ZlY3RvciogIHZlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBtYXRyaXggKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfVmVjdG9yX1RyYW5zZm9ybSggRlRfVmVjdG9yKiAgdmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBtYXRyaXggKQogICB7CiAgICAgRlRfUG9zIHh6LCB5ejsKIApAQCAtNTg1LDggKzU5NSw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG91dGxuLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX091dGxpbmVfVHJhbnNmb3JtKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWF0cml4KiAgIG1hdHJpeCApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICAgbWF0cml4ICkKICAgewogICAgIEZUX1ZlY3RvciogIHZlYyA9IG91dGxpbmUtPnBvaW50czsKICAgICBGVF9WZWN0b3IqICBsaW1pdCA9IHZlYyArIG91dGxpbmUtPm5fcG9pbnRzOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRzdHJlYW0uYyBiL3NyYy9iYXNlL2Z0c3RyZWFtLmMKaW5kZXggMWFkYTY4Yy4uOWJlZTNjOCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRzdHJlYW0uYworKysgYi9zcmMvYmFzZS9mdHN0cmVhbS5jCkBAIC0zMSwxMCArMzEsMTEgQEAKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9zdHJlYW0KIAogCi0gIEZUX0JBU0VfREVGKCB2b2lkICkgIEZUX05ld19NZW1vcnlfU3RyZWFtKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0gKQorICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX05ld19NZW1vcnlfU3RyZWFtKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0gKQogICB7CiAgICAgc3RyZWFtLT5tZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CiAgICAgc3RyZWFtLT5iYXNlICAgPSBiYXNlOwpAQCAtNDYsOCArNDcsOSBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKSAgRlRfU2Vla19TdHJlYW0oIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgcG9zICkKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2Vla19TdHJlYW0oIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBwb3MgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yOwogCkBAIC04NCwzMSArODYsMzUgQEAKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkgIEZUX1NraXBfU3RyZWFtKCBGVF9TdHJlYW0gIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIGRpc3RhbmNlICkKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2tpcF9TdHJlYW0oIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICBkaXN0YW5jZSApCiAgIHsKICAgICByZXR1cm4gRlRfU2Vla19TdHJlYW0oIHN0cmVhbSwgKEZUX1VMb25nKSggc3RyZWFtLT5wb3MgKyBkaXN0YW5jZSApICk7CiAgIH0KIAogCi0gIEZUX0JBU0VfREVGKCBGVF9Mb25nICkgIEZUX1N0cmVhbV9Qb3MoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKQorICBGVF9TdHJlYW1fUG9zKCBGVF9TdHJlYW0gIHN0cmVhbSApCiAgIHsKICAgICByZXR1cm4gc3RyZWFtLT5wb3M7CiAgIH0KIAogCi0gIEZUX0JBU0VfREVGKCBGVF9FcnJvciApICBGVF9SZWFkX1N0cmVhbSggRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX1JlYWRfU3RyZWFtKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApCiAgIHsKICAgICByZXR1cm4gRlRfUmVhZF9TdHJlYW1fQXQoIHN0cmVhbSwgc3RyZWFtLT5wb3MsIGJ1ZmZlciwgY291bnQgKTsKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkgIEZUX1JlYWRfU3RyZWFtX0F0KCBGVF9TdHJlYW0gIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGNvdW50ICkKKyAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUmVhZF9TdHJlYW1fQXQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBwb3MsCisgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOwogICAgIEZUX1VMb25nICByZWFkX2J5dGVzOwpAQCAtMTQ5LDkgKzE1NSwxMCBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKSAgRlRfRXh0cmFjdF9GcmFtZSggRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBwYnl0ZXMgKQorICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9FeHRyYWN0X0ZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBwYnl0ZXMgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yOwogCkBAIC0xNzAsOCArMTc3LDkgQEAKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIHZvaWQgKSAgRlRfUmVsZWFzZV9GcmFtZSggRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcGJ5dGVzICkKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9SZWxlYXNlX0ZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICBwYnl0ZXMgKQogICB7CiAgICAgaWYgKCBzdHJlYW0tPnJlYWQgKQogICAgIHsKQEAgLTE4NCw4ICsxOTIsOSBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKSAgRlRfQWNjZXNzX0ZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIEZUX0FjY2Vzc19GcmFtZSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjb3VudCApCiAgIHsKICAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgRlRfVUxvbmcgIHJlYWRfYnl0ZXM7CkBAIC0yNDQsNyArMjUzLDggQEAKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIHZvaWQgKSAgRlRfRm9yZ2V0X0ZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIEZUX0JBU0VfREVGKCB2b2lkICkKKyAgRlRfRm9yZ2V0X0ZyYW1lKCBGVF9TdHJlYW0gIHN0cmVhbSApCiAgIHsKICAgICAvKiBJTVBPUlRBTlQ6IFRoZSBhc3NlcnRpb24gc3RyZWFtLT5jdXJzb3IgIT0gMCB3YXMgcmVtb3ZlZCwgZ2l2ZW4gICAgKi8KICAgICAvKiAgICAgICAgICAgIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWNjZXNzIGEgZnJhbWUgb2YgbGVuZ3RoIDAgaW4gICAgKi8KQEAgLTI2OSw3ICsyNzksOCBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfQ2hhciApICBGVF9HZXRfQ2hhciggRlRfU3RyZWFtICBzdHJlYW0gKQorICBGVF9CQVNFX0RFRiggRlRfQ2hhciApCisgIEZUX0dldF9DaGFyKCBGVF9TdHJlYW0gIHN0cmVhbSApCiAgIHsKICAgICBGVF9DaGFyICByZXN1bHQ7CiAKQEAgLTI4NCw3ICsyOTUsOCBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfU2hvcnQgKSAgRlRfR2V0X1Nob3J0KCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIEZUX0JBU0VfREVGKCBGVF9TaG9ydCApCisgIEZUX0dldF9TaG9ydCggRlRfU3RyZWFtICBzdHJlYW0gKQogICB7CiAgICAgRlRfQnl0ZSogIHA7CiAgICAgRlRfU2hvcnQgIHJlc3VsdDsKQEAgLTMwMiw3ICszMTQsOCBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfU2hvcnQgKSAgRlRfR2V0X1Nob3J0TEUoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgRlRfQkFTRV9ERUYoIEZUX1Nob3J0ICkKKyAgRlRfR2V0X1Nob3J0TEUoIEZUX1N0cmVhbSAgc3RyZWFtICkKICAgewogICAgIEZUX0J5dGUqICBwOwogICAgIEZUX1Nob3J0ICByZXN1bHQ7CkBAIC0zMjAsNyArMzMzLDggQEAKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKSAgRlRfR2V0X09mZnNldCggRlRfU3RyZWFtICBzdHJlYW0gKQorICBGVF9CQVNFX0RFRiggRlRfTG9uZyApCisgIEZUX0dldF9PZmZzZXQoIEZUX1N0cmVhbSAgc3RyZWFtICkKICAgewogICAgIEZUX0J5dGUqICBwOwogICAgIEZUX0xvbmcgICByZXN1bHQ7CkBAIC0zMzcsNyArMzUxLDggQEAKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKSAgRlRfR2V0X0xvbmcoIEZUX1N0cmVhbSAgc3RyZWFtICkKKyAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKQorICBGVF9HZXRfTG9uZyggRlRfU3RyZWFtICBzdHJlYW0gKQogICB7CiAgICAgRlRfQnl0ZSogIHA7CiAgICAgRlRfTG9uZyAgIHJlc3VsdDsKQEAgLTM1NCw3ICszNjksOCBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfTG9uZyApICBGVF9HZXRfTG9uZ0xFKCBGVF9TdHJlYW0gIHN0cmVhbSApCisgIEZUX0JBU0VfREVGKCBGVF9Mb25nICkKKyAgRlRfR2V0X0xvbmdMRSggRlRfU3RyZWFtICBzdHJlYW0gKQogICB7CiAgICAgRlRfQnl0ZSogIHA7CiAgICAgRlRfTG9uZyAgIHJlc3VsdDsKQEAgLTM3MSw4ICszODcsOSBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfQ2hhciApICBGVF9SZWFkX0NoYXIoIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQorICBGVF9CQVNFX0RFRiggRlRfQ2hhciApCisgIEZUX1JlYWRfQ2hhciggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCiAgIHsKICAgICBGVF9CeXRlICByZXN1bHQgPSAwOwogCkBAIC00MDcsOCArNDI0LDkgQEAKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIEZUX1Nob3J0ICkgIEZUX1JlYWRfU2hvcnQoIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCisgIEZUX0JBU0VfREVGKCBGVF9TaG9ydCApCisgIEZUX1JlYWRfU2hvcnQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKICAgewogICAgIEZUX0J5dGUgICByZWFkc1syXTsKICAgICBGVF9CeXRlKiAgcCA9IDA7CkBAIC00NTMsOCArNDcxLDkgQEAKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIEZUX1Nob3J0ICkgIEZUX1JlYWRfU2hvcnRMRSggRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQorICBGVF9CQVNFX0RFRiggRlRfU2hvcnQgKQorICBGVF9SZWFkX1Nob3J0TEUoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQogICB7CiAgICAgRlRfQnl0ZSAgIHJlYWRzWzJdOwogICAgIEZUX0J5dGUqICBwID0gMDsKQEAgLTQ5OSw4ICs1MTgsOSBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfTG9uZyApICBGVF9SZWFkX09mZnNldCggRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKKyAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKQorICBGVF9SZWFkX09mZnNldCggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKICAgewogICAgIEZUX0J5dGUgICByZWFkc1szXTsKICAgICBGVF9CeXRlKiAgcCA9IDA7CkBAIC01NDUsOCArNTY1LDkgQEAKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKSAgRlRfUmVhZF9Mb25nKCBGVF9TdHJlYW0gIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKKyAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKQorICBGVF9SZWFkX0xvbmcoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQogICB7CiAgICAgRlRfQnl0ZSAgIHJlYWRzWzRdOwogICAgIEZUX0J5dGUqICBwID0gMDsKQEAgLTU5MSw4ICs2MTIsOSBAQAogICB9CiAKIAotICBGVF9CQVNFX0RFRiggRlRfTG9uZyApICBGVF9SZWFkX0xvbmdMRSggRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKKyAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKQorICBGVF9SZWFkX0xvbmdMRSggRlRfU3RyZWFtICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKICAgewogICAgIEZUX0J5dGUgICByZWFkc1s0XTsKICAgICBGVF9CeXRlKiAgcCA9IDA7CkBAIC02MzcsOSArNjU5LDEwIEBACiAgIH0KIAogCi0gIEZUX0JBU0VfREVGKCBGVF9FcnJvciApICBGVF9SZWFkX0ZpZWxkcyggRlRfU3RyZWFtICAgICAgICAgICAgICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfRnJhbWVfRmllbGQqICBmaWVsZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgKQorICBGVF9CQVNFX0RFRiggRlRfRXJyb3IgKQorICBGVF9SZWFkX0ZpZWxkcyggRlRfU3RyZWFtICAgICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICBjb25zdCBGVF9GcmFtZV9GaWVsZCogIGZpZWxkcywKKyAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgc3RydWN0dXJlICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvcjsKICAgICBGVF9Cb29sICAgZnJhbWVfYWNjZXNzZWQgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRzeW50aC5jIGIvc3JjL2Jhc2UvZnRzeW50aC5jCmluZGV4IDYwNGUxYmYuLmI5M2M5NjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3ludGguYworKysgYi9zcmMvYmFzZS9mdHN5bnRoLmMKQEAgLTMzLDkgKzMzLDEwIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9PdXRsaW5lX09ibGlxdWUoIEZUX0dseXBoU2xvdCAgb3JpZ2luYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICAgYWR2YW5jZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfT3V0bGluZV9PYmxpcXVlKCBGVF9HbHlwaFNsb3QgIG9yaWdpbmFsLAorICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgIGFkdmFuY2UgKQogICB7CiAgICAgRlRfTWF0cml4ICB0cmFuc2Zvcm07CiAKQEAgLTc1LDggKzc2LDggQEAKIAogI2luY2x1ZGUgPGZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oPgogCi0gIHN0YXRpYwotICBGVF9Qb3MgIGZ0X25vcm0oIEZUX1ZlY3RvciogIHZlYyApCisgIHN0YXRpYyBGVF9Qb3MKKyAgZnRfbm9ybSggRlRfVmVjdG9yKiAgdmVjICkKICAgewogICAgIEZUX0ludDY0ICB0MSwgdDI7CiAKQEAgLTkwLDggKzkxLDggQEAKIAogI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9PTERfQ0FMQ1MgKi8KIAotICBzdGF0aWMKLSAgRlRfUG9zICBmdF9ub3JtKCBGVF9WZWN0b3IqICB2ZWMgKQorICBzdGF0aWMgRlRfUG9zCisgIGZ0X25vcm0oIEZUX1ZlY3RvciogIHZlYyApCiAgIHsKICAgICBGVF9GMjZEb3Q2ICB1LCB2LCBkOwogICAgIEZUX0ludCAgICAgIHNoaWZ0OwpAQCAtMTYzLDkgKzE2NCw5IEBACiAjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9PTERfQ0FMQ1MgKi8KIAogCi0gIHN0YXRpYwotICBpbnQgIGZ0X3Rlc3RfZXh0cmVtYSggRlRfT3V0bGluZSogIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgbiApCisgIHN0YXRpYyBpbnQKKyAgZnRfdGVzdF9leHRyZW1hKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgbiApCiAgIHsKICAgICBGVF9WZWN0b3IgICpwcmV2LCAqY3VyLCAqbmV4dDsKICAgICBGVF9Qb3MgICAgICBwcm9kdWN0OwpAQCAtMjE3LDggKzIxOCw4IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIgMSBvciAtMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYwotICBpbnQgIGZ0X2dldF9vcmllbnRhdGlvbiggRlRfT3V0bGluZSogIG91dGxpbmUgKQorICBzdGF0aWMgaW50CisgIGZ0X2dldF9vcmllbnRhdGlvbiggRlRfT3V0bGluZSogIG91dGxpbmUgKQogICB7CiAgICAgRlRfQkJveCAgYm94OwogICAgIEZUX0JCb3ggIGluZGljZXM7CkBAIC0yOTEsOSArMjkyLDEwIEBACiAgIH0KIAogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX091dGxpbmVfRW1ib2xkZW4oIEZUX0dseXBoU2xvdCBvcmlnaW5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICBhZHZhbmNlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9PdXRsaW5lX0VtYm9sZGVuKCBGVF9HbHlwaFNsb3Qgb3JpZ2luYWwsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgYWR2YW5jZSApCiAgIHsKICAgICBGVF9WZWN0b3IgICB1LCB2OwogICAgIEZUX1ZlY3RvciogIHBvaW50czsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3lzdGVtLmMgYi9zcmMvYmFzZS9mdHN5c3RlbS5jCmluZGV4IDMwOWVjNTcuLjRkYjcyMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3lzdGVtLmMKKysrIGIvc3JjL2Jhc2UvZnRzeXN0ZW0uYwpAQCAtNjgsNyArNjgsNyBAQAogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVGhlIGFkZHJlc3Mgb2YgbmV3bHkgYWxsb2NhdGVkIGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9DQUxMQkFDS19ERUYodm9pZCopCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCogKQogICBmdF9hbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgICBsb25nICAgICAgIHNpemUgKQogICB7CkBAIC05OCw3ICs5OCw3IEBACiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUaGUgYWRkcmVzcyBvZiB0aGUgcmVhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKikKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkKiApCiAgIGZ0X3JlYWxsb2MoIEZUX01lbW9yeSAgbWVtb3J5LAogICAgICAgICAgICAgICBsb25nICAgICAgIGN1cl9zaXplLAogICAgICAgICAgICAgICBsb25nICAgICAgIG5ld19zaXplLApAQCAtMTI0LDcgKzEyNCw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBibG9jayAgIDo6IFRoZSBhZGRyZXNzIG9mIGJsb2NrIGluIG1lbW9yeSB0byBiZSBmcmVlZC4gICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKQorICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQogICBmdF9mcmVlKCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgdm9pZCogICAgICBibG9jayApCiAgIHsKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgc3RyZWFtIDo6IEEgcG9pbnRlciB0byB0aGUgc3RyZWFtIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9DQUxMQkFDS19ERUYodm9pZCkKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKICAgZnRfY2xvc2Vfc3RyZWFtKCBGVF9TdHJlYW0gIHN0cmVhbSApCiAgIHsKICAgICBmY2xvc2UoIFNUUkVBTV9GSUxFKCBzdHJlYW0gKSApOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0NBTExCQUNLX0RFRih1bnNpZ25lZCBsb25nKQorICBGVF9DQUxMQkFDS19ERUYoIHVuc2lnbmVkIGxvbmcgKQogICBmdF9pb19zdHJlYW0oIEZUX1N0cmVhbSAgICAgICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgIG9mZnNldCwKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiAgYnVmZmVyLApAQCAtMjE2LDggKzIxNiw5IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG9ianMuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUX05ld19TdHJlYW0oIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICBhc3RyZWFtICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9OZXdfU3RyZWFtKCBjb25zdCBjaGFyKiAgZmlsZXBhdGhuYW1lLAorICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgYXN0cmVhbSApCiAgIHsKICAgICBGSUxFKiAgZmlsZTsKIApAQCAtMjU1LDcgKzI1Niw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG9ianMuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX01lbW9yeSApICBGVF9OZXdfTWVtb3J5KCB2b2lkICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfTWVtb3J5ICkKKyAgRlRfTmV3X01lbW9yeSggdm9pZCApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeTsKIApAQCAtMjc1LDcgKzI3Nyw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG9ianMuaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfRG9uZV9NZW1vcnkoIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX0RvbmVfTWVtb3J5KCBGVF9NZW1vcnkgIG1lbW9yeSApCiAgIHsKICAgICBtZW1vcnktPmZyZWUoIG1lbW9yeSwgbWVtb3J5ICk7CiAgIH0KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dHJpZ29uLmMgYi9zcmMvYmFzZS9mdHRyaWdvbi5jCmluZGV4IGNjYTM0Y2YuLjU2ODJlOGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0dHJpZ29uLmMKKysrIGIvc3JjL2Jhc2UvZnR0cmlnb24uYwpAQCAtNDEsNyArNDEsOCBAQAogI2lmZGVmIEZUX0NPTkZJR19IQVNfSU5UNjQKIAogICAvKiBtdWx0aXBseSBhIGdpdmVuIHZhbHVlIGJ5IHRoZSBDT1JESUMgc2hyaW5rIGZhY3RvciAqLwotICBzdGF0aWMgRlRfRml4ZWQgIGZ0X3RyaWdfZG93bnNjYWxlKCBGVF9GaXhlZCAgdmFsICkKKyAgc3RhdGljIEZUX0ZpeGVkCisgIGZ0X3RyaWdfZG93bnNjYWxlKCBGVF9GaXhlZCAgdmFsICkKICAgewogICAgIEZUX0ZpeGVkICBzOwogICAgIEZUX0ludDY0ICB2OwpAQCAtNTksNyArNjAsOCBAQAogI2Vsc2UgLyogIUZUX0NPTkZJR19IQVNfSU5UNjQgKi8KIAogICAvKiBtdWx0aXBseSBhIGdpdmVuIHZhbHVlIGJ5IHRoZSBDT1JESUMgc2hyaW5rIGZhY3RvciAqLwotICBzdGF0aWMgRlRfRml4ZWQgIGZ0X3RyaWdfZG93bnNjYWxlKCBGVF9GaXhlZCAgdmFsICkKKyAgc3RhdGljIEZUX0ZpeGVkCisgIGZ0X3RyaWdfZG93bnNjYWxlKCBGVF9GaXhlZCAgdmFsICkKICAgewogICAgIEZUX0ZpeGVkICAgczsKICAgICBGVF9VSW50MzIgIHYxLCB2MiwgazEsIGsyLCBoaSwgbG8xLCBsbzIsIGxvMzsKQEAgLTkzLDcgKzk1LDggQEAKICNlbmRpZiAvKiAhRlRfQ09ORklHX0hBU19JTlQ2NCAqLwogCiAKLSAgc3RhdGljIEZUX0ludCAgZnRfdHJpZ19wcmVub3JtKCBGVF9WZWN0b3IqICB2ZWMgKQorICBzdGF0aWMgRlRfSW50CisgIGZ0X3RyaWdfcHJlbm9ybSggRlRfVmVjdG9yKiAgdmVjICkKICAgewogICAgIEZUX0ZpeGVkICB4LCB5LCB6OwogICAgIEZUX0ludCAgICBzaGlmdDsKQEAgLTEzMiw4ICsxMzUsOSBAQAogICB9CiAgICAgCiAKLSAgc3RhdGljIHZvaWQgIGZ0X3RyaWdfcHNldWRvX3JvdGF0ZSggRlRfVmVjdG9yKiAgdmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICB0aGV0YSApCisgIHN0YXRpYyB2b2lkCisgIGZ0X3RyaWdfcHNldWRvX3JvdGF0ZSggRlRfVmVjdG9yKiAgdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0FuZ2xlICAgIHRoZXRhICkKICAgewogICAgIEZUX0ludCAgICAgICAgICAgaTsKICAgICBGVF9GaXhlZCAgICAgICAgIHgsIHksIHh0ZW1wOwpAQCAtMjAxLDcgKzIwNSw4IEBACiAgIH0KIAogCi0gIHN0YXRpYyB2b2lkICBmdF90cmlnX3BzZXVkb19wb2xhcml6ZSggRlRfVmVjdG9yKiAgdmVjICkKKyAgc3RhdGljIHZvaWQKKyAgZnRfdHJpZ19wc2V1ZG9fcG9sYXJpemUoIEZUX1ZlY3RvciogIHZlYyApCiAgIHsKICAgICBGVF9GaXhlZCAgICAgICAgIHRoZXRhOwogICAgIEZUX0ZpeGVkICAgICAgICAgeWksIGk7CkBAIC0yNzcsNyArMjgyLDggQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0dHJpZ29uLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9GaXhlZCApICBGVF9Db3MoIEZUX0FuZ2xlICBhbmdsZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKKyAgRlRfQ29zKCBGVF9BbmdsZSAgYW5nbGUgKQogICB7CiAgICAgRlRfVmVjdG9yICB2OwogICAgIApAQCAtMjkyLDcgKzI5OCw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHRyaWdvbi5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKSAgRlRfU2luKCBGVF9BbmdsZSAgYW5nbGUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9GaXhlZCApCisgIEZUX1NpbiggRlRfQW5nbGUgIGFuZ2xlICkKICAgewogICAgIHJldHVybiBGVF9Db3MoIEZUX0FOR0xFX1BJMiAtIGFuZ2xlICk7CiAgIH0KQEAgLTMwMCw3ICszMDcsOCBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnR0cmlnb24uaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkgIEZUX1RhbiggRlRfQW5nbGUgIGFuZ2xlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQorICBGVF9UYW4oIEZUX0FuZ2xlICBhbmdsZSApCiAgIHsKICAgICBGVF9WZWN0b3IgIHY7CiAgICAgCkBAIC0zMTUsOCArMzIzLDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0dHJpZ29uLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9BbmdsZSApICBGVF9BdGFuMiggRlRfRml4ZWQgIGR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgIGR5ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfQW5nbGUgKQorICBGVF9BdGFuMiggRlRfRml4ZWQgIGR4LAorICAgICAgICAgICAgRlRfRml4ZWQgIGR5ICkKICAgewogICAgIEZUX1ZlY3RvciAgdjsKICAgICAKQEAgLTMzNSw4ICszNDQsOSBAQAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnR0cmlnb24uaCAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfVmVjdG9yX1VuaXQoIEZUX1ZlY3RvciogIHZlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQW5nbGUgICAgYW5nbGUgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfVmVjdG9yX1VuaXQoIEZUX1ZlY3RvciogIHZlYywKKyAgICAgICAgICAgICAgICAgIEZUX0FuZ2xlICAgIGFuZ2xlICkKICAgewogICAgIHZlYy0+eCA9IEZUX1RSSUdfQ09TQ0FMRSA+PiAyOwogICAgIHZlYy0+eSA9IDA7CkBAIC0zNDgsOCArMzU4LDkgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0dHJpZ29uLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX1ZlY3Rvcl9Sb3RhdGUoIEZUX1ZlY3RvciogIHZlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICBhbmdsZSApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9WZWN0b3JfUm90YXRlKCBGVF9WZWN0b3IqICB2ZWMsCisgICAgICAgICAgICAgICAgICAgIEZUX0FuZ2xlICAgIGFuZ2xlICkKICAgewogICAgIEZUX0ludCAgICAgc2hpZnQ7CiAgICAgRlRfVmVjdG9yICB2OwpAQCAtMzgyLDcgKzM5Myw4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHRyaWdvbi5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKSAgRlRfVmVjdG9yX0xlbmd0aCggRlRfVmVjdG9yKiAgdmVjICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQorICBGVF9WZWN0b3JfTGVuZ3RoKCBGVF9WZWN0b3IqICB2ZWMgKQogICB7CiAgICAgRlRfSW50ICAgICBzaGlmdDsKICAgICBGVF9WZWN0b3IgIHY7CkBAIC00MTEsOSArNDIzLDEwIEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHRyaWdvbi5oICovCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVF9WZWN0b3JfUG9sYXJpemUoIEZUX1ZlY3RvciogIHZlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgKmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0FuZ2xlICAgKmFuZ2xlICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX1ZlY3Rvcl9Qb2xhcml6ZSggRlRfVmVjdG9yKiAgdmVjLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9BbmdsZSAgICphbmdsZSApCiAgIHsKICAgICBGVF9JbnQgICAgIHNoaWZ0OwogICAgIEZUX1ZlY3RvciAgdjsKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjaHVuay5jIGIvc3JjL2NhY2hlL2Z0Y2NodW5rLmMKaW5kZXggYjYyMzY0My4uOTI5ZDRlYSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NodW5rLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2NodW5rLmMKQEAgLTM2LDEwICszNiwxMSBAQAogCiAKICAgLyogY3JlYXRlIGEgbmV3IGNodW5rIG5vZGUsIHNldHRpbmcgaXRzIGNhY2hlIGluZGV4IGFuZCByZWYgY291bnQgKi8KLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRDX0NodW5rTm9kZV9Jbml0KCBGVENfQ2h1bmtOb2RlICBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DaHVua1NldCAgIGNzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgYWxsb2MgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUQ19DaHVua05vZGVfSW5pdCggRlRDX0NodW5rTm9kZSAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVENfQ2h1bmtTZXQgICBjc2V0LAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgIGFsbG9jICkKICAgewogICAgIEZUQ19DaHVua19DYWNoZSAgICAgIGNhY2hlID0gY3NldC0+Y2FjaGU7CiAgICAgRlRDX0NhY2hlTm9kZV9EYXRhKiAgZGF0YSAgPSBGVENfQ0FDSEVOT0RFX1RPX0RBVEFfUCggJm5vZGUtPnJvb3QgKTsKQEAgLTY5LDcgKzcwLDggQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVENfQ2h1bmtOb2RlX0Rlc3Ryb3koIEZUQ19DaHVua05vZGUgIG5vZGUgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRDX0NodW5rTm9kZV9EZXN0cm95KCBGVENfQ2h1bmtOb2RlICBub2RlICkKICAgewogICAgIEZUQ19DaHVua1NldCAgY3NldCA9IG5vZGUtPmNzZXQ7CiAKQEAgLTgyLDcgKzg0LDggQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfVUxvbmcgKSAgRlRDX0NodW5rTm9kZV9TaXplKCBGVENfQ2h1bmtOb2RlICBub2RlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfVUxvbmcgKQorICBGVENfQ2h1bmtOb2RlX1NpemUoIEZUQ19DaHVua05vZGUgIG5vZGUgKQogICB7CiAgICAgRlRDX0NodW5rU2V0ICBjc2V0ID0gbm9kZS0+Y3NldDsKIApAQCAtMTA4LDkgKzExMSwxMCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUQ19DaHVua1NldF9OZXcoIEZUQ19DaHVua19DYWNoZSAgY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgICAgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NodW5rU2V0ICAgICphc2V0ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfQ2h1bmtTZXRfTmV3KCBGVENfQ2h1bmtfQ2FjaGUgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgIEZUQ19DaHVua1NldCAgICAqYXNldCApCiAgIHsKICAgICBGVF9FcnJvciAgICAgIGVycm9yOwogICAgIEZUX01lbW9yeSAgICAgbWVtb3J5ICA9IGNhY2hlLT5yb290Lm1lbW9yeTsKQEAgLTE2OCw3ICsxNzIsOCBAQAogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUQ19DaHVua1NldF9EZXN0cm95KCBGVENfQ2h1bmtTZXQgIGNzZXQgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRDX0NodW5rU2V0X0Rlc3Ryb3koIEZUQ19DaHVua1NldCAgY3NldCApCiAgIHsKICAgICBGVENfQ2h1bmtfQ2FjaGUgICAgICBjYWNoZSAgICAgICAgPSBjc2V0LT5jYWNoZTsKICAgICBGVENfTWFuYWdlciAgICAgICAgICBtYW5hZ2VyICAgICAgPSBjYWNoZS0+cm9vdC5tYW5hZ2VyOwpAQCAtMjEwLDExICsyMTUsMTEgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRDX0NodW5rU2V0X0xvb2t1cF9Ob2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DaHVua1NldCAgICBjc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBnbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfQ2h1bmtOb2RlICAqYW5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgKmFuaW5kZXggKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUQ19DaHVua1NldF9Mb29rdXBfTm9kZSggRlRDX0NodW5rU2V0ICAgIGNzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DaHVua05vZGUgICphbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAqYW5pbmRleCApCiAgIHsKICAgICBGVENfQ2h1bmtfQ2FjaGUgICAgICBjYWNoZSAgID0gY3NldC0+Y2FjaGU7CiAgICAgRlRDX01hbmFnZXIgICAgICAgICAgbWFuYWdlciA9IGNhY2hlLT5yb290Lm1hbmFnZXI7CkBAIC0yODgsNyArMjkzLDcgQEAKICAgICAgICAgICAoIChGVENfQ2h1bmtTZXQpKG5vZGUpLT5yb290LmRhdGEgKQogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Vycm9yKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgZnRjX2NodW5rX3NldF9scnVfaW5pdCggRlRfTHJ1ICAgICAgbHJ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9McnVOb2RlICBub2RlICkKICAgewpAQCAtMzExLDcgKzMxNiw3IEBACiAgIH0KIAogCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKQorICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQogICBmdGNfY2h1bmtfc2V0X2xydV9kb25lKCBGVF9McnUgICAgICBscnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xydU5vZGUgIG5vZGUgKQogICB7CkBAIC0zMjQsNyArMzI5LDcgQEAKICAgfQogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Jvb2wpCisgIEZUX0NBTExCQUNLX0RFRiggRlRfQm9vbCApCiAgIGZ0Y19jaHVua19zZXRfbHJ1X2NvbXBhcmUoIEZUX0xydU5vZGUgIG5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xydUtleSAgIGtleSApCiAgIHsKQEAgLTM1NSw3ICszNjAsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUQ19DaHVua19DYWNoZV9Jbml0KCBGVENfQ2h1bmtfQ2FjaGUgIGNhY2hlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfQ2h1bmtfQ2FjaGVfSW5pdCggRlRDX0NodW5rX0NhY2hlICBjYWNoZSApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGNhY2hlLT5yb290Lm1lbW9yeTsKICAgICBGVF9FcnJvciAgIGVycm9yOwpAQCAtMzgxLDE4ICszODcsMjAgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVENfQ2h1bmtfQ2FjaGVfRG9uZSggRlRDX0NodW5rX0NhY2hlICBjYWNoZSApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVENfQ2h1bmtfQ2FjaGVfRG9uZSggRlRDX0NodW5rX0NhY2hlICBjYWNoZSApCiAgIHsKICAgICAvKiBkaXNjYXJkIGdseXBoIHNldHMgKi8KICAgICBGVF9McnVfRG9uZSggY2FjaGUtPmNzZXRzX2xydSApOwogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVENfQ2h1bmtfQ2FjaGVfTG9va3VwKCBGVENfQ2h1bmtfQ2FjaGUgIGNhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgZ2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfQ2h1bmtOb2RlICAgKmFub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgKmFpbmRleCApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX0NodW5rX0NhY2hlX0xvb2t1cCggRlRDX0NodW5rX0NhY2hlICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NodW5rTm9kZSAgICphbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICphaW5kZXggKQogICB7CiAgICAgRlRfRXJyb3IgICAgICAgZXJyb3I7CiAgICAgRlRDX0NodW5rU2V0ICAgY3NldDsKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNnbHlwaC5jIGIvc3JjL2NhY2hlL2Z0Y2dseXBoLmMKaW5kZXggYzJhNjNjZi4uNTQwMDJjYSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2dseXBoLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2dseXBoLmMKQEAgLTM3LDkgKzM3LDEwIEBACiAKIAogICAvKiBjcmVhdGUgYSBuZXcgZ2x5cGggbm9kZSwgc2V0dGluZyBpdHMgY2FjaGUgaW5kZXggYW5kIHJlZiBjb3VudCAqLwotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUQ19HbHlwaE5vZGVfSW5pdCggRlRDX0dseXBoTm9kZSAgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19HbHlwaFNldCAgIGdzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBnaW5kZXggKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRDX0dseXBoTm9kZV9Jbml0KCBGVENfR2x5cGhOb2RlICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgIEZUQ19HbHlwaFNldCAgIGdzZXQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgZ2luZGV4ICkKICAgewogICAgIEZUQ19HbHlwaF9DYWNoZSAgICAgIGNhY2hlID0gZ3NldC0+Y2FjaGU7CiAgICAgRlRDX0NhY2hlTm9kZV9EYXRhKiAgZGF0YSAgPSBGVENfQ0FDSEVOT0RFX1RPX0RBVEFfUCggJm5vZGUtPnJvb3QgKTsKQEAgLTU5LDggKzYwLDkgQEAKICAgLyogc2V0IGl0cyBgY2FjaGVfZGF0YScgZmllbGQgY29ycmVjdGx5LCBvdGhlcndpc2UgYmFkIHRoaW5ncyAgICovCiAgIC8qIHdpbGwgaGFwcGVuISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRDX0dseXBoTm9kZV9EZXN0cm95KCBGVENfR2x5cGhOb2RlICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhfQ2FjaGUgIGNhY2hlICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUQ19HbHlwaE5vZGVfRGVzdHJveSggRlRDX0dseXBoTm9kZSAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19HbHlwaF9DYWNoZSAgY2FjaGUgKQogICB7CiAgICAgRlRfTHJ1Tm9kZSAgICBnc2V0X2xydSA9IGNhY2hlLT5nc2V0c19scnUtPm5vZGVzICsgbm9kZS0+Z3NldF9pbmRleDsKICAgICBGVENfR2x5cGhTZXQgIGdzZXQgICAgID0gKEZUQ19HbHlwaFNldClnc2V0X2xydS0+cm9vdC5kYXRhOwpAQCAtMTA1LDggKzEwNyw5IEBACiAgIC8qIHNldCBpdHMgYHVzZXJfZGF0YScgZmllbGQgY29ycmVjdGx5LCBvdGhlcndpc2UgYmFkIHRoaW5ncyAgICAqLwogICAvKiB3aWxsIGhhcHBlbiEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9VTG9uZyApICBGVENfR2x5cGhOb2RlX1NpemUoIEZUQ19HbHlwaE5vZGUgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhfQ2FjaGUgIGNhY2hlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfVUxvbmcgKQorICBGVENfR2x5cGhOb2RlX1NpemUoIEZUQ19HbHlwaE5vZGUgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhfQ2FjaGUgIGNhY2hlICkKICAgewogICAgIEZUX0xydU5vZGUgICAgZ3NldF9scnUgPSBjYWNoZS0+Z3NldHNfbHJ1LT5ub2RlcyArIG5vZGUtPmdzZXRfaW5kZXg7CiAgICAgRlRDX0dseXBoU2V0ICBnc2V0ICAgICA9IChGVENfR2x5cGhTZXQpZ3NldF9scnUtPnJvb3QuZGF0YTsKQEAgLTEzMyw5ICsxMzYsMTAgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVENfR2x5cGhTZXRfTmV3KCBGVENfR2x5cGhfQ2FjaGUgIGNhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19HbHlwaFNldCAgICAqYXNldCApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX0dseXBoU2V0X05ldyggRlRDX0dseXBoX0NhY2hlICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhTZXQgICAgKmFzZXQgKQogICB7CiAgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgZXJyb3I7CiAgICAgRlRfTWVtb3J5ICAgICAgICAgICAgICAgbWVtb3J5ICA9IGNhY2hlLT5yb290Lm1lbW9yeTsKQEAgLTE4NSw3ICsxODksOCBAQAogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUQ19HbHlwaFNldF9EZXN0cm95KCBGVENfR2x5cGhTZXQgIGdzZXQgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRDX0dseXBoU2V0X0Rlc3Ryb3koIEZUQ19HbHlwaFNldCAgZ3NldCApCiAgIHsKICAgICBGVENfR2x5cGhfQ2FjaGUgICAgICBjYWNoZSAgICAgICAgPSBnc2V0LT5jYWNoZTsKICAgICBGVENfTWFuYWdlciAgICAgICAgICBtYW5hZ2VyICAgICAgPSBjYWNoZS0+cm9vdC5tYW5hZ2VyOwpAQCAtMjI5LDEwICsyMzQsMTAgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRDX0dseXBoU2V0X0xvb2t1cF9Ob2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19HbHlwaFNldCAgICBnc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICBnbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhOb2RlICAqYW5vZGUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUQ19HbHlwaFNldF9Mb29rdXBfTm9kZSggRlRDX0dseXBoU2V0ICAgIGdzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19HbHlwaE5vZGUgICphbm9kZSApCiAgIHsKICAgICBGVENfR2x5cGhfQ2FjaGUgICAgICBjYWNoZSAgICAgID0gZ3NldC0+Y2FjaGU7CiAgICAgRlRDX01hbmFnZXIgICAgICAgICAgbWFuYWdlciAgICA9IGNhY2hlLT5yb290Lm1hbmFnZXI7CkBAIC0zMTYsNyArMzIxLDcgQEAKICAgICAgICAgICAoIChGVENfR2x5cGhTZXQpKG5vZGUpLT5yb290LmRhdGEgKQogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Vycm9yKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgZnRjX2dseXBoX3NldF9scnVfaW5pdCggRlRfTHJ1ICAgICAgbHJ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9McnVOb2RlICBub2RlICkKICAgewpAQCAtMzM3LDcgKzM0Miw3IEBACiAgIH0KIAogCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKQorICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQogICBmdGNfZ2x5cGhfc2V0X2xydV9kb25lKCBGVF9McnUgICAgICBscnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xydU5vZGUgIG5vZGUgKQogICB7CkBAIC0zNTAsNyArMzU1LDcgQEAKICAgfQogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Jvb2wpCisgIEZUX0NBTExCQUNLX0RFRiggRlRfQm9vbCApCiAgIGZ0Y19nbHlwaF9zZXRfbHJ1X2NvbXBhcmUoIEZUX0xydU5vZGUgIG5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xydUtleSAgIGtleSApCiAgIHsKQEAgLTM4MSw3ICszODYsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUQ19HbHlwaF9DYWNoZV9Jbml0KCBGVENfR2x5cGhfQ2FjaGUgIGNhY2hlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfR2x5cGhfQ2FjaGVfSW5pdCggRlRDX0dseXBoX0NhY2hlICBjYWNoZSApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGNhY2hlLT5yb290Lm1lbW9yeTsKICAgICBGVF9FcnJvciAgIGVycm9yOwpAQCAtNDE0LDE3ICs0MjAsMTkgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVENfR2x5cGhfQ2FjaGVfRG9uZSggRlRDX0dseXBoX0NhY2hlICBjYWNoZSApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVENfR2x5cGhfQ2FjaGVfRG9uZSggRlRDX0dseXBoX0NhY2hlICBjYWNoZSApCiAgIHsKICAgICAvKiBkaXNjYXJkIGdseXBoIHNldHMgKi8KICAgICBGVF9McnVfRG9uZSggY2FjaGUtPmdzZXRzX2xydSApOwogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVENfR2x5cGhfQ2FjaGVfTG9va3VwKCBGVENfR2x5cGhfQ2FjaGUgIGNhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgZ2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhOb2RlICAgKmFub2RlICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfR2x5cGhfQ2FjaGVfTG9va3VwKCBGVENfR2x5cGhfQ2FjaGUgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgZ2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhOb2RlICAgKmFub2RlICkKICAgewogICAgIEZUX0Vycm9yICAgICAgIGVycm9yOwogICAgIEZUQ19HbHlwaFNldCAgIGdzZXQ7CmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjaW1hZ2UuYyBiL3NyYy9jYWNoZS9mdGNpbWFnZS5jCmluZGV4IDBjYzI1OWIuLmFjYWQwYTAgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNpbWFnZS5jCisrKyBiL3NyYy9jYWNoZS9mdGNpbWFnZS5jCkBAIC02Miw3ICs2Miw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKHZvaWQpCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCiAgIGZ0Y19nbHlwaF9pbWFnZV9ub2RlX2Rlc3Ryb3koIEZUQ19HbHlwaEltYWdlICBub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhTZXQgICAgZ3NldCApCiAgIHsKQEAgLTc0LDcgKzc0LDcgQEAKICAgfQogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Vycm9yKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgZnRjX2dseXBoX2ltYWdlX25vZGVfbmV3KCBGVENfR2x5cGhTZXQgICAgIGdzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBnbHlwaF9pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfR2x5cGhJbWFnZSAgKmFub2RlICkKQEAgLTE2MSw3ICsxNjEsNyBAQAogICAvKiB0aGlzIGZ1bmN0aW9uIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGlzIGJvdGggcGFydCBvZiAqLwogICAvKiBhbiBGVENfR2x5cGhTZXRfQ2xhc3MgYW5kIGFuIEZUQ19DYWNoZU5vZGVfQ2xhc3MgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9DQUxMQkFDS19ERUYoRlRfVUxvbmcpCisgIEZUX0NBTExCQUNLX0RFRiggRlRfVUxvbmcgKQogICBmdGNfZ2x5cGhfaW1hZ2Vfbm9kZV9zaXplKCBGVENfR2x5cGhJbWFnZSAgbm9kZSApCiAgIHsKICAgICBGVF9VTG9uZyAgc2l6ZSAgPSAwOwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Vycm9yKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgZnRjX2ltYWdlX3NldF9pbml0KCBGVENfSW1hZ2VTZXQgICAgIGlzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ltYWdlX0Rlc2MqICB0eXBlICkKICAgewpAQCAtMjIxLDcgKzIyMSw3IEBACiAgIH0KIAogCi0gIEZUX0NBTExCQUNLX0RFRihGVF9Cb29sKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Jvb2wgKQogICBmdGNfaW1hZ2Vfc2V0X2NvbXBhcmUoIEZUQ19JbWFnZVNldCAgICAgaXNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfSW1hZ2VfRGVzYyogIHR5cGUgKQogICB7CkBAIC0yNjUsOCArMjY1LDkgQEAKICAgfTsKIAogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUQ19JbWFnZV9DYWNoZV9OZXcoIEZUQ19NYW5hZ2VyICAgICAgIG1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19JbWFnZV9DYWNoZSAgKmFjYWNoZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX0ltYWdlX0NhY2hlX05ldyggRlRDX01hbmFnZXIgICAgICAgbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ltYWdlX0NhY2hlICAqYWNhY2hlICkKICAgewogICAgIHJldHVybiBGVENfTWFuYWdlcl9SZWdpc3Rlcl9DYWNoZSgKICAgICAgICAgICAgICBtYW5hZ2VyLApAQCAtMjc1LDEwICsyNzYsMTEgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRDX0ltYWdlX0NhY2hlX0xvb2t1cCggRlRDX0ltYWdlX0NhY2hlICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ltYWdlX0Rlc2MqICBkZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgIGdpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGggICAgICAgICphZ2x5cGggKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUQ19JbWFnZV9DYWNoZV9Mb29rdXAoIEZUQ19JbWFnZV9DYWNoZSAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19JbWFnZV9EZXNjKiAgZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBnaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAgICAqYWdseXBoICkKICAgewogICAgIEZUX0Vycm9yICAgICAgIGVycm9yOwogICAgIEZUQ19HbHlwaE5vZGUgIG5vZGU7CmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbWFuYWcuYyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5jCmluZGV4IDY0MTAyYTIuLjkzMzQwMGEgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNtYW5hZy5jCisrKyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5jCkBAIC00MSw3ICs0MSw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Vycm9yKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgZnRjX21hbmFnZXJfaW5pdF9mYWNlKCBGVF9McnUgICAgICBscnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1Tm9kZSAgbm9kZSApCiAgIHsKQEAgLTY3LDcgKzY3LDcgQEAKIAogCiAgIC8qIGhlbHBlciBmdW5jdGlvbiBmb3IgZnRjX21hbmFnZXJfZG9uZV9mYWNlKCkgKi8KLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Jvb2wpCisgIEZUX0NBTExCQUNLX0RFRiggRlRfQm9vbCApCiAgIGZ0Y19tYW5hZ2VyX3NpemVfc2VsZWN0b3IoIEZUX0xydSAgICAgIGxydSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1Tm9kZSAgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgZGF0YSApCkBAIC03OCw3ICs3OCw3IEBACiAgIH0KIAogCi0gIEZUX0NBTExCQUNLX0RFRih2b2lkKQorICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQogICBmdGNfbWFuYWdlcl9kb25lX2ZhY2UoIEZUX0xydSAgICAgIGxydSwKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9McnVOb2RlICBub2RlICkKICAgewpAQCAtMTA3LDcgKzEwNyw3IEBACiAgIH0gRlRDX0ZvbnRSZXF1ZXN0OwogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Vycm9yKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgZnRjX21hbmFnZXJfaW5pdF9zaXplKCBGVF9McnUgICAgICBscnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1Tm9kZSAgbm9kZSApCiAgIHsKQEAgLTEzNiw3ICsxMzYsNyBAQAogICB9CiAKIAotICBGVF9DQUxMQkFDS19ERUYodm9pZCkKKyAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKICAgZnRjX21hbmFnZXJfZG9uZV9zaXplKCBGVF9McnUgICAgICBscnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1Tm9kZSAgbm9kZSApCiAgIHsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICB9CiAKIAotICBGVF9DQUxMQkFDS19ERUYoRlRfRXJyb3IpCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQogICBmdGNfbWFuYWdlcl9mbHVzaF9zaXplKCBGVF9McnUgICAgICBscnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xydU5vZGUgIG5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xydUtleSAgIGtleSApCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgfQogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Jvb2wpCisgIEZUX0NBTExCQUNLX0RFRiggRlRfQm9vbCApCiAgIGZ0Y19tYW5hZ2VyX2NvbXBhcmVfc2l6ZSggRlRfTHJ1Tm9kZSAgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9McnVLZXkgICBrZXkgKQogICB7CkBAIC0yMTIsMTMgKzIxMiwxNCBAQAogICB9OwogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRDX01hbmFnZXJfTmV3KCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICBtYXhfZmFjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgICBtYXhfc2l6ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICAgICBtYXhfYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ZhY2VfUmVxdWVzdGVyICByZXF1ZXN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICAgICAgICByZXFfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfTWFuYWdlciAgICAgICAgKmFtYW5hZ2VyICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfTWFuYWdlcl9OZXcoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgIG1heF9mYWNlcywKKyAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgIG1heF9zaXplcywKKyAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICAgIG1heF9ieXRlcywKKyAgICAgICAgICAgICAgICAgICBGVENfRmFjZV9SZXF1ZXN0ZXIgIHJlcXVlc3RlciwKKyAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgICAgIHJlcV9kYXRhLAorICAgICAgICAgICAgICAgICAgIEZUQ19NYW5hZ2VyICAgICAgICAqYW1hbmFnZXIgKQogICB7CiAgICAgRlRfRXJyb3IgICAgIGVycm9yOwogICAgIEZUX01lbW9yeSAgICBtZW1vcnk7CkBAIC0yNzgsNyArMjc5LDggQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApICBGVENfTWFuYWdlcl9Eb25lKCBGVENfTWFuYWdlciAgbWFuYWdlciApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVENfTWFuYWdlcl9Eb25lKCBGVENfTWFuYWdlciAgbWFuYWdlciApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeTsKICAgICBGVF9VSW50ICAgIGluZGV4OwpAQCAtMzE0LDcgKzMxNiw4IEBACiAgIH0KIAogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRDX01hbmFnZXJfUmVzZXQoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUQ19NYW5hZ2VyX1Jlc2V0KCBGVENfTWFuYWdlciAgbWFuYWdlciApCiAgIHsKICAgICBpZiAobWFuYWdlciApCiAgICAgewpAQCAtMzI1LDkgKzMyOCwxMCBAQAogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVENfTWFuYWdlcl9Mb29rdXBfRmFjZSggRlRDX01hbmFnZXIgIG1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfRmFjZUlEICAgZmFjZV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICphZmFjZSApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX01hbmFnZXJfTG9va3VwX0ZhY2UoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0ZhY2VJRCAgIGZhY2VfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAqYWZhY2UgKQogICB7CiAgICAgaWYgKCAhbWFuYWdlciApCiAgICAgICByZXR1cm4gRlRDX0Vycl9JbnZhbGlkX0NhY2hlX0hhbmRsZTsKQEAgLTMzOCwxMCArMzQyLDExIEBACiAgIH0KIAogCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgIEZUQ19NYW5hZ2VyX0xvb2t1cF9TaXplKCBGVENfTWFuYWdlciAgbWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19Gb250ICAgICBmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgKmFmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgKmFzaXplICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVENfTWFuYWdlcl9Mb29rdXBfU2l6ZSggRlRDX01hbmFnZXIgIG1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfRm9udCAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICphZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICphc2l6ZSApCiAgIHsKICAgICBGVENfRm9udFJlcXVlc3QgIHJlcTsKICAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOwpAQCAtMzg1LDcgKzM5MCw4IEBACiAgIC8qIGBDb21wcmVzcycgdGhlIG1hbmFnZXIncyBkYXRhLCBpLmUuLCBnZXQgcmlkIG9mIG9sZCBjYWNoZSBub2RlcyAqLwogICAvKiB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBhbnltb3JlIGluIG9yZGVyIHRvIGxpbWl0IHRoZSB0b3RhbCAgICAgKi8KICAgLyogbWVtb3J5IHVzZWQgYnkgdGhlIGNhY2hlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRDX01hbmFnZXJfQ29tcHJlc3MoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUQ19NYW5hZ2VyX0NvbXByZXNzKCBGVENfTWFuYWdlciAgbWFuYWdlciApCiAgIHsKICAgICBGVF9MaXN0Tm9kZSAgbm9kZTsKIApAQCAtNDMzLDEwICs0MzksMTAgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRDX01hbmFnZXJfUmVnaXN0ZXJfQ2FjaGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX01hbmFnZXIgICAgICAgbWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfQ2FjaGVfQ2xhc3MqICBjbGF6eiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgICAgICAgICphY2FjaGUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUQ19NYW5hZ2VyX1JlZ2lzdGVyX0NhY2hlKCBGVENfTWFuYWdlciAgICAgICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlX0NsYXNzKiAgY2xhenosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgICAgICAgICphY2FjaGUgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yID0gRlRDX0Vycl9JbnZhbGlkX0FyZ3VtZW50OwogCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjc2JpdHMuYyBiL3NyYy9jYWNoZS9mdGNzYml0cy5jCmluZGV4IGNmMDFiZDAuLjkwNWYyZGEgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNzYml0cy5jCisrKyBiL3NyYy9jYWNoZS9mdGNzYml0cy5jCkBAIC01Niw3ICs1Niw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKHZvaWQpCisgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCiAgIGZ0Y19zYml0X2NodW5rX25vZGVfZGVzdHJveSggRlRDX0NodW5rTm9kZSAgbm9kZSApCiAgIHsKICAgICBGVENfQ2h1bmtTZXQgIGNzZXQgICA9IG5vZGUtPmNzZXQ7CkBAIC03Myw3ICs3Myw3IEBACiAgIH0KIAogCi0gIEZUX0NBTExCQUNLX0RFRihGVF9FcnJvcikKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCiAgIGZ0Y19iaXRtYXBfY29weSggRlRfTWVtb3J5ICAgbWVtb3J5LAogICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCogIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICBGVENfU0JpdCAgICB0YXJnZXQgKQpAQCAtOTUsNyArOTUsNyBAQAogICB9CiAKIAotICBGVF9DQUxMQkFDS19ERUYoRlRfRXJyb3IpCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQogICBmdGNfc2JpdF9jaHVua19ub2RlX25ldyggRlRDX0NodW5rU2V0ICAgIGNzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfQ2h1bmtOb2RlICAqYW5vZGUgKQpAQCAtMjQwLDcgKzI0MCw3IEBACiAgIC8qIHRoaXMgZnVuY3Rpb24gaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgaXMgYm90aCBwYXJ0IG9mICovCiAgIC8qIGFuIEZUQ19DaHVua1NldF9DbGFzcyBhbmQgYW4gRlRDX0NhY2hlTm9kZV9DbGFzcyAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0NBTExCQUNLX0RFRihGVF9VTG9uZykKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9VTG9uZyApCiAgIGZ0Y19zYml0X2NodW5rX25vZGVfc2l6ZSggRlRDX0NodW5rTm9kZSAgbm9kZSApCiAgIHsKICAgICBGVF9VTG9uZyAgICAgIHNpemU7CkBAIC0yODIsNyArMjgyLDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICBGVF9DQUxMQkFDS19ERUYoRlRfRXJyb3IpCisgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQogICBmdGNfc2JpdF9jaHVua19zZXRfc2l6ZXMoIEZUQ19DaHVua1NldCAgICAgY3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfSW1hZ2VfRGVzYyogIGRlc2MgKQogICB7CkBAIC0zMDMsNyArMzAzLDcgQEAKICAgfQogCiAKLSAgRlRfQ0FMTEJBQ0tfREVGKEZUX0Vycm9yKQorICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgZnRjX3NiaXRfY2h1bmtfc2V0X2luaXQoIEZUQ19TQml0U2V0ICAgICAgc3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19JbWFnZV9EZXNjKiAgdHlwZSApCiAgIHsKQEAgLTMxMyw3ICszMTMsNyBAQAogICB9CiAKIAotICBGVF9DQUxMQkFDS19ERUYoRlRfQm9vbCkKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Cb29sICkKICAgZnRjX3NiaXRfY2h1bmtfc2V0X2NvbXBhcmUoIEZUQ19TQml0U2V0ICAgICAgc3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19JbWFnZV9EZXNjKiAgdHlwZSApCiAgIHsKQEAgLTM1OCw4ICszNTgsOSBAQAogICB9OwogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRDX1NCaXRfQ2FjaGVfTmV3KCBGVENfTWFuYWdlciAgICAgIG1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NCaXRfQ2FjaGUgICphY2FjaGUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUQ19TQml0X0NhY2hlX05ldyggRlRDX01hbmFnZXIgICAgICBtYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgIEZUQ19TQml0X0NhY2hlICAqYWNhY2hlICkKICAgewogICAgIHJldHVybiBGVENfTWFuYWdlcl9SZWdpc3Rlcl9DYWNoZSgKICAgICAgICAgICAgICBtYW5hZ2VyLApAQCAtMzY4LDEwICszNjksMTEgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRDX1NCaXRfQ2FjaGVfTG9va3VwKCBGVENfU0JpdF9DYWNoZSAgIGNhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19JbWFnZV9EZXNjKiAgZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgIGdpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfU0JpdCAgICAgICAgKmFuc2JpdCApCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRDX1NCaXRfQ2FjaGVfTG9va3VwKCBGVENfU0JpdF9DYWNoZSAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19JbWFnZV9EZXNjKiAgZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgIGdpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVENfU0JpdCAgICAgICAgKmFuc2JpdCApCiAgIHsKICAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKICAgICBGVENfQ2h1bmtOb2RlICBub2RlOwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0bHJ1LmMgYi9zcmMvY2FjaGUvZnRscnUuYwppbmRleCA1NzU3NWFlLi4zN2M3ZGQ0IDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRscnUuYworKysgYi9zcmMvY2FjaGUvZnRscnUuYwpAQCAtMjUsMTAgKzI1LDEwIEBACiAjaW5jbHVkZSAiZnRjZXJyb3IuaCIKIAogCi0gIHN0YXRpYwotICB2b2lkICBscnVfYnVpbGRfZnJlZV9saXN0KCBGVF9McnVOb2RlICBub2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xpc3QgICAgIGZyZWVfbGlzdCApCisgIHN0YXRpYyB2b2lkCisgIGxydV9idWlsZF9mcmVlX2xpc3QoIEZUX0xydU5vZGUgIG5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfTGlzdCAgICAgZnJlZV9saXN0ICkKICAgewogICAgIEZUX0xydU5vZGUgIG5vZGUgID0gbm9kZXM7CiAgICAgRlRfTHJ1Tm9kZSAgbGltaXQgPSBub2RlICsgY291bnQ7CkBAIC00MCwxMiArNDAsMTMgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfTHJ1X05ldyggY29uc3QgRlRfTHJ1X0NsYXNzKiAgY2xhenosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgIG1heF9lbGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICAgICAgICAgdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgICAgICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICAgICAgIHByZV9hbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1ICAgICAgICAgICAgICAqYW5scnUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0xydV9OZXcoIGNvbnN0IEZUX0xydV9DbGFzcyogIGNsYXp6LAorICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgICBtYXhfZWxlbWVudHMsCisgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgICAgICBwcmVfYWxsb2MsCisgICAgICAgICAgICAgIEZUX0xydSAgICAgICAgICAgICAgKmFubHJ1ICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvcjsKICAgICBGVF9McnUgICAgbHJ1OwpAQCAtODQsNyArODUsOCBAQAogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX0xydV9SZXNldCggRlRfTHJ1ICBscnUgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfTHJ1X1Jlc2V0KCBGVF9McnUgIGxydSApCiAgIHsKICAgICBGVF9MaXN0Tm9kZSAgICBub2RlOwogICAgIEZUX0xydV9DbGFzcyogIGNsYXp6OwpAQCAtMTE5LDcgKzEyMSw4IEBACiAgIH0KIAogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfTHJ1X0RvbmUoIEZUX0xydSAgbHJ1ICkKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCisgIEZUX0xydV9Eb25lKCBGVF9McnUgIGxydSApCiAgIHsKICAgICBGVF9NZW1vcnkgIG1lbW9yeTsKIApAQCAtMTM2LDkgKzEzOSwxMCBAQAogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICBGVF9McnVfTG9va3VwX05vZGUoIEZUX0xydSAgICAgICBscnUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1S2V5ICAgIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9McnVOb2RlICAqYW5vZGUgKQorICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0xydV9Mb29rdXBfTm9kZSggRlRfTHJ1ICAgICAgIGxydSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9McnVLZXkgICAga2V5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xydU5vZGUgICphbm9kZSApCiAgIHsKICAgICBGVF9FcnJvciAgICAgICBlcnJvciA9IDA7CiAgICAgRlRfTGlzdE5vZGUgICAgbm9kZTsKQEAgLTI2Miw5ICsyNjYsMTAgQEAKICAgfQogCiAKLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgRlRfTHJ1X0xvb2t1cCggRlRfTHJ1ICAgICAgIGxydSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1S2V5ICAgIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgKmFub2JqZWN0ICkKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9McnVfTG9va3VwKCBGVF9McnUgICAgICAgbHJ1LAorICAgICAgICAgICAgICAgICBGVF9McnVLZXkgICAga2V5LAorICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAqYW5vYmplY3QgKQogICB7CiAgICAgRlRfRXJyb3IgICAgZXJyb3I7CiAgICAgRlRfTHJ1Tm9kZSAgbm9kZTsKQEAgLTI4NCw4ICsyODksOSBAQAogICB9CiAKIAotICBGVF9FWFBPUlRfREVGKCB2b2lkICkgIEZUX0xydV9SZW1vdmVfTm9kZSggRlRfTHJ1ICAgICAgbHJ1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1Tm9kZSAgbm9kZSApCisgIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQorICBGVF9McnVfUmVtb3ZlX05vZGUoIEZUX0xydSAgICAgIGxydSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9McnVOb2RlICBub2RlICkKICAgewogICAgIGlmICggIWxydSB8fCAhbm9kZSApCiAgICAgICByZXR1cm47CkBAIC0zMTAsOSArMzE2LDEwIEBACiAgIH0KIAogCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKSAgRlRfTHJ1X1JlbW92ZV9TZWxlY3Rpb24oIEZUX0xydSAgICAgICAgICAgbHJ1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9McnVfU2VsZWN0b3IgIHNlbGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgIGRhdGEgKQorICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfTHJ1X1JlbW92ZV9TZWxlY3Rpb24oIEZUX0xydSAgICAgICAgICAgbHJ1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTHJ1X1NlbGVjdG9yICBzZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgICAgZGF0YSApCiAgIHsKICAgICBpZiAoICFscnUgfHwgIXNlbGVjdG9yICkKICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0bG9hZC5jIGIvc3JjL3NmbnQvdHRsb2FkLmMKaW5kZXggZTgxZTQ3NS4uOTQ0OTRlYSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRsb2FkLmMKKysrIGIvc3JjL3NmbnQvdHRsb2FkLmMKQEAgLTE2MTcsMTkgKzE2MTcsMjAgQEAKICAgICAgICAgZmFjZS0+a2Vybl90YWJsZV9pbmRleCA9IG47CiAgICAgICAgIAogICAgICAgICAvKiBlbnN1cmUgdGhhdCB0aGUga2VybmluZyBwYWlyIHRhYmxlIGlzIHNvcnRlZCAoeWVzLCBzb21lICovCi0gICAgICAgIC8qIGZvbnRzIGhhdmUgdW5zb3J0ZWQgdGFibGVzICEhKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogZm9udHMgaGF2ZSB1bnNvcnRlZCB0YWJsZXMhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICB7CiAgICAgICAgICAgRlRfVUludCAgICAgICAgICBpOwotICAgICAgICAgIFRUX0tlcm5fMF9QYWlyKiAgcGFpcjsKKyAgICAgICAgICBUVF9LZXJuXzBfUGFpciogIHBhaXIwOwogICAgICAgICAgIAotICAgICAgICAgIHBhaXIgPSBmYWNlLT5rZXJuX3BhaXJzOwogCi0gICAgICAgICAgZm9yICggaT0xOyBpIDwgbnVtX3BhaXJzOyBpKyssIHBhaXIrKyApCisgICAgICAgICAgcGFpcjAgPSBmYWNlLT5rZXJuX3BhaXJzOworCisgICAgICAgICAgZm9yICggaSA9IDE7IGkgPCBudW1fcGFpcnM7IGkrKywgcGFpcjArKyApCiAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKCB0dF9rZXJuX3BhaXJfY29tcGFyZSggcGFpciwgcGFpcisxICkgIT0gLTEgKQorICAgICAgICAgICAgaWYgKCB0dF9rZXJuX3BhaXJfY29tcGFyZSggcGFpcjAsIHBhaXIwICsgMSApICE9IC0xICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcXNvcnQoICh2b2lkKilmYWNlLT5rZXJuX3BhaXJzLCAoaW50KW51bV9wYWlycywKLSAgICAgICAgICAgICAgICAgICAgIHNpemVvZihUVF9LZXJuXzBfUGFpciksIHR0X2tlcm5fcGFpcl9jb21wYXJlICk7CisgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBUVF9LZXJuXzBfUGFpciApLCB0dF9rZXJuX3BhaXJfY29tcGFyZSApOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CkBAIC0xNjUxLDExICsxNjUyLDEzIEBACiAgICAgcmV0dXJuIGVycm9yOwogICB9CiAKKwogI3VuZGVmICBUVF9LRVJOX0lOREVYCi0jZGVmaW5lIFRUX0tFUk5fSU5ERVgoZzEsZzIpICAgKCgoRlRfVUxvbmcpZzEgPDwgMTYpIHwgZzIpCisjZGVmaW5lIFRUX0tFUk5fSU5ERVgoIGcxLCBnMiApICAoICggKEZUX1VMb25nKWcxIDw8IDE2ICkgfCBnMiApCiAKICAgRlRfQ0FMTEJBQ0tfREVGKGludCkKLSAgdHRfa2Vybl9wYWlyX2NvbXBhcmUoIGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIgKQorICB0dF9rZXJuX3BhaXJfY29tcGFyZSggY29uc3Qgdm9pZCogIGEsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgYiApCiAgIHsKICAgICBUVF9LZXJuXzBfUGFpciogIHBhaXIxID0gKFRUX0tlcm5fMF9QYWlyKilhOwogICAgIFRUX0tlcm5fMF9QYWlyKiAgcGFpcjIgPSAoVFRfS2Vybl8wX1BhaXIqKWI7CkBAIC0xNjYzLDEyICsxNjY2LDE0IEBACiAgICAgRlRfVUxvbmcgIGluZGV4MSA9IFRUX0tFUk5fSU5ERVgoIHBhaXIxLT5sZWZ0LCBwYWlyMS0+cmlnaHQgKTsKICAgICBGVF9VTG9uZyAgaW5kZXgyID0gVFRfS0VSTl9JTkRFWCggcGFpcjItPmxlZnQsIHBhaXIyLT5yaWdodCApOwogCisKICAgICByZXR1cm4gKCBpbmRleDEgPCBpbmRleDIgPyAtMSA6CiAgICAgICAgICAgICggaW5kZXgxID4gaW5kZXgyID8gIDEgOiAwICkpOwogICB9CiAKICN1bmRlZiBUVF9LRVJOX0lOREVYCiAKKwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo=