ZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwppbmRleCBlMmIzZjVkLi5lYTI4NmM1IDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmMKKysrIGIvc3JjL2J1ZmZlci5jCkBAIC0zMTc3LDYgKzMxNzcsMTYgQEAKIHsKICAgICBtY2hfc2V0dGl0bGUobGFzdHRpdGxlLCBsYXN0aWNvbik7CiB9CisKKyMgaWYgZGVmaW5lZChFWElURlJFRSkgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkCitmcmVlX3RpdGxlcygpCit7CisgICAgdmltX2ZyZWUobGFzdHRpdGxlKTsKKyAgICB2aW1fZnJlZShsYXN0aWNvbik7Cit9CisjIGVuZGlmCisKICNlbmRpZiAvKiBGRUFUX1RJVExFICovCiAKICNpZiBkZWZpbmVkKEZFQVRfU1RMX09QVCkgfHwgZGVmaW5lZChQUk9UTykKZGlmZiAtLWdpdCBhL3NyYy9kaWZmLmMgYi9zcmMvZGlmZi5jCmluZGV4IDMwNWU2OGYuLjRhY2JhM2QgMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmLmMKKysrIGIvc3JjL2RpZmYuYwpAQCAtNjksNyArNjksNiBAQAogc3RhdGljIHZvaWQgZGlmZl9yZWRyYXcgX19BUkdTKChpbnQgZG9mb2xkKSk7CiBzdGF0aWMgaW50IGRpZmZfd3JpdGUgX19BUkdTKChidWZfVCAqYnVmLCBjaGFyX3UgKmZuYW1lKSk7CiBzdGF0aWMgdm9pZCBkaWZmX2ZpbGUgX19BUkdTKChjaGFyX3UgKnRtcF9vcmlnLCBjaGFyX3UgKnRtcF9uZXcsIGNoYXJfdSAqdG1wX2RpZmYpKTsKLXN0YXRpYyB2b2lkIGRpZmZfY2xlYXIgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgaW50IGRpZmZfZXF1YWxfZW50cnkgX19BUkdTKChkaWZmX1QgKmRwLCBpbnQgaWR4MSwgaW50IGlkeDIpKTsKIHN0YXRpYyBpbnQgZGlmZl9jbXAgX19BUkdTKChjaGFyX3UgKnMxLCBjaGFyX3UgKnMyKSk7CiAjaWZkZWYgRkVBVF9GT0xESU5HCkBAIC0xMzM2LDcgKzEzMzUsNyBAQAogLyoKICAqIENsZWFyIHRoZSBsaXN0IG9mIGRpZmZibG9ja3MuCiAgKi8KLSAgICBzdGF0aWMgdm9pZAorICAgIHZvaWQKIGRpZmZfY2xlYXIoKQogewogICAgIGRpZmZfVAkqcCwgKm5leHRfcDsKZGlmZiAtLWdpdCBhL3NyYy9leF9kb2NtZC5jIGIvc3JjL2V4X2RvY21kLmMKaW5kZXggYWYzZTdmOS4uNzVkMmM5NCAxMDA2NDQKLS0tIGEvc3JjL2V4X2RvY21kLmMKKysrIGIvc3JjL2V4X2RvY21kLmMKQEAgLTcyMTUsNiArNzIxNSwxNyBAQAogICAgIH0KIH0KIAorc3RhdGljIGNoYXJfdQkqcHJldl9kaXIgPSBOVUxMOworCisjaWYgZGVmaW5lZChFWElURlJFRSkgfHwgZGVmaW5lZChQUk9UTykKKyAgICB2b2lkCitmcmVlX2NkX2RpcigpCit7CisgICAgdmltX2ZyZWUocHJldl9kaXIpOworfQorI2VuZGlmCisKKwogLyoKICAqICI6Y2QiLCAiOmxjZCIsICI6Y2hkaXIiIGFuZCAiOmxjaGRpciIuCiAgKi8KQEAgLTcyMjIsNyArNzIzMyw2IEBACiBleF9jZChlYXApCiAgICAgZXhhcmdfVAkqZWFwOwogewotICAgIHN0YXRpYyBjaGFyX3UJKnByZXZfZGlyID0gTlVMTDsKICAgICBjaGFyX3UJCSpuZXdfZGlyOwogICAgIGNoYXJfdQkJKnRvZnJlZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2dldGNoYXIuYyBiL3NyYy9nZXRjaGFyLmMKaW5kZXggNmQyNmQ2ZC4uNjg2ODYxYSAxMDA2NDQKLS0tIGEvc3JjL2dldGNoYXIuYworKysgYi9zcmMvZ2V0Y2hhci5jCkBAIC0xMzkwLDYgKzEzOTAsMTUgQEAKIAktLWN1cnNjcmlwdDsKIH0KIAorI2lmIGRlZmluZWQoRVhJVEZSRUUpIHx8IGRlZmluZWQoUFJPVE8pCisgICAgdm9pZAorY2xvc2VfYWxsX3NjcmlwdHMoKQoreworICAgIHdoaWxlIChzY3JpcHRpblswXSAhPSBOVUxMKQorCWNsb3Nlc2NyaXB0KCk7Cit9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoRkVBVF9JTlNfRVhQQU5EKSB8fCBkZWZpbmVkKFBST1RPKQogLyoKICAqIFJldHVybiBUUlVFIHdoZW4gcmVhZGluZyBrZXlzIGZyb20gYSBzY3JpcHQgZmlsZS4KZGlmZiAtLWdpdCBhL3NyYy9tYXJrLmMgYi9zcmMvbWFyay5jCmluZGV4IGM4MDRkMWUuLjE2NTVlMDMgMTAwNjQ0Ci0tLSBhL3NyYy9tYXJrLmMKKysrIGIvc3JjL21hcmsuYwpAQCAtMTI4NCw2ICsxMjg0LDE4IEBACiAgICAgd2luLT53X2J1ZmZlci0+Yl9sYXN0X2N1cnNvciA9IHdpbi0+d19jdXJzb3I7CiB9CiAKKyNpZiBkZWZpbmVkKEVYSVRGUkVFKSB8fCBkZWZpbmVkKFBST1RPKQorICAgIHZvaWQKK2ZyZWVfYWxsX21hcmtzKCkKK3sKKyAgICBpbnQJCWk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTk1BUktTICsgRVhUUkFfTUFSS1M7IGkrKykKKwlpZiAobmFtZWRmbVtpXS5mbWFyay5tYXJrLmxudW0gIT0gMCkKKwkgICAgdmltX2ZyZWUobmFtZWRmbVtpXS5mbmFtZSk7Cit9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoRkVBVF9WSU1JTkZPKSB8fCBkZWZpbmVkKFBST1RPKQogICAgIGludAogcmVhZF92aW1pbmZvX2ZpbGVtYXJrKHZpcnAsIGZvcmNlKQpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2J1ZmZlci5wcm8gYi9zcmMvcHJvdG8vYnVmZmVyLnBybwppbmRleCA4MzVkMmNlLi4xMDYxZTM2IDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vYnVmZmVyLnBybworKysgYi9zcmMvcHJvdG8vYnVmZmVyLnBybwpAQCAtMzksNiArMzksNyBAQAogdm9pZCBjb2xfcHJpbnQgX19BUkdTKChjaGFyX3UgKmJ1ZiwgaW50IGNvbCwgaW50IHZjb2wpKTsKIHZvaWQgbWFrZXRpdGxlIF9fQVJHUygodm9pZCkpOwogdm9pZCByZXNldHRpdGxlIF9fQVJHUygodm9pZCkpOwordm9pZCBmcmVlX3RpdGxlcyBfX0FSR1MoKHZvaWQpKTsKIGludCBidWlsZF9zdGxfc3RyX2hsIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKm91dCwgc2l6ZV90IG91dGxlbiwgY2hhcl91ICpmbXQsIGludCBmaWxsY2hhciwgaW50IG1heHdpZHRoLCBzdHJ1Y3Qgc3RsX2hscmVjICpobCkpOwogdm9pZCBnZXRfcmVsX3BvcyBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpzdHIpKTsKIGludCBhcHBlbmRfYXJnX251bWJlciBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpidWYsIGludCBhZGRfZmlsZSwgaW50IG1heGxlbikpOwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL2d1aV9ndGtfeDExLnBybyBiL3NyYy9wcm90by9ndWlfZ3RrX3gxMS5wcm8KaW5kZXggODEzMzAyMi4uYTIyYmFjZiAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL2d1aV9ndGtfeDExLnBybworKysgYi9zcmMvcHJvdG8vZ3VpX2d0a194MTEucHJvCkBAIC0xLDUgKzEsNiBAQAogLyogZ3VpX2d0a194MTEuYyAqLwogdm9pZCBndWlfbWNoX3ByZXBhcmUgX19BUkdTKChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2KSk7Cit2b2lkIGd1aV9tY2hfZnJlZV9hbGwgX19BUkdTKCh2b2lkKSk7CiB2b2lkIGd1aV9tY2hfc2V0X2JsaW5raW5nIF9fQVJHUygobG9uZyB3YWl0dGltZSwgbG9uZyBvbiwgbG9uZyBvZmYpKTsKIHZvaWQgZ3VpX21jaF9zdG9wX2JsaW5rIF9fQVJHUygodm9pZCkpOwogdm9pZCBndWlfbWNoX3N0YXJ0X2JsaW5rIF9fQVJHUygodm9pZCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3NwZWxsLmMgYi9zcmMvc3BlbGwuYwppbmRleCBjNWQ4MTIyLi5lODA2NDc2IDEwMDY0NAotLS0gYS9zcmMvc3BlbGwuYworKysgYi9zcmMvc3BlbGwuYwpAQCAtMzk2LDcgKzM5Niw5IEBACiAjZGVmaW5lIFNDT1JFX1NVQlNUCTkzCS8qIHN1YnN0aXR1dGUgYSBjaGFyYWN0ZXIgKi8KICNkZWZpbmUgU0NPUkVfU0lNSUxBUgkzMwkvKiBzdWJzdGl0dXRlIGEgc2ltaWxhciBjaGFyYWN0ZXIgKi8KICNkZWZpbmUgU0NPUkVfREVMCTk0CS8qIGRlbGV0ZSBhIGNoYXJhY3RlciAqLworI2RlZmluZSBTQ09SRV9ERUxEVVAJNjQJLyogZGVsZXRlIGEgZHVwbGljYXRlZCBjaGFyYWN0ZXIgKi8KICNkZWZpbmUgU0NPUkVfSU5TCTk2CS8qIGluc2VydCBhIGNoYXJhY3RlciAqLworI2RlZmluZSBTQ09SRV9JTlNEVVAJNjYJLyogaW5zZXJ0IGEgZHVwbGljYXRlIGNoYXJhY3RlciAqLwogCiAjZGVmaW5lIFNDT1JFX01BWElOSVQJMzUwCS8qIEluaXRpYWwgbWF4aW11bSBzY29yZTogaGlnaGVyID09IHNsb3dlci4KIAkJCQkgKiAzNTAgYWxsb3dzIGZvciBhYm91dCB0aHJlZSBjaGFuZ2VzLiAqLwpAQCAtNDUzLDExICs0NTUsMTIgQEAKIAogc3RhdGljIHZvaWQgY2xlYXJfc3BlbGxfY2hhcnRhYiBfX0FSR1MoKHNwZWxsdGFiX1QgKnNwKSk7CiBzdGF0aWMgaW50IHNldF9zcGVsbF9maW5pc2ggX19BUkdTKChzcGVsbHRhYl9UCSpuZXdfc3QpKTsKK3N0YXRpYyBpbnQgc3BlbGxfaXN3b3JkcCBfX0FSR1MoKGNoYXJfdSAqcCkpOwogc3RhdGljIHZvaWQgd3JpdGVfc3BlbGxfcHJlZmNvbmQgX19BUkdTKChGSUxFICpmZCwgZ2FycmF5X1QgKmdhcCkpOwogCiAvKgotICogUmV0dXJuIFRSVUUgaWYgInAiIHBvaW50cyB0byBhIHdvcmQgY2hhcmFjdGVyIG9yICJjIiBpcyBhIHdvcmQgY2hhcmFjdGVyCi0gKiBmb3Igc3BlbGxpbmcuCisgKiBSZXR1cm4gVFJVRSBpZiAicCIgcG9pbnRzIHRvIGEgd29yZCBjaGFyYWN0ZXIuICBMaWtlIHNwZWxsX2lzd29yZHAoKSBidXQKKyAqIHdpdGhvdXQgdGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgYSBzaW5nbGUgcXVvdGUuCiAgKiBDaGVja2luZyBmb3IgYSB3b3JkIGNoYXJhY3RlciBpcyBkb25lIHZlcnkgb2Z0ZW4sIGF2b2lkIHRoZSBmdW5jdGlvbiBjYWxsCiAgKiBvdmVyaGVhZC4KICAqLwpAQCAtNTQ3LDcgKzU1MCw3IEBACiBzdGF0aWMgaW50IHNldF9zcGVsbF9jaGFydGFiIF9fQVJHUygoY2hhcl91ICpmb2wsIGNoYXJfdSAqbG93LCBjaGFyX3UgKnVwcCkpOwogc3RhdGljIHZvaWQgd3JpdGVfc3BlbGxfY2hhcnRhYiBfX0FSR1MoKEZJTEUgKmZkKSk7CiBzdGF0aWMgaW50IHNwZWxsX2Nhc2Vmb2xkIF9fQVJHUygoY2hhcl91ICpwLCBpbnQgbGVuLCBjaGFyX3UgKmJ1ZiwgaW50IGJ1ZmxlbikpOwotc3RhdGljIHZvaWQgc3BlbGxfZmluZF9zdWdnZXN0IF9fQVJHUygoY2hhcl91ICpiYWRwdHIsIHN1Z2luZm9fVCAqc3UsIGludCBtYXhjb3VudCkpOworc3RhdGljIHZvaWQgc3BlbGxfZmluZF9zdWdnZXN0IF9fQVJHUygoY2hhcl91ICpiYWRwdHIsIHN1Z2luZm9fVCAqc3UsIGludCBtYXhjb3VudCwgaW50IGJhbmJhZHdvcmQpKTsKIHN0YXRpYyB2b2lkIHNwZWxsX2ZpbmRfY2xlYW51cCBfX0FSR1MoKHN1Z2luZm9fVCAqc3UpKTsKIHN0YXRpYyB2b2lkIG9uZWNhcF9jb3B5IF9fQVJHUygoY2hhcl91ICp3b3JkLCBjaGFyX3UgKndjb3B5LCBpbnQgdXBwZXIpKTsKIHN0YXRpYyB2b2lkIGFsbGNhcF9jb3B5IF9fQVJHUygoY2hhcl91ICp3b3JkLCBjaGFyX3UgKndjb3B5KSk7CkBAIC02NTYsNyArNjU5LDcgQEAKIAkgICAgbWkubWlfZW5kID0gc2tpcGRpZ2l0cyhwdHIpOwogCSAgICBucmxlbiA9IG1pLm1pX2VuZCAtIHB0cjsKIAl9Ci0JaWYgKCFTUEVMTF9JU1dPUkRQKG1pLm1pX2VuZCkpCisJaWYgKCFzcGVsbF9pc3dvcmRwKG1pLm1pX2VuZCkpCiAJICAgIHJldHVybiAoaW50KShtaS5taV9lbmQgLSBwdHIpOwogCiAJLyogVHJ5IGluY2x1ZGluZyB0aGUgZGlnaXRzIGluIHRoZSB3b3JkLiAqLwpAQCAtNjY3LDEyICs2NzAsMTIgQEAKIAogICAgIC8qIEZpbmQgdGhlIG5vcm1hbCBlbmQgb2YgdGhlIHdvcmQgKHVudGlsIHRoZSBuZXh0IG5vbi13b3JkIGNoYXJhY3RlcikuICovCiAgICAgbWkubWlfd29yZCA9IHB0cjsKLSAgICBpZiAoU1BFTExfSVNXT1JEUChtaS5taV9mZW5kKSkKKyAgICBpZiAoc3BlbGxfaXN3b3JkcChtaS5taV9mZW5kKSkKICAgICB7CiAJZG8KIAl7CiAJICAgIG1iX3B0cl9hZHYobWkubWlfZmVuZCk7Ci0JfSB3aGlsZSAoKm1pLm1pX2ZlbmQgIT0gTlVMICYmIFNQRUxMX0lTV09SRFAobWkubWlfZmVuZCkpOworCX0gd2hpbGUgKCptaS5taV9mZW5kICE9IE5VTCAmJiBzcGVsbF9pc3dvcmRwKG1pLm1pX2ZlbmQpKTsKICAgICB9CiAKICAgICAvKiBXZSBhbHdheXMgdXNlIHRoZSBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBuZXh0IG5vbi13b3JkIGNoYXJhY3RlciwKQEAgLTkwOCw3ICs5MTEsNyBAQAogCWlmICgoKm1iX2hlYWRfb2ZmKShwdHIsIHB0ciArIHdsZW4pID4gMCkKIAkgICAgY29udGludWU7CSAgICAvKiBub3QgYXQgZmlyc3QgYnl0ZSBvZiBjaGFyYWN0ZXIgKi8KICNlbmRpZgotCWlmIChTUEVMTF9JU1dPUkRQKHB0ciArIHdsZW4pKQorCWlmIChzcGVsbF9pc3dvcmRwKHB0ciArIHdsZW4pKQogCSAgICBjb250aW51ZTsJICAgIC8qIG5leHQgY2hhciBpcyBhIHdvcmQgY2hhcmFjdGVyICovCiAKICNpZmRlZiBGRUFUX01CWVRFCkBAIC0xMTYzLDcgKzExNjYsNyBAQAogICAgIGRvCiAgICAgewogCW1iX3B0cl9hZHYobWlwLT5taV9mZW5kKTsKLSAgICB9IHdoaWxlICgqbWlwLT5taV9mZW5kICE9IE5VTCAmJiBTUEVMTF9JU1dPUkRQKG1pcC0+bWlfZmVuZCkpOworICAgIH0gd2hpbGUgKCptaXAtPm1pX2ZlbmQgIT0gTlVMICYmIHNwZWxsX2lzd29yZHAobWlwLT5taV9mZW5kKSk7CiAKICAgICAvKiBJbmNsdWRlIHRoZSBub24td29yZCBjaGFyYWN0ZXIgc28gdGhhdCB3ZSBjYW4gY2hlY2sgZm9yIHRoZQogICAgICAqIHdvcmQgZW5kLiAqLwpAQCAtMjI5MCw3ICsyMjkzLDcgQEAKICAgICBpbnQJCXBhc3Rfc2Vjb25kID0gRkFMU0U7CS8qIHBhc3Qgc2Vjb25kIHdvcmQgY2hhciAqLwogCiAgICAgLyogZmluZCBmaXJzdCBsZXR0ZXIgKi8KLSAgICBmb3IgKHAgPSB3b3JkOyAhU1BFTExfSVNXT1JEUChwKTsgbWJfcHRyX2FkdihwKSkKKyAgICBmb3IgKHAgPSB3b3JkOyAhc3BlbGxfaXN3b3JkcChwKTsgbWJfcHRyX2FkdihwKSkKIAlpZiAoZW5kID09IE5VTEwgPyAqcCA9PSBOVUwgOiBwID49IGVuZCkKIAkgICAgcmV0dXJuIDA7CSAgICAvKiBvbmx5IG5vbi13b3JkIGNoYXJhY3RlcnMsIGlsbGVnYWwgd29yZCAqLwogI2lmZGVmIEZFQVRfTUJZVEUKQEAgLTIzMDYsNyArMjMwOSw3IEBACiAgICAgICogQnV0IGEgd29yZCB3aXRoIGFuIHVwcGVyIGNoYXIgb25seSBhdCBzdGFydCBpcyBhIE9ORUNBUC4KICAgICAgKi8KICAgICBmb3IgKCA7IGVuZCA9PSBOVUxMID8gKnAgIT0gTlVMIDogcCA8IGVuZDsgbWJfcHRyX2FkdihwKSkKLQlpZiAoU1BFTExfSVNXT1JEUChwKSkKKwlpZiAoc3BlbGxfaXN3b3JkcChwKSkKIAl7CiAjaWZkZWYgRkVBVF9NQllURQogCSAgICBjID0gbWJfcHRyMmNoYXIocCk7CkBAIC0yMzY3LDcgKzIzNzAsNyBAQAogICAgIGJ1Zl9UCSpidWY7CiAgICAgd2luX1QJKndwOwogCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgdGFibGUgZm9yIFNQRUxMX0lTV09SRFAoKS4gKi8KKyAgICAvKiBJbml0aWFsaXplIHRoZSB0YWJsZSBmb3Igc3BlbGxfaXN3b3JkcCgpLiAqLwogICAgIGluaXRfc3BlbGxfY2hhcnRhYigpOwogCiAgICAgLyogVW5sb2FkIGFsbCBhbGxvY2F0ZWQgbWVtb3J5LiAqLwpAQCAtNTAxNyw2ICs1MDIwLDI4IEBACiB9CiAKIC8qCisgKiBSZXR1cm4gVFJVRSBpZiAicCIgcG9pbnRzIHRvIGEgd29yZCBjaGFyYWN0ZXIuCisgKiBBcyBhIHNwZWNpYWwgY2FzZSB3ZSBzZWUgYSBzaW5nbGUgcXVvdGUgYXMgYSB3b3JkIGNoYXJhY3RlciB3aGVuIGl0IGlzCisgKiBmb2xsb3dlZCBieSBhIHdvcmQgY2hhcmFjdGVyLiAgVGhpcyBmaW5kcyB0aGV5J3RoZXJlIGJ1dCBub3QgJ3RoZXkgdGhlcmUnLgorICovCisgICAgc3RhdGljIGludAorc3BlbGxfaXN3b3JkcChwKQorICAgIGNoYXJfdQkqcDsKK3sKKyAgICBjaGFyX3UJKnM7CisKKyAgICBpZiAoKnAgPT0gJ1wnJykKKwlzID0gcCArIDE7CisgICAgZWxzZQorCXMgPSBwOworI2lmZGVmIEZFQVRfTUJZVEUKKyAgICBpZiAoaGFzX21ieXRlICYmIE1CX0JZVEUyTEVOKCpzKSA+IDEpCisJcmV0dXJuIG1iX2dldF9jbGFzcyhzKSA+PSAyOworI2VuZGlmCisgICAgcmV0dXJuIHNwZWxsdGFiLnN0X2lzd1sqc107Cit9CisKKy8qCiAgKiBXcml0ZSB0aGUgdGFibGUgd2l0aCBwcmVmaXggY29uZGl0aW9ucyB0byB0aGUgLnNwbCBmaWxlLgogICovCiAgICAgc3RhdGljIHZvaWQKQEAgLTUxODEsNyArNTIwNiw3IEBACiAgICAgbGluZSA9IG1sX2dldF9jdXJsaW5lKCk7CiAKICAgICAvKiBHZXQgdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgKi8KLSAgICBzcGVsbF9maW5kX3N1Z2dlc3QobGluZSArIGN1cndpbi0+d19jdXJzb3IuY29sLCAmc3VnLCAoaW50KVJvd3MgLSAyKTsKKyAgICBzcGVsbF9maW5kX3N1Z2dlc3QobGluZSArIGN1cndpbi0+d19jdXJzb3IuY29sLCAmc3VnLCAoaW50KVJvd3MgLSAyLCBUUlVFKTsKIAogICAgIGlmIChzdWcuc3VfZ2EuZ2FfbGVuID09IDApCiAJTVNHKF8oIlNvcnJ5LCBubyBzdWdnZXN0aW9ucyIpKTsKQEAgLTUyODEsNyArNTMwNiw3IEBACiAgICAgc3VnZ2VzdF9UCSpzdHA7CiAgICAgY2hhcl91CSp3Y29weTsKIAotICAgIHNwZWxsX2ZpbmRfc3VnZ2VzdCh3b3JkLCAmc3VnLCBtYXhjb3VudCk7CisgICAgc3BlbGxfZmluZF9zdWdnZXN0KHdvcmQsICZzdWcsIG1heGNvdW50LCBGQUxTRSk7CiAKICAgICAvKiBNYWtlIHJvb20gaW4gImdhcCIuICovCiAgICAgZ2FfaW5pdDIoZ2FwLCBzaXplb2YoY2hhcl91ICopLCBzdWcuc3VfZ2EuZ2FfbGVuICsgMSk7CkBAIC01MzE0LDEwICs1MzM5LDExIEBACiAgKiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBtZWNoYW5pc21zIG9mIEFzcGVsbCwgYnV0IGNvbXBsZXRlbHkgcmVpbXBsZW1lbnRlZC4KICAqLwogICAgIHN0YXRpYyB2b2lkCi1zcGVsbF9maW5kX3N1Z2dlc3QoYmFkcHRyLCBzdSwgbWF4Y291bnQpCitzcGVsbF9maW5kX3N1Z2dlc3QoYmFkcHRyLCBzdSwgbWF4Y291bnQsIGJhbmJhZHdvcmQpCiAgICAgY2hhcl91CSpiYWRwdHI7CiAgICAgc3VnaW5mb19UCSpzdTsKICAgICBpbnQJCW1heGNvdW50OworICAgIGludAkJYmFuYmFkd29yZDsJLyogZG9uJ3QgaW5jbHVkZSBiYWR3b3JkIGluIHN1Z2dlc3Rpb25zICovCiB7CiAgICAgaW50CQlhdHRyOwogCkBAIC01MzQ0LDcgKzUzNzAsOCBAQAogICAgIHN1LT5zdV9iYWRmbGFncyA9IGNhcHR5cGUoc3UtPnN1X2JhZHB0ciwgc3UtPnN1X2JhZHB0ciArIHN1LT5zdV9iYWRsZW4pOwogCiAgICAgLyogQmFuIHRoZSBiYWQgd29yZCBpdHNlbGYuICBJdCBtYXkgYXBwZWFyIGluIGFub3RoZXIgcmVnaW9uLiAqLwotICAgIGFkZF9iYW5uZWQoc3UsIHN1LT5zdV9iYWR3b3JkKTsKKyAgICBpZiAoYmFuYmFkd29yZCkKKwlhZGRfYmFubmVkKHN1LCBzdS0+c3VfYmFkd29yZCk7CiAKICAgICAvKgogICAgICAqIDEuIFRyeSBzcGVjaWFsIGNhc2VzLCBzdWNoIGFzIHJlcGVhdGluZyBhIHdvcmQ6ICJ0aGUgdGhlIiAtPiAidGhlIi4KQEAgLTU2ODgsNyArNTcxNSw3IEBACiAJCSAgICBuZXdzY29yZSArPSBTQ09SRV9JQ0FTRTsKIAogCQlpZiAoKGZ3b3JkW3NwLT50c19maWR4XSA9PSBOVUwKLQkJCQkgICAgICAgfHwgIVNQRUxMX0lTV09SRFAoZndvcmQgKyBzcC0+dHNfZmlkeCkpCisJCQkJICAgICAgIHx8ICFzcGVsbF9pc3dvcmRwKGZ3b3JkICsgc3AtPnRzX2ZpZHgpKQogCQkJJiYgc3AtPnRzX2ZpZHggPj0gc3AtPnRzX2ZpZHh0cnkpCiAJCXsKIAkJICAgIC8qIFRoZSBiYWR3b3JkIGFsc28gZW5kczogYWRkIHN1Z2dlc3Rpb25zLCAqLwpAQCAtNTg1MSw2ICs1ODc4LDIwIEBACiAJCQkJCXNwLT50c19zY29yZSAtPQogCQkJCQkJICBTQ09SRV9TVUJTVCAtIFNDT1JFX1NJTUlMQVI7CiAJCQkJfQorCQkJCWVsc2UgaWYgKHNwLT50c19pc2RpZmYgPT0gRElGRl9JTlNFUlQKKwkJCQkJJiYgc3AtPnRzX3R3b3JkbGVuID4gc3AtPnRzX3RjaGFybGVuKQorCQkJCXsKKwkJCQkgICAgLyogSWYgdGhlIHByZXZpb3VzIGNoYXJhY3RlciB3YXMgdGhlIHNhbWUsCisJCQkJICAgICAqIHRodXMgZG91YmxpbmcgYSBjaGFyYWN0ZXIsIGdpdmUgYSBib251cworCQkJCSAgICAgKiB0byB0aGUgc2NvcmUuICovCisJCQkJICAgIHAgPSB0d29yZCArIHNwLT50c190d29yZGxlbgorCQkJCQkJCSAgICAtIHNwLT50c190Y2hhcmxlbjsKKwkJCQkgICAgYyA9IG1iX3B0cjJjaGFyKHApOworCQkJCSAgICBtYl9wdHJfYmFjayh0d29yZCwgcCk7CisJCQkJICAgIGlmIChjID09IG1iX3B0cjJjaGFyKHApKQorCQkJCQlzcC0+dHNfc2NvcmUgLT0gU0NPUkVfSU5TCisJCQkJCQkJICAgICAgIC0gU0NPUkVfSU5TRFVQOworCQkJCX0KIAogCQkJCS8qIFN0YXJ0aW5nIGEgbmV3IGNoYXIsIHJlc2V0IHRoZSBsZW5ndGguICovCiAJCQkJc3AtPnRzX3RjaGFybGVuID0gMDsKQEAgLTU4OTEsMTIgKzU5MzIsMjUgQEAKIAkJCSYmIHRyeV9kZWVwZXIoc3UsIHN0YWNrLCBkZXB0aCwgU0NPUkVfREVMKSkKIAkJewogCQkgICAgKytkZXB0aDsKKworCQkgICAgLyogQWR2YW5jZSBvdmVyIHRoZSBjaGFyYWN0ZXIgaW4gZndvcmRbXS4gR2l2ZSBhIGJvbnVzIHRvCisJCSAgICAgKiB0aGUgc2NvcmUgaWYgdGhlIHNhbWUgY2hhcmFjdGVyIGlzIGZvbGxvd2luZyAibm4iIC0+CisJCSAgICAgKiAibiIuICovCiAjaWZkZWYgRkVBVF9NQllURQogCQkgICAgaWYgKGhhc19tYnl0ZSkKKwkJICAgIHsKKwkJCWMgPSBtYl9wdHIyY2hhcihmd29yZCArIHNwLT50c19maWR4KTsKIAkJCXN0YWNrW2RlcHRoXS50c19maWR4ICs9IE1CX0JZVEUyTEVOKGZ3b3JkW3NwLT50c19maWR4XSk7CisJCQlpZiAoYyA9PSBtYl9wdHIyY2hhcihmd29yZCArIHN0YWNrW2RlcHRoXS50c19maWR4KSkKKwkJCSAgICBzdGFja1tkZXB0aF0udHNfc2NvcmUgLT0gU0NPUkVfREVMIC0gU0NPUkVfREVMRFVQOworCQkgICAgfQogCQkgICAgZWxzZQogI2VuZGlmCisJCSAgICB7CiAJCQkrK3N0YWNrW2RlcHRoXS50c19maWR4OworCQkJaWYgKGZ3b3JkW3NwLT50c19maWR4XSA9PSBmd29yZFtzcC0+dHNfZmlkeCArIDFdKQorCQkJICAgIHN0YWNrW2RlcHRoXS50c19zY29yZSAtPSBTQ09SRV9ERUwgLSBTQ09SRV9ERUxEVVA7CisJCSAgICB9CiAJCSAgICBicmVhazsKIAkJfQogCQkvKkZBTExUSFJPVUdIKi8KQEAgLTU5MzUsNyArNTk4OSwxOCBAQAogCQkJCXNwLT50c19pc2RpZmYgPSBESUZGX0lOU0VSVDsKIAkJCSAgICB9CiAJCQl9CisJCQllbHNlCisJCQkgICAgZmwgPSAxOworCQkJaWYgKGZsID09IDEpCiAjZW5kaWYKKwkJCXsKKwkJCSAgICAvKiBJZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHdhcyB0aGUgc2FtZSwgdGh1cworCQkJICAgICAqIGRvdWJsaW5nIGEgY2hhcmFjdGVyLCBnaXZlIGEgYm9udXMgdG8gdGhlCisJCQkgICAgICogc2NvcmUuICovCisJCQkgICAgaWYgKHNwLT50c190d29yZGxlbiA+PSAyCisJCQkJCSAgICYmIHR3b3JkW3NwLT50c190d29yZGxlbiAtIDJdID09IGMpCisJCQkJc3AtPnRzX3Njb3JlIC09IFNDT1JFX0lOUyAtIFNDT1JFX0lOU0RVUDsKKwkJCX0KIAkJICAgIH0KIAkJfQogCQlicmVhazsKQEAgLTcyNjQsNyArNzMyOSw3IEBACiAJICAgIGVsc2UgaWYgKGhhc19tYnl0ZSkKIAkgICAgewogCQlsID0gbWJfcHRyMmxlbl9jaGVjayhzKTsKLQkJaWYgKFNQRUxMX0lTV09SRFAocykpCisJCWlmIChzcGVsbF9pc3dvcmRwKHMpKQogCQl7CiAJCSAgICBtY2hfbWVtbW92ZSh0LCBzLCBsKTsKIAkJICAgIHQgKz0gbDsKQEAgLTcyNzYsNyArNzM0MSw3IEBACiAjZW5kaWYKIAkgICAgZWxzZQogCSAgICB7Ci0JCWlmIChTUEVMTF9JU1dPUkRQKHMpKQorCQlpZiAoc3BlbGxfaXN3b3JkcChzKSkKIAkJICAgICp0KysgPSAqczsKIAkJKytzOwogCSAgICB9CkBAIC03Mzc2LDEyICs3NDQxLDEyIEBACiAJCWlmICgqcyA9PSBOVUwKIAkJCXx8ICgqcyA9PSAnXicKIAkJCSAgICAmJiAoaSA9PSAwIHx8ICEod29yZFtpIC0gMV0gPT0gJyAnCi0JCQkJCSAgICAgIHx8IFNQRUxMX0lTV09SRFAod29yZCArIGkgLSAxKSkpCisJCQkJCSAgICAgIHx8IHNwZWxsX2lzd29yZHAod29yZCArIGkgLSAxKSkpCiAJCQkgICAgJiYgKCoocyArIDEpICE9ICckJwotCQkJCXx8ICghU1BFTExfSVNXT1JEUCh3b3JkICsgaSArIGswKSkpKQorCQkJCXx8ICghc3BlbGxfaXN3b3JkcCh3b3JkICsgaSArIGswKSkpKQogCQkJfHwgKCpzID09ICckJyAmJiBpID4gMAotCQkJICAgICYmIFNQRUxMX0lTV09SRFAod29yZCArIGkgLSAxKQotCQkJICAgICYmICghU1BFTExfSVNXT1JEUCh3b3JkICsgaSArIGswKSkpKQorCQkJICAgICYmIHNwZWxsX2lzd29yZHAod29yZCArIGkgLSAxKQorCQkJICAgICYmICghc3BlbGxfaXN3b3JkcCh3b3JkICsgaSArIGswKSkpKQogCQl7CiAJCSAgICAvKiBzZWFyY2ggZm9yIGZvbGxvd3VwIHJ1bGVzLCBpZjogICAgKi8KIAkJICAgIC8qIGZvbGxvd3VwIGFuZCBrID4gMSAgYW5kICBOTyAnLScgaW4gc2VhcmNoc3RyaW5nICovCkBAIC03NDQzLDcgKzc1MDgsNyBAQAogCQkJICAgIGlmICgqcyA9PSBOVUwKIAkJCQkgICAgLyogKnMgPT0gJ14nIGN1dHMgKi8KIAkJCQkgICAgfHwgKCpzID09ICckJwotCQkJCQkgICAgJiYgIVNQRUxMX0lTV09SRFAod29yZCArIGkgKyBrMCkpKQorCQkJCQkgICAgJiYgIXNwZWxsX2lzd29yZHAod29yZCArIGkgKyBrMCkpKQogCQkJICAgIHsKIAkJCQlpZiAoazAgPT0gaykKIAkJCQkgICAgLyogdGhpcyBpcyBqdXN0IGEgcGllY2Ugb2YgdGhlIHN0cmluZyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NwZWxsL2VuX05aLmRpZmYgYi9zcmMvc3BlbGwvZW5fTlouZGlmZgppbmRleCAyNDMwMThmLi40MTI3NDc2IDEwMDY0NAotLS0gYS9zcmMvc3BlbGwvZW5fTlouZGlmZgorKysgYi9zcmMvc3BlbGwvZW5fTlouZGlmZgpAQCAtMSwxNyArMSwyMCBAQAogKioqIGVuX05aLm9yaWcuYWZmCUZyaSBBcHIgMTUgMTM6MjA6MzYgMjAwNQotLS0tIGVuX05aLmFmZglTYXQgSnVuIDE4IDE5OjQyOjMxIDIwMDUKKy0tLSBlbl9OWi5hZmYJVGh1IEp1biAyMyAxNzo0MzozNCAyMDA1CiAqKioqKioqKioqKioqKioKICoqKiA3LDkgKioqKgogICBTRVQgSVNPODg1OS0xCiAhIFRSWSBlc2lh6W5ydG9sY2R1Z21waGJ5ZnZrdy0nLnpxanhTTlJUTENHRE1QSEJFQVVZT0ZJVktX9uL0WlFKWMXn6O7q4O/85PEgCiAgIFJFUCA2NgotLS0tIDcsMTQgLS0tLQorLS0tIDcsMTcgLS0tLQogICBTRVQgSVNPODg1OS0xCiAhIFRSWSBlc2lh6W5ydG9sY2R1Z21waGJ5ZnZrdy0nLnpxanhTTlJUTENHRE1QSEJFQVVZT0ZJVktX9uL0WlFKWMXn6O7q4O/85PEKICEgCi0hIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3wotISBMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t8KLSEgVVBQICDAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7fCishIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3/8KKyEgTE9XICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7f/worISBVUFAgIMDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3t//CishIAorISBSQVIgPworISBCQUQgIQogISAKICAgUkVQIDY2CiAqKioqKioqKioqKioqKioKQEAgLTM2LDcgKzM5LDcgQEAKICAgUEZYIEUgWSAxCiAhIFBGWCBFIDAgZGlzIC4gCiAgIFBGWCBGIFkgNQotLS0tIDgxLDEwMCAtLS0tCistLS0gODQsMTAzIC0tLS0KICAgUEZYIEEgWSAyCiAhIFBGWCBBIDAgcmUgW15lXQogISBQRlggQSAwIHJlLSBlCkBAIC00NTQsNyArNDU3LDcgQEAKICAgU0ZYIFQgeSBpZXN0IFteYWVpb3VdeQogISBTRlggVCAwIGVyIFthZWlvdV15IAogICBTRlggVCAwIGVzdCBbYWVpb3VdeQotLS0tIDEwNCw0OTggLS0tLQorLS0tIDEwNyw1MDEgLS0tLQogICBQRlggRiAwIGNvbCBsCiAhIFBGWCBGIDAgY29uIFteYWJlaGlsbW9wcnVdLgogICBQRlggSyBZIDEKQEAgLTE1MzksNyArMTU0Miw3IEBACiAhIFNGWCAzIG8gaXN0J3MgbyAKICEgU0ZYIDMgMCBpc3QncyBbXmVveV0gCiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0tLSA1MDUsMTE5MCAtLS0tCistLS0gNTA4LDEzMTQgLS0tLQogICBTRlggUiBZIDcyCiAhIFNGWCBSIDAgciBlCiAhIFNGWCBSIDAgcnMgZQpAQCAtMjIyNiwzMyArMjIyOSwxNTEgQEAKICEgU0ZYIDMgMCBpc3QncyBbYWVpb3VicF15CiAhIFNGWCAzIG8gaXN0J3MgbwogISBTRlggMyAwIGlzdCdzIFteZW95XQorISAKKyEgTUFQIDUKKyEgTUFQIGHg4eLj5OUKKyEgTUFQIGXo6errCishIE1BUCBp7O3u7worISBNQVAgb/Lz9PX2CishIE1BUCB1+fr7/AorISBNQVAgbvEKKyEgTUFQIGPnCishIE1BUCB5//0KKyEgTUFQIHPfCishIAorISAjIFRoaXMgY29tZXMgZnJvbSBBc3BlbGwgZW5fcGhvbmV0LmRhdCwgdmVyc2lvbiAxLjEsIDIwMDAtMDEtMDcKKyEgCishIFNBTCBBSChBRUlPVVkpLV4gICAgICAgICAqSAorISBTQUwgQVIoQUVJT1VZKS1eICAgICAgICAgKlIKKyEgU0FMIEEoSFIpXiAgICAgICAgICAgICAgICoKKyEgU0FMIEFeICAgICAgICAgICAgICAgICAgICoKKyEgU0FMIEFIKEFFSU9VWSktICAgICAgICAgIEgKKyEgU0FMIEFSKEFFSU9VWSktICAgICAgICAgIFIKKyEgU0FMIEEoSFIpICAgICAgICAgICAgICAgIF8KKyEgU0FMIMBeICAgICAgICAgICAgICAgICAgICoKKyEgU0FMIMVeICAgICAgICAgICAgICAgICAgICoKKyEgU0FMIEJCLSAgICAgICAgICAgICAgICAgIF8KKyEgU0FMIEIgICAgICAgICAgICAgICAgICAgIEIKKyEgU0FMIENRLSAgICAgICAgICAgICAgICAgIF8KKyEgU0FMIENJQSAgICAgICAgICAgICAgICAgIFgKKyEgU0FMIENIICAgICAgICAgICAgICAgICAgIFgKKyEgU0FMIEMoRUlZKS0gICAgICAgICAgICAgIFMKKyEgU0FMIENLICAgICAgICAgICAgICAgICAgIEsKKyEgU0FMIENPVUdIXiAgICAgICAgICAgICAgIEtGCishIFNBTCBDQzwgICAgICAgICAgICAgICAgICBDCishIFNBTCBDICAgICAgICAgICAgICAgICAgICBLCishIFNBTCBERyhFSVkpICAgICAgICAgICAgICBLCishIFNBTCBERC0gICAgICAgICAgICAgICAgICBfCishIFNBTCBEICAgICAgICAgICAgICAgICAgICBUCishIFNBTCDJPCAgICAgICAgICAgICAgICAgICBFCishIFNBTCBFSChBRUlPVVkpLV4gICAgICAgICAqSAorISBTQUwgRVIoQUVJT1VZKS1eICAgICAgICAgKlIKKyEgU0FMIEUoSFIpXiAgICAgICAgICAgICAgICoKKyEgU0FMIEVOT1VHSF4kICAgICAgICAgICAgICpORgorISBTQUwgRV4gICAgICAgICAgICAgICAgICAgKgorISBTQUwgRUgoQUVJT1VZKS0gICAgICAgICAgSAorISBTQUwgRVIoQUVJT1VZKS0gICAgICAgICAgUgorISBTQUwgRShIUikgICAgICAgICAgICAgICAgXworISBTQUwgRkYtICAgICAgICAgICAgICAgICAgXworISBTQUwgRiAgICAgICAgICAgICAgICAgICAgRgorISBTQUwgR05eICAgICAgICAgICAgICAgICAgTgorISBTQUwgR04kICAgICAgICAgICAgICAgICAgTgorISBTQUwgR05TJCAgICAgICAgICAgICAgICAgTlMKKyEgU0FMIEdORUQkICAgICAgICAgICAgICAgIE4KKyEgU0FMIEdIKEFFSU9VWSktICAgICAgICAgIEsKKyEgU0FMIEdIICAgICAgICAgICAgICAgICAgIF8KKyEgU0FMIEdHOSAgICAgICAgICAgICAgICAgIEsKKyEgU0FMIEcgICAgICAgICAgICAgICAgICAgIEsKKyEgU0FMIEggICAgICAgICAgICAgICAgICAgIEgKKyEgU0FMIElIKEFFSU9VWSktXiAgICAgICAgICpICishIFNBTCBJUihBRUlPVVkpLV4gICAgICAgICAqUgorISBTQUwgSShIUileICAgICAgICAgICAgICAgKgorISBTQUwgSV4gICAgICAgICAgICAgICAgICAgKgorISBTQUwgSU5HNiAgICAgICAgICAgICAgICAgTgorISBTQUwgSUgoQUVJT1VZKS0gICAgICAgICAgSAorISBTQUwgSVIoQUVJT1VZKS0gICAgICAgICAgUgorISBTQUwgSShIUikgICAgICAgICAgICAgICAgXworISBTQUwgSiAgICAgICAgICAgICAgICAgICAgSworISBTQUwgS05eICAgICAgICAgICAgICAgICAgTgorISBTQUwgS0stICAgICAgICAgICAgICAgICAgXworISBTQUwgSyAgICAgICAgICAgICAgICAgICAgSworISBTQUwgTEFVR0heICAgICAgICAgICAgICAgTEYKKyEgU0FMIExMLSAgICAgICAgICAgICAgICAgIF8KKyEgU0FMIEwgICAgICAgICAgICAgICAgICAgIEwKKyEgU0FMIE1CJCAgICAgICAgICAgICAgICAgIE0KKyEgU0FMIE1NICAgICAgICAgICAgICAgICAgIE0KKyEgU0FMIE0gICAgICAgICAgICAgICAgICAgIE0KKyEgU0FMIE5OLSAgICAgICAgICAgICAgICAgIF8KKyEgU0FMIE4gICAgICAgICAgICAgICAgICAgIE4KKyEgU0FMIE9IKEFFSU9VWSktXiAgICAgICAgICpICishIFNBTCBPUihBRUlPVVkpLV4gICAgICAgICAqUgorISBTQUwgTyhIUileICAgICAgICAgICAgICAgKgorISBTQUwgT14gICAgICAgICAgICAgICAgICAgKgorISBTQUwgT0goQUVJT1VZKS0gICAgICAgICAgSAorISBTQUwgT1IoQUVJT1VZKS0gICAgICAgICAgUgorISBTQUwgTyhIUikgICAgICAgICAgICAgICAgXworISBTQUwgUEggICAgICAgICAgICAgICAgICAgRgorISBTQUwgUE5eICAgICAgICAgICAgICAgICAgTgorISBTQUwgUFAtICAgICAgICAgICAgICAgICAgXworISBTQUwgUCAgICAgICAgICAgICAgICAgICAgUAorISBTQUwgUSAgICAgICAgICAgICAgICAgICAgSworISBTQUwgUkheICAgICAgICAgICAgICAgICAgUgorISBTQUwgUk9VR0heICAgICAgICAgICAgICAgUkYKKyEgU0FMIFJSLSAgICAgICAgICAgICAgICAgIF8KKyEgU0FMIFIgICAgICAgICAgICAgICAgICAgIFIKKyEgU0FMIFNDSChFT1UpLSAgICAgICAgICAgIFNLCishIFNBTCBTQyhJRVkpLSAgICAgICAgICAgICBTCishIFNBTCBTSCAgICAgICAgICAgICAgICAgICBYCishIFNBTCBTSShBTyktICAgICAgICAgICAgICBYCishIFNBTCBTUy0gICAgICAgICAgICAgICAgICBfCishIFNBTCBTICAgICAgICAgICAgICAgICAgICBTCishIFNBTCBUSShBTyktICAgICAgICAgICAgICBYCishIFNBTCBUSCAgICAgICAgICAgICAgICAgICBACishIFNBTCBUQ0gtLSAgICAgICAgICAgICAgICBfCishIFNBTCBUT1VHSF4gICAgICAgICAgICAgICBURgorISBTQUwgVFQtICAgICAgICAgICAgICAgICAgXworISBTQUwgVCAgICAgICAgICAgICAgICAgICAgVAorISBTQUwgVUgoQUVJT1VZKS1eICAgICAgICAgKkgKKyEgU0FMIFVSKEFFSU9VWSktXiAgICAgICAgICpSCishIFNBTCBVKEhSKV4gICAgICAgICAgICAgICAqCishIFNBTCBVXiAgICAgICAgICAgICAgICAgICAqCishIFNBTCBVSChBRUlPVVkpLSAgICAgICAgICBICishIFNBTCBVUihBRUlPVVkpLSAgICAgICAgICBSCishIFNBTCBVKEhSKSAgICAgICAgICAgICAgICBfCishIFNBTCBWXiAgICAgICAgICAgICAgICAgICBXCishIFNBTCBWICAgICAgICAgICAgICAgICAgICBGCishIFNBTCBXUl4gICAgICAgICAgICAgICAgICBSCishIFNBTCBXSF4gICAgICAgICAgICAgICAgICBXCishIFNBTCBXKEFFSU9VKS0gICAgICAgICAgICBXCishIFNBTCBYXiAgICAgICAgICAgICAgICAgICBTCishIFNBTCBYICAgICAgICAgICAgICAgICAgICBLUworISBTQUwgWShBRUlPVSktICAgICAgICAgICAgWQorISBTQUwgWlotICAgICAgICAgICAgICAgICAgXworISBTQUwgWiAgICAgICAgICAgICAgICAgICAgUwogKioqIGVuX05aLm9yaWcuZGljCUZyaSBBcHIgMTUgMTM6MjA6MzYgMjAwNQotLS0tIGVuX05aLmRpYwlUdWUgSnVuIDIxIDIwOjE0OjI0IDIwMDUKKy0tLSBlbl9OWi5kaWMJV2VkIEp1biAyMiAxNDowNjo1MSAyMDA1CiAqKioqKioqKioqKioqKioKLSoqKiAxLDYgKioqKgotICA0NzE0MQotLSAzR1BQCi0tIDJZQQotLSAyWkIKKyoqKiA0LDYgKioqKgorICAyWkIKIC0gQQogICBhL28KLS0tLSAxLDIgLS0tLQorLS0tIDQsNSAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA5MjcsOTI5ICoqKioKICAgQWwtWmF3YWhpcmkKIC0gYWwvRkFDCiAgIEFsL00KLS0tLSA5MjMsOTI0IC0tLS0KKy0tLSA5MjYsOTI3IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDI5NDEsMjk0NCAqKioqCiAgIEIuU2MuCiAtIGJsZXNzCiAtIGJpYmxlCiAgIGJhYS9HU0QKLS0tLSAyOTM2LDI5MzcgLS0tLQorLS0tIDI5MzksMjk0MCAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0OTc0LDQ5NzUgKioqKgotLS0tIDQ5NjcsNDk2OSAtLS0tCistLS0gNDk3MCw0OTcyIC0tLS0KICAgQnJhbXB0b24vTQogKyBCcmFtL00KICAgYnJhbi9TREdNCkBAIC0yMjYxLDcgKzIzODIsNyBAQAogICBDLkxpdC4KICEgY2F0aW9uL1NNCiAgIENhL3kKLS0tLSA1NzAxLDU3MDMgLS0tLQorLS0tIDU3MDQsNTcwNiAtLS0tCiAgIEMuTGl0LgogISBjYXRpb24vTVdTCiAgIENhL3kKQEAgLTIyNzAsMjIgKzIzOTEsMjggQEAKICAgQ2F0aHkKIC0gY2F0aW9uL01XCiAgIGNhdGtpbi9TTQotLS0tIDY0NDQsNjQ0NSAtLS0tCistLS0gNjQ0Nyw2NDQ4IC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDg1ODksODU5MCAqKioqCistLS0gODU4NSw4NTg3IC0tLS0KKyAgY29uaWZlcm91cworKyBjb25qLgorICBjb25qZWN0dXJhbAogKioqKioqKioqKioqKioqCiAqKiogMTAxNTMsMTAxNTUgKioqKgogICByZWQncwogLSBkYWxseQogICBkYWIvVFNHRAotLS0tIDEwMTQ2LDEwMTQ3IC0tLS0KKy0tLSAxMDE1MCwxMDE1MSAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiAxMDM2MCwxMDM2MSAqKioqCi0tLS0gMTAzNTIsMTAzNTQgLS0tLQorLS0tIDEwMzU2LDEwMzU4IC0tLS0KICAgZEJtCiArIGRCZAogICBEQk1TCiAqKioqKioqKioqKioqKioKICoqKiAxMjUzNSwxMjUzNiAqKioqCi0tLS0gMTI1MjgsMTI1MzAgLS0tLQorLS0tIDEyNTMyLDEyNTM0IC0tLS0KICAgRHV0Y2h3b21lbi9NCiArIEZhcnNpCiAgIGR1dGVvdXMvWQpAQCAtMjI5NCwxMyArMjQyMSwxMyBAQAogICBkdXZldC9TTQogLSBkdXhlcwogICBEVkQvTVMKLS0tLSAxMjUzNiwxMjUzNyAtLS0tCistLS0gMTI1NDAsMTI1NDEgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMTM5MDEsMTM5MDMgKioqKgogICBlc3R1YXJ5L01TCiAhIGV0CiAgIEVUQQotLS0tIDEzODk0LDEzODk3IC0tLS0KKy0tLSAxMzg5OCwxMzkwMSAtLS0tCiAgIGVzdHVhcnkvTVMKICEgZXQgY2V0ZXJhCiAhIGV0IGFsLgpAQCAtMjMxMSwxMyArMjQzOCwxMyBAQAogLSBmYWJsZQogLSBmaXN0L01TCiAgIGZhL00KLS0tLSAxNDUyNSwxNDUyNiAtLS0tCistLS0gMTQ1MjksMTQ1MzAgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMTUzMjMsMTUzMjUgKioqKgogICBmaXNzdXJlL0RTTUcKICEgZmlzdC82R0QKICAgZmlzdGZpZ2h0L01TCi0tLS0gMTUzMTUsMTUzMTcgLS0tLQorLS0tIDE1MzE5LDE1MzIxIC0tLS0KICAgZmlzc3VyZS9EU01HCiAhIGZpc3QvNkdETVMKICAgZmlzdGZpZ2h0L01TCkBAIC0yMzI2LDQ0ICsyNDUzLDQ0IEBACiAgIGcncwogLSBnYWJsZQogICBnaXN0L01TCi0tLS0gMTY1OTgsMTY1OTkgLS0tLQorLS0tIDE2NjAyLDE2NjAzIC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDE2Nzk3LDE2Nzk5ICoqKioKICAgR2FydmV5CiAtIEdhcnkvTQogICBnYXMtcGVybWVhYmxlCi0tLS0gMTY3ODgsMTY3ODkgLS0tLQorLS0tIDE2NzkyLDE2NzkzIC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDE4MTc3LDE4MTc5ICoqKioKICAgZ3lyb3Njb3BlL1NXTQogLSBkaXNoCiAgIGhhCi0tLS0gMTgxNjcsMTgxNjggLS0tLQorLS0tIDE4MTcxLDE4MTcyIC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDIyMzIxLDIyMzIzICoqKioKICAgSy1mYWN0b3IKIC0gZGlzay9NUwogICBrYWJvYidzCi0tLS0gMjIzMTAsMjIzMTEgLS0tLQorLS0tIDIyMzE0LDIyMzE1IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDIzMTI5LDIzMTMyICoqKioKICAgbGFzc29lci9NCiAtIGxhc3QtZGl0Y2gKIC0gbGFzdC1taW51dGUKICAgbGFzdC9ZU0RHa0oKLS0tLSAyMzExNywyMzExOCAtLS0tCistLS0gMjMxMjEsMjMxMjIgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMjYzOTYsMjYzOTggKioqKgogICBNaXNzeQogISBtaXN0L0NEUkdTCiAgIG1pc3Rha2FibGUvVQotLS0tIDI2MzgyLDI2Mzg0IC0tLS0KKy0tLSAyNjM4NiwyNjM4OCAtLS0tCiAgIE1pc3N5CiAhIG1pc3QvQ0RSR1NNCiAgIG1pc3Rha2FibGUvVQogKioqKioqKioqKioqKioqCiAqKiogMjY3NDUsMjY3NDYgKioqKgotLS0tIDI2NzMxLDI2NzMzIC0tLS0KKy0tLSAyNjczNSwyNjczNyAtLS0tCiAgIE1vb2cKICsgTW9vbGVuYWFyL00KICAgbW9vbi9NR3BEUwpAQCAtMjM3Miw3ICsyNDk5LDcgQEAKICAgbW96emFyZWxsYS9TTQogLSBNUDMKICAgbXBnCi0tLS0gMjcwMDUsMjcwMDYgLS0tLQorLS0tIDI3MDA5LDI3MDEwIC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDI3MzY1LDI3MzcyICoqKioKICAgTidEamFtZW5hCkBAIC0yMzgzLDcgKzI1MTAsNyBAQAogLSBuYXRpb25hbAogLSBuYXRpb25hbGx5CiAgIE5hL00KLS0tLSAyNzM1MSwyNzM1NSAtLS0tCistLS0gMjczNTUsMjczNTkgLS0tLQogICBOJ0RqYW1lbmEKICEgbmF0aXZlL1NQCiAgIG5hdGl2ZWx5CkBAIC0yMzk0LDcgKzI1MjEsNyBAQAogICBOYXRoYW5pZWwvTQogISBuYXRpb24vTQogICBuYXRpb25hbC9zUTNTcQotLS0tIDI3NDkwLDI3NDkyIC0tLS0KKy0tLSAyNzQ5NCwyNzQ5NiAtLS0tCiAgIE5hdGhhbmllbC9NCiAhIG5hdGlvbi9NUwogICBuYXRpb25hbC9zUTNTcQpAQCAtMjQwMyw3ICsyNTMwLDcgQEAKICAgbmF0aW9ud2lkZQogLSBuYXRpdmUvU1AKICAgbmF0aXZpdHkvU00KLS0tLSAyNzUwNCwyNzUwNSAtLS0tCistLS0gMjc1MDgsMjc1MDkgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMjk4NTIsMjk4NTcgKioqKgogICBQLk8uCkBAIC0yNDEyLDE2ICsyNTM5LDE2IEBACiAtIGltcGx5CiAtIGNvbXBseQogICBwYS9vTQotLS0tIDI5ODM0LDI5ODM1IC0tLS0KKy0tLSAyOTgzOCwyOTgzOSAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiAzMTcwMiwzMTcwMyAqKioqCi0tLS0gMzE2ODAsMzE2ODIgLS0tLQorLS0tIDMxNjg0LDMxNjg2IC0tLS0KICAgcG5ldW1vbmlhL01TCiArIHBuZXVtb25pYwogICBQTwogKioqKioqKioqKioqKioqCiAqKiogMzE4ODUsMzE4ODYgKioqKgotLS0tIDMxODY0LDMxODY2IC0tLS0KKy0tLSAzMTg2OCwzMTg3MCAtLS0tCiAgIHBvbXBvbS9TTQogKyBwb21wb24vTQogICBwb21wb3NpdHkvU00KQEAgLTI0MzAsMzAgKzI1NTcsMzAgQEAKICAgcXdlcnR5cwogLSByL2QKICAgUmEKLS0tLSAzMzU0MSwzMzU0MiAtLS0tCistLS0gMzM1NDUsMzM1NDYgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMzU0NTYsMzU0NTggKioqKgogICBydAogLSBydGUKICAgUnUvTQotLS0tIDM1NDM1LDM1NDM2IC0tLS0KKy0tLSAzNTQzOSwzNTQ0MCAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiAzNTYxOSwzNTYyMiAqKioqCiAgIHNpbmdseQogLSBzYWJsZQogLSBzYWxseS9EU0cKICAgU0EKLS0tLSAzNTU5NywzNTU5OCAtLS0tCistLS0gMzU2MDEsMzU2MDIgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDA3NjMsNDA3NjYgKioqKgogICBUJ3MKIC0gbWlzdC9NUwogLSBvdmVydAogICBUYQotLS0tIDQwNzM5LDQwNzQwIC0tLS0KKy0tLSA0MDc0Myw0MDc0NCAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0MzU3NCw0MzU3NSAqKioqCi0tLS0gNDM1NDgsNDM1NTAgLS0tLQorLS0tIDQzNTUyLDQzNTU0IC0tLS0KICAgdW5zZWFyY2hhYmxlCiArIHNlYXJjaGFibGUKICAgdW5zZWVpbmcvWQpAQCAtMjQ2Miw3ICsyNTg5LDcgQEAKICAgVmlsbml1cy9NCiAhIHZpbS9NCiAgIHZpbmFpZ3JldHRlL01TCi0tLS0gNDQzMDksNDQzMTEgLS0tLQorLS0tIDQ0MzEzLDQ0MzE1IC0tLS0KICAgVmlsbml1cy9NCiAhIFZpbS9NCiAgIHZpbmFpZ3JldHRlL01TCkBAIC0yNDcxLDczICsyNTk4LDc4IEBACiAgIHknYWxsCiAtIHByZXkvTQogICB5YWNodC9NNVNtR0QKLS0tLSA0NTg4MSw0NTg4MiAtLS0tCistLS0gNDU4ODUsNDU4ODYgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDYxOTgsNDYyMDAgKioqKgogICByYXRhL00KIC0ga2FrYS9NCiAgIHdha2EvTQotLS0tIDQ2MTcyLDQ2MTczIC0tLS0KKy0tLSA0NjE3Niw0NjE3NyAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0NjIxNiw0NjIxOCAqKioqCiAgIGphbmRhbC9NUwogLSBTd2FubmRyaS9NCiAgIGhvb24vTVMKLS0tLSA0NjE4OSw0NjE5MCAtLS0tCistLS0gNDYxOTMsNDYxOTQgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDYyNDIsNDYyNDQgKioqKgogICBJbnZlcmNhcmdpbGwvTQogLSBUZQogICBBbGV4YW5kcmEvTQotLS0tIDQ2MjE0LDQ2MjE1IC0tLS0KKy0tLSA0NjIxOCw0NjIxOSAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0NjI2MSw0NjI2MyAqKioqCiAgIEthd2VyYXUvTQogLSBLZXJpa2VyaS9NCiAgIEx5dHRlbHRvbi9NCi0tLS0gNDYyMzIsNDYyMzMgLS0tLQorLS0tIDQ2MjM2LDQ2MjM3IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2NDkxLDQ2NDkzICoqKioKICAgV2FpYW5ha2FydWEKIC0gSGFrYXRlcmUKICAgU3dpbgotLS0tIDQ2NDYxLDQ2NDYyIC0tLS0KKy0tLSA0NjQ2NSw0NjQ2NiAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0NjY5MCw0NjY5MiAqKioqCiAgIE9tYXJhbWEvTQogLSBXYWlyYXJhcGEvTQogICBLaWxkYS9NCi0tLS0gNDY2NTksNDY2NjAgLS0tLQorLS0tIDQ2NjYzLDQ2NjY0IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2NzExLDQ2NzEzICoqKioKICAgV2VsbHNmb3JkL00KIC0gQWthcm9hL00KICAgQXZvbmhlYWQvTQotLS0tIDQ2Njc5LDQ2NjgwIC0tLS0KKy0tLSA0NjY4Myw0NjY4NCAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0NjgzOCw0Njg0MCAqKioqCiAgIEJhbGxhbnR5bmUncwogLSBEQgogICBNb250ZWl0aCdzCi0tLS0gNDY4MDUsNDY4MDYgLS0tLQorLS0tIDQ2ODA5LDQ2ODEwIC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2OTIwLDQ2OTIyICoqKioKICAgRWdtb250L00KIC0gV2FpdGFraS9NCiAgIGthdGlwby9NCi0tLS0gNDY4ODYsNDY4ODcgLS0tLQorLS0tIDQ2ODkwLDQ2ODkxIC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2OTU2LDQ2OTU4ICoqKioKICAgU3VubnlzaWRlL00KIC0gV2FpcmF1L00KICAgV2Fpa29yb3B1cHUKLS0tLSA0NjkyMSw0NjkyMiAtLS0tCistLS0gNDY5MjUsNDY5MjYgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDcxNDEsNDcxNDIgKioqKgogICBCdXJraW5hCiAhIEZhc28vTQogXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tLS0gNDcxMDUsNDcxMDcgLS0tLQorLS0tIDQ3MTA5LDQ3MTE2IC0tLS0KICAgQnVya2luYQogISBGYXNvL00KICEgbmQKKyEgdGhlIHRoZS8hCishIGEgYS8hCishIGEgYW4vIQorISBhbiBhLyEKKyEgYW4gYW4vIQpkaWZmIC0tZ2l0IGEvc3JjL3ZpbS5oIGIvc3JjL3ZpbS5oCmluZGV4IDIxYmNlODcuLjZkZmM5NDYgMTAwNjQ0Ci0tLSBhL3NyYy92aW0uaAorKysgYi9zcmMvdmltLmgKQEAgLTk0OSw2ICs5NDksNyBAQAogI2RlZmluZSBEVF9IRUxQCQk4CS8qIGxpa2UgRFRfVEFHLCBidXQgbm8gd2lsZGNhcmRzICovCiAjZGVmaW5lIERUX0pVTVAJCTkJLyoganVtcCB0byBuZXcgdGFnIG9yIHNlbGVjdGlvbiBmcm9tIGxpc3QgKi8KICNkZWZpbmUgRFRfQ1NDT1BFCTEwCS8qIGNzY29wZSBmaW5kIGNvbW1hbmQgKGxpa2UgdGp1bXApICovCisjZGVmaW5lIERUX0ZSRUUJCTk5CS8qIGZyZWUgY2FjaGVkIG1hdGNoZXMgKi8KIAogLyoKICAqIGZsYWdzIGZvciBmaW5kX3RhZ3MoKS4KZGlmZiAtLWdpdCBhL3NyYy93aW5kb3cuYyBiL3NyYy93aW5kb3cuYwppbmRleCBjYjllMzBhLi44MWZjNGMzIDEwMDY0NAotLS0gYS9zcmMvd2luZG93LmMKKysrIGIvc3JjL3dpbmRvdy5jCkBAIC0xOTU1LDYgKzE5NTUsMTAgQEAKICAgICBmcmFtZV9UCSpmcnA7CiAgICAgd2luX1QJKndwOwogCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgY2xlYXJGb2xkaW5nKHdpbik7CisjZW5kaWYKKwogICAgIC8qIHJlZHVjZSB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRoZSBhcmd1bWVudCBsaXN0LiAqLwogICAgIGFsaXN0X3VubGluayh3aW4tPndfYWxpc3QpOwogCg==