ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2NtZGxpbmUudHh0IGIvcnVudGltZS9kb2MvY21kbGluZS50eHQKaW5kZXggMzE4YzY5OS4uOGFiYjE2YiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvY21kbGluZS50eHQKKysrIGIvcnVudGltZS9kb2MvY21kbGluZS50eHQKQEAgLTgwNSw2ICs4MDUsNyBAQAogCiAJCQkJCQkJICpmaWxlbmFtZS1tb2RpZmllcnMqCiAJICo6XyU6KiAqOjo4KiAqOjpwKiAqOjouKiAqOjp+KiAqOjpoKiAqOjp0KiAqOjpyKiAqOjplKiAqOjpzKiAqOjpncyoKKwkgICAgICAgIColOjgqIColOnAqIColOi4qIColOn4qIColOmgqIColOnQqIColOnIqIColOmUqIColOnMqIColOmdzKgogVGhlIGZpbGUgbmFtZSBtb2RpZmllcnMgY2FuIGJlIHVzZWQgYWZ0ZXIgIiUiLCAiIyIsICIjbiIsICI8Y2ZpbGU+IiwgIjxzZmlsZT4iLAogIjxhZmlsZT4iIG9yICI8YWJ1Zj4iLiAgVGhleSBhcmUgYWxzbyB1c2VkIHdpdGggdGhlIHxmbmFtZW1vZGlmeSgpfCBmdW5jdGlvbi4KIFRoZXNlIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gVmltIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrbW9kaWZ5X2ZuYW1lfApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZXZhbC50eHQgYi9ydW50aW1lL2RvYy9ldmFsLnR4dAppbmRleCA1YjVlOGZhLi4yYTJkNjAxIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9ldmFsLnR4dAorKysgYi9ydW50aW1lL2RvYy9ldmFsLnR4dApAQCAtNjA1Myw2ICs2MDUzLDcgQEAKIG9zZmlsZXR5cGUJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3Igb3NmaWxldHlwZXMgfCtvc2ZpbGV0eXBlfAogcGF0aF9leHRyYQkJQ29tcGlsZWQgd2l0aCB1cC9kb3dud2FyZHMgc2VhcmNoIGluICdwYXRoJyBhbmQgJ3RhZ3MnCiBwZXJsCQkJQ29tcGlsZWQgd2l0aCBQZXJsIGludGVyZmFjZS4KK3BlcnNpc3RlbnRfdW5kbwkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBwZXJzaXN0ZW50IHVuZG8gaGlzdG9yeS4KIHBvc3RzY3JpcHQJCUNvbXBpbGVkIHdpdGggUG9zdFNjcmlwdCBmaWxlIHByaW50aW5nLgogcHJpbnRlcgkJCUNvbXBpbGVkIHdpdGggfDpoYXJkY29weXwgc3VwcG9ydC4KIHByb2ZpbGUJCQlDb21waWxlZCB3aXRoIHw6cHJvZmlsZXwgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0IGIvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKaW5kZXggMGJkZGUzYS4uOWM5ZDU4NCAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKKysrIGIvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKQEAgLTcyMjAsNiArNzIyMCwzMyBAQAogCQkJZ2xvYmFsCiAJQWxpYXMgZm9yICd0ZXJtJywgc2VlIGFib3ZlLgogCisJCQkJCQkqJ3VuZG9kaXInKiAqJ3VkaXInKgorJ3VuZG9kaXInICd1ZGlyJwlzdHJpbmcJKGRlZmF1bHQgIi4iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgd2hlbiBjb21waWxlZCB3aXRoIHRoZSArcGVyc2lzdGVudF91bmRvIGZlYXR1cmV9CisJTGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMgZm9yIHVuZG8gZmlsZXMsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcy4KKwlTZWUgfCdiYWNrdXBkaXInfCBmb3IgdGhlIGZvcm1hdC4gIFNwZWNpZmljYWxseSwgIi4iIG1lYW5zIHVzaW5nIHRoZQorCWRpcmVjdG9yeSBvZiB0aGUgZmlsZS4KKwlXaGVuIHdyaXRpbmc6IFRoZSBmaXJzdCBkaXJlY3RvcnkgdGhhdCBleGlzdHMgaXMgdXNlZC4gIi4iIGFsd2F5cworCXdvcmtzLCBubyBkaXJlY3RvcmllcyBhZnRlciAiLiIgd2lsbCBiZSB1c2VkIGZvciB3cml0aW5nLgorCVdoZW4gcmVhZGluZyBhbGwgZW50cmllcyBhcmUgdHJpZWQgdG8gZmluZCBhbiB1bmRvIGZpbGUuICBUaGUgZmlyc3QKKwl1bmRvIGZpbGUgdGhhdCBleGlzdHMgaXMgdXNlZC4gIFdoZW4gaXQgY2Fubm90IGJlIHJlYWQgYW4gZXJyb3IgaXMKKwlnaXZlbiwgbm8gZnVydGhlciBlbnRyeSBpcyB1c2VkLgorCVNlZSB8dW5kby1wZXJzaXN0ZW5jZXwuCisKKwkJCQkJCSondW5kb2ZpbGUnKiAqJ3VkZicqCisndW5kb2ZpbGUnICd1ZGYnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgd2hlbiBjb21waWxlZCB3aXRoIHRoZSArcGVyc2lzdGVudF91bmRvIGZlYXR1cmV9CisJV2hlbiBvbiwgVmltIGF1dG9tYXRpY2FsbHkgc2F2ZXMgdW5kbyBoaXN0b3J5IHRvIGFuIHVuZG8gZmlsZSB3aGVuCisJd3JpdGluZyBhIGJ1ZmZlciB0byBhIGZpbGUsIGFuZCByZXN0b3JlcyB1bmRvIGhpc3RvcnkgZnJvbSB0aGUgc2FtZQorCWZpbGUgb24gYnVmZmVyIHJlYWQuCisJVGhlIG5hbWUgb2YgdGhlIHVuZG8gZmlsZSBpcyBzcGVjaWZpZWQgYnkgJ3VuZG9kaXInLgorCVNlZSB8dW5kby1wZXJzaXN0ZW5jZXwuCisJV0FSTklORzogdGhpcyBpcyBhIHZlcnkgbmV3IGZlYXR1cmUuICBVc2UgYXQgeW91ciBvd24gcmlzYyEKKwogCQkJCQkJKid1bmRvbGV2ZWxzJyogKid1bCcqCiAndW5kb2xldmVscycgJ3VsJwludW1iZXIJKGRlZmF1bHQgMTAwLCAxMDAwIGZvciBVbml4LCBWTVMsCiAJCQkJCQlXaW4zMiBhbmQgT1MvMikKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RhZ3MgYi9ydW50aW1lL2RvYy90YWdzCmluZGV4IDI1OTkzM2UuLjllMmRhYzUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RhZ3MKKysrIGIvcnVudGltZS9kb2MvdGFncwpAQCAtMTAsNiArMTAsMTYgQEAKICRWSU0tdXNlCXZlcnNpb241LnR4dAkvKiRWSU0tdXNlKgogJFZJTVJVTlRJTUUJc3RhcnRpbmcudHh0CS8qJFZJTVJVTlRJTUUqCiAlCW1vdGlvbi50eHQJLyolKgorJTouCWNtZGxpbmUudHh0CS8qJTouKgorJTo4CWNtZGxpbmUudHh0CS8qJTo4KgorJTplCWNtZGxpbmUudHh0CS8qJTplKgorJTpncwljbWRsaW5lLnR4dAkvKiU6Z3MqCislOmgJY21kbGluZS50eHQJLyolOmgqCislOnAJY21kbGluZS50eHQJLyolOnAqCislOnIJY21kbGluZS50eHQJLyolOnIqCislOnMJY21kbGluZS50eHQJLyolOnMqCislOnQJY21kbGluZS50eHQJLyolOnQqCislOn4JY21kbGluZS50eHQJLyolOn4qCiAmCWNoYW5nZS50eHQJLyomKgogJwltb3Rpb24udHh0CS8qJyoKICcnCW1vdGlvbi50eHQJLyonJyoKQEAgLTEwMDUsNyArMTAxNSwxMSBAQAogJ3R3JwlvcHRpb25zLnR4dAkvKid0dycqCiAndHgnCW9wdGlvbnMudHh0CS8qJ3R4JyoKICd1YycJb3B0aW9ucy50eHQJLyondWMnKgorJ3VkZicJb3B0aW9ucy50eHQJLyondWRmJyoKKyd1ZGlyJwlvcHRpb25zLnR4dAkvKid1ZGlyJyoKICd1bCcJb3B0aW9ucy50eHQJLyondWwnKgorJ3VuZG9kaXInCW9wdGlvbnMudHh0CS8qJ3VuZG9kaXInKgorJ3VuZG9maWxlJwlvcHRpb25zLnR4dAkvKid1bmRvZmlsZScqCiAndW5kb2xldmVscycJb3B0aW9ucy50eHQJLyondW5kb2xldmVscycqCiAndXBkYXRlY291bnQnCW9wdGlvbnMudHh0CS8qJ3VwZGF0ZWNvdW50JyoKICd1cGRhdGV0aW1lJwlvcHRpb25zLnR4dAkvKid1cGRhdGV0aW1lJyoKQEAgLTExNjMsNiArMTE3Nyw3IEBACiArcGF0aF9leHRyYQl2YXJpb3VzLnR4dAkvKitwYXRoX2V4dHJhKgogK3BlcmwJdmFyaW91cy50eHQJLyorcGVybCoKICtwZXJsL2R5bgl2YXJpb3VzLnR4dAkvKitwZXJsXC9keW4qCisrcGVyc2lzdGVudF91bmRvCXZhcmlvdXMudHh0CS8qK3BlcnNpc3RlbnRfdW5kbyoKICtwb3N0c2NyaXB0CXZhcmlvdXMudHh0CS8qK3Bvc3RzY3JpcHQqCiArcHJpbnRlcgl2YXJpb3VzLnR4dAkvKitwcmludGVyKgogK3Byb2ZpbGUJdmFyaW91cy50eHQJLyorcHJvZmlsZSoKQEAgLTI1ODIsNiArMjU5Nyw3IEBACiA6cnVieWRvCWlmX3J1YnkudHh0CS8qOnJ1YnlkbyoKIDpydWJ5ZglpZl9ydWJ5LnR4dAkvKjpydWJ5ZioKIDpydWJ5ZmlsZQlpZl9ydWJ5LnR4dAkvKjpydWJ5ZmlsZSoKKzpydW5kbwl1bmRvLnR4dAkvKjpydW5kbyoKIDpydW50aW1lCXJlcGVhdC50eHQJLyo6cnVudGltZSoKIDpydglzdGFydGluZy50eHQJLyo6cnYqCiA6cnZpbWluZm8Jc3RhcnRpbmcudHh0CS8qOnJ2aW1pbmZvKgpAQCAtMjk2NCw2ICsyOTgwLDcgQEAKIDp3cml0ZV9mCWVkaXRpbmcudHh0CS8qOndyaXRlX2YqCiA6d3MJd29ya3Nob3AudHh0CS8qOndzKgogOndzdmVyYgl3b3Jrc2hvcC50eHQJLyo6d3N2ZXJiKgorOnd1bmRvCXVuZG8udHh0CS8qOnd1bmRvKgogOnd2CXN0YXJ0aW5nLnR4dAkvKjp3dioKIDp3dmltaW5mbwlzdGFydGluZy50eHQJLyo6d3ZpbWluZm8qCiA6eAllZGl0aW5nLnR4dAkvKjp4KgpAQCAtNjkxMyw2ICs2OTMwLDcgQEAKIHBlcmwtcGF0dGVybnMJcGF0dGVybi50eHQJLypwZXJsLXBhdHRlcm5zKgogcGVybC11c2luZwlpZl9wZXJsLnR4dAkvKnBlcmwtdXNpbmcqCiBwZXJsLnZpbQlzeW50YXgudHh0CS8qcGVybC52aW0qCitwZXJzaXN0ZW50LXVuZG8JdW5kby50eHQJLypwZXJzaXN0ZW50LXVuZG8qCiBwZXhwci1vcHRpb24JcHJpbnQudHh0CS8qcGV4cHItb3B0aW9uKgogcGZuLW9wdGlvbglwcmludC50eHQJLypwZm4tb3B0aW9uKgogcGhlYWRlci1vcHRpb24JcHJpbnQudHh0CS8qcGhlYWRlci1vcHRpb24qCkBAIC03ODM1LDYgKzc4NTMsNyBAQAogdW5kby1ibG9ja3MJdW5kby50eHQJLyp1bmRvLWJsb2NrcyoKIHVuZG8tYnJhbmNoZXMJdW5kby50eHQJLyp1bmRvLWJyYW5jaGVzKgogdW5kby1jb21tYW5kcwl1bmRvLnR4dAkvKnVuZG8tY29tbWFuZHMqCit1bmRvLXBlcnNpc3RlbmNlCXVuZG8udHh0CS8qdW5kby1wZXJzaXN0ZW5jZSoKIHVuZG8tcmVkbwl1bmRvLnR4dAkvKnVuZG8tcmVkbyoKIHVuZG8tcmVtYXJrcwl1bmRvLnR4dAkvKnVuZG8tcmVtYXJrcyoKIHVuZG8tdHJlZQl1bmRvLnR4dAkvKnVuZG8tdHJlZSoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RvZG8udHh0IGIvcnVudGltZS9kb2MvdG9kby50eHQKaW5kZXggYTEwOWMyZS4uNDlmYzcwYSAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvdG9kby50eHQKKysrIGIvcnVudGltZS9kb2MvdG9kby50eHQKQEAgLTMwLDYgKzMwLDkgQEAKIAkJCQkJCQkqa25vd24tYnVncyoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEtub3duIGJ1Z3MgYW5kIGN1cnJlbnQgd29yayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGVuIFZpbSBjcmFzaGVzIGl0IG1heSBydW4gb3V0IG9mIHN0YWNrIHdoaWxlIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMuICBQYXRjaAordG8gbm90IHJ1biBhdXRvY29tbWFuZHMgd2hlbiBsZWF2aW5nIFZpbT8gKEphbWVzIFZlZ2EsIDIwMTAgTWF5IDIzKQorCiBDdXJzb3IgcG9zaXRpb25pbmcgd3Jvbmcgd2l0aCAweDIwMGUgY2hhcmFjdGVyLiAoSm9obiBCZWNrZXQsIDIwMTAgTWF5IDYpCiAKIEUzMTUgd2hlbiB0cnlpbmcgdG8gY2hhbmdlIGEgZmlsZSBpbiBGaWxlQ2hhbmdlZFJPIGF1dG9jb21tYW5kIGV2ZW50LgpAQCAtMTA4Miw2ICsxMDg1LDE4IEBACiAKIFZpbSA3LjM6CiBQYXRjaGVzIHRvIGluY2x1ZGU6Cis4ICAgUGVyc2lzdGVudCB1bmRvIGJ1Z3MgLyBmaXhlczoKKyAgICAtIEFkZCB0ZXN0cy4gIEFsc28gd2l0aCBkaWZmZXJlbnQgJ2VuYycKKyAgICAtIEFkZCB1bmRvZmlsZShuYW1lKTogZ2V0IHVuZG8gZmlsZSBuYW1lIGZvciBidWZmZXIgIm5hbWUiLgorLSBFeHRlbmQgdGVzdDYyIGZvciBnZXR0YWJ2YXIoKSBhbmQgc2V0dGFidmFyKCkuIChZZWdhcHBhbiBMYWtzaG1hbmFuLCAyMDEwCisgIE1heSAyMykKKy0gQWxzbyBjcnlwdCB0aGUgdW5kbyBmaWxlLgorLSBBbHNvIGNyeXB0IHRoZSBzd2FwIGZpbGUsIGVhY2ggYmxvY2sgc2VwYXJhdGVseS4gIENoYW5nZSBtZl93cml0ZSgpIGFuZAorICAgIG1mX3JlYWQoKS4gIEhvdyB0byBnZXQgYl9wX2tleSB0byB0aGVzZSBmdW5jdGlvbnM/CistIERvIHByb2ZpbGluZyBvbiBzaGEyNTYgY29kZSB0byBmaW5kIG9idmlvdXMgYm90dGxlbmVja3MuCistIERvIHByb2ZpbGluZyBvbiBjcnlwdCBjb2RlIHRvIGZpbmQgb2J2aW91cyBib3R0bGVuZWNrcy4KKy0gVXNlIG9mZl90IGluc3RlYWQgb2YgbG9uZyBmb3IgYnl0ZXMgaW4gYSBidWZmZXIuIChKYW1lcyBWZWdhLCAyMDEwIE1heSAyMiwKKyAgdXBkYXRlIG5leHQgZGF5KQogLSBJbmNsdWRlIGNvbmNlYWwgcGF0Y2g/CiAgIGh0dHA6Ly92aW5jZS5uZWdyaS5nb29nbGVwYWdlcy5jb20vCiAgIGh0dHA6Ly92aW0ud2lraWEuY29tL3dpa2kvUGF0Y2hfdG9fY29uY2VhbF9wYXJ0c19vZl9saW5lcwpAQCAtMTE1MCw0MiArMTE2NSwxNyBAQAogICBOZWVkcyBzb21lIG1vcmUgdGVzdGluZy4KICAgVXBkYXRlIDIwMTAgQXByIDIwLCBwYXRjaCBieSBBbmR5IEtpdHRuZXIsIE1heSAxNgogLSAgIEVhc2llci9zdGFuZGFyZCB3YXkgdG8gZGlzYWJsZSBkZWZhdWx0IHBsdWdpbnMuCi04ICAgUGVyc2lzdGVudCB1bmRvOiBzdG9yZSB1bmRvIGluIGEgZmlsZS4gIFBhdGNoIGJ5IEpvcmRhbiBMZXdpcywgMjAwOSBGZWIKLSAgICAyMC4gIFJlcG9zdCAyMDA5IE5vdiAxNi4KLSAgICBHZXQgdGFyIGZpbGUgZnJvbTogaHR0cDovL3JlcG8ub3IuY3ovdy92aW1fZXh0ZW5kZWQuZ2l0L3RyZWUvZmVhdC9wZXJzaXN0ZW50LXVuZG8KLSAgICAtPiBkaXNhYmxlIGJ5IGRlZmF1bHQgYW5kIGFkZCByZW1hcmsgdGhhdCBpdCdzIG5ldyBhbmQgbWF5IGZhaWwuCi0gICAgVGVzdGluZyByZW1hcmtzIGJ5IENocmlzdGlhbiBCcmFiYW5kdCwgMjAxMCBNYXkgMToKLQktIGRvZXNuJ3Qgd29yayB3ZWxsIHdpdGggc3ltbGlua3MgKEpvcmRhbiB3aWxsIGxvb2sgaW50byBpdCkKLQktIG9sZCB1bmRvIGZpbGVzIHRlbmQgdG8gcGlsZSB1cAotICAgICAgICAtIDpydW5kbyBzaG91bGQgb3V0cHV0IGEgbWVzc2FnZSAoSm9yZGFuIHdpbGwgZml4IHRoaXMpCi0gICAgQnVncyAvIGZpeGVzOgotICAgIC0gVW5kbyBmaWxlIHNob3VsZCBiZSBzdG9yZWQgd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSBieSBkZWZhdWx0LCB0aGUgdW5kbwotICAgICAgZGlyZWN0b3J5IGRvZXNuJ3QgaGFuZGxlIHJlbW90ZSBmaWxlcyBvciBkaXJlY3RvcnkgcmVuYW1lcy4KLSAgICAgIFVzZSBzYW1lIG1lY2hhbmlzbSBhcyBmb3Igc3dhcCBmaWxlcz8gIEJ1dCBvbmx5IHdpdGggb25lIGZpbGUgbmFtZS4KLSAgICAtIFJlYWQgY29sYWRkIGRlcGVuZGluZyBvbiBGRUFUX1ZJUlRVQUxFRElULCBzaG91bGQgYWx3YXlzIHJlYWQvd3JpdGUgaXQKLSAgICAtIGludm9rZSB1X3d1bmRvKCkgaW5zaWRlIGJ1Zl93cml0ZSgpCi0gICAgLSBpbnZva2UgdV9ydW5kbygpIGluc2lkZSByZWFkZmlsZSgpCi0gICAgLSBEb2N1bWVudCB0aGF0ICI6d3VuZG8iIGFuZCAiOnJ1bmRvIiBzaG91bGQgb25seSBiZSB1c2VkIGluIGF1dG9jb21tYW5kcy4KLSAgICAtIHVuc2VyaWFsaXplX3BvcygpIGRvZXMgbm90IG5lZWQgYSByZXR1cm4gdmFsdWUKLSAgICAtIGZ1bmN0aW9uIGNvbW1lbnRzIGdvIGJlZm9yZSB0aGUgZnVuY3Rpb24sIG5vdCBpbnNpZGUKLSAgICAtIHVfZ2V0X3VuZG9maWxlKCkgY2hhbmdlcyBpdHMgYXJndW1lbnQgZmZuYW1lCi0gICAgLSBtYWtlIG1hZ2ljIGZvdXIgYnl0ZXMuCi0gICAgLSBlcnJvcnMgbmVlZCBudW1iZXJzICJFMDAwOiIKLSAgICAtIGFsc28gcHV0ICdlbmMnIGluIHVuZG8gZmlsZS4KLSAgICAtIGRvbid0IHVzZSB0aW1lc3RhbXAsICJ0b3VjaCBmaWxlIiBvciBkaXIgY29weSBtYXkgY2hhbmdlIGl0IGFuZCB1bmRvCi0gICAgICBzdGlsbCB3b3Jrcy4KLSAgICBPbGRlciBpZGVhczoKLSAgICAtIFVzZSB0aW1lc3RhbXBzLCBzbyB0aGF0IGEgdmVyc2lvbiBhIGNlcnRhaW4gdGltZSBhZ28gY2FuIGJlIGZvdW5kIGFuZAotICAgICAgaW5mbyBiZWZvcmUgc29tZSB0aW1lL2RhdGUgY2FuIGJlIGZsdXNoZWQuICd1bmRvcGVyc2lzdCcgZ2l2ZXMgbWF4aW11bQotICAgICAgdGltZSB0byBrZWVwIHVuZG86ICIzaCIsICIxZCIsICIydyIsICIxeSIsIGV0Yy4gIEZvciB0aGUgZmlsZSB1c2UgZG90Ci0gICAgICBhbmQgZXh0ZW5zaW9uOiAiLmZpbGVuYW1lLnVufiIgKGxpa2Ugc3dhcGZpbGUgYnV0ICJ1bn4iIGluc3RlYWQgb2YKLSAgICAgICJzd3AiKS4KIC0gICAiOntyYW5nZX1zb3VyY2UiOiBzb3VyY2UgdGhlIGxpbmVzIGZyb20gdGhlIGN1cnJlbnQgZmlsZS4KIAlZb3UgY2FuIGFscmVhZHkgeWFuayBsaW5lcyBhbmQgdXNlIDpAIiB0byBleGVjdXRlIHRoZW0uCiAJTW9zdCBvZiBkb19zb3VyY2UoKSB3b3VsZCBub3QgYmUgdXNlZCwgbmVlZCBhIG5ldyBmdW5jdGlvbi4KIAlJdCdzIGVhc3kgd2hlbiBub3QgZG9pbmcgYnJlYWtwb2ludHMgb3IgcHJvZmlsaW5nLgorUHJvYmFibHkgbm90IG5vdzoKKy0gVXNlIHRpbWVzdGFtcHMgZm9yIHVuZG8sIHNvIHRoYXQgYSB2ZXJzaW9uIGEgY2VydGFpbiB0aW1lIGFnbyBjYW4gYmUgZm91bmQKKyAgYW5kIGluZm8gYmVmb3JlIHNvbWUgdGltZS9kYXRlIGNhbiBiZSBmbHVzaGVkLiAndW5kb3BlcnNpc3QnIGdpdmVzIG1heGltdW0KKyAgdGltZSB0byBrZWVwIHVuZG86ICIzaCIsICIxZCIsICIydyIsICIxeSIsIGV0Yy4KIEJlZm9yZSAoYmV0YSkgcmVsZWFzZToKIC0gQWRkIGZpeGVzIGZvciA3LjIgdG8gdmVyc2lvbjcudHh0CistIFJlbmFtZSB2aW03MyBicmFuY2ggdG8gZGVmYXVsdCAoaGludHM6IFhhdmllciBkZSBHYXllLCAyMDEwIE1heSAyMykKIAogCiBNb3JlIHBhdGNoZXM6CkBAIC0xMjkyLDcgKzEyODIsNiBAQAogICAgIHRvIGxlZnQgYXMgd2VsbD8gIFNlZSBwYXRjaCBvZiBEZWMgMjYuIChOYWRpbSBTaGFpa2xpKQogOCAgIE9wdGlvbiB0byBsb2NrIGFsbCB1c2VkIG1lbW9yeSBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IHN3YXBwZWQgdG8gZGlzawogICAgICh1bmNyeXB0ZWQpLiAgUGF0Y2ggYnkgSmFzb24gSG9sdCwgMjAwMyBNYXkgMjMuICBVc2VzIG1sb2NrLgotNyAgIFN1cHBvcnQgYSBzdHJvbmdlciBlbmNyeXB0aW9uLiAgSmFzb24gSG9sdCBpbXBsZW1lbnRlZCBBRVMgKE1heSA2IDIwMDMpLgogNyAgIEFkZCAhIHJlZ2lzdGVyLCBmb3Igc2hlbGwgY29tbWFuZHMuIChwYXRjaCBmcm9tIEdyZW5pZSkKIDggICBJbiB0aGUgZ3ppcCBwbHVnaW4sIGFsc28gcmVjb2duaXplICouZ3oub3JpZywgKi5nei5iYWssIGV0Yy4gIExpa2UgaXQncwogICAgIGRvbmUgZm9yIGZpbGV0eXBlIGRldGVjdGlvbi4gIFBhdGNoIGZyb20gV2FsdGVyIEJyaXNjb2UsIDIwMDMgSnVsIDEuCkBAIC00MzIwLDExICs0MzA5LDYgQEAKIC0gICBXaGVuIG1vdXNlIGNsaWNrIGFmdGVyICdyJyBjb21tYW5kLCBnZXQgY2hhcmFjdGVyIHRoYXQgd2FzIHBvaW50ZWQgdG8uCiAKIAotQ3J5cHQgYW5kIHNlY3VyaXR5OgotOCAgIEFsc28gY3J5cHQgdGhlIHN3YXBmaWxlLCBlYWNoIGJsb2NrIHNlcGFyYXRlbHkuICBDaGFuZ2UgbWZfd3JpdGUoKSBhbmQKLSAgICBtZl9yZWFkKCkuICBIb3cgdG8gZ2V0IGJfcF9rZXkgdG8gdGhlc2UgZnVuY3Rpb25zPwotCi0KIEFyZ3VtZW50IGxpc3Q6CiA2ICAgQWRkIGNvbW1hbmQgdG8gcHV0IGFsbCBmaWxlbmFtZXMgZnJvbSB0aGUgdGFnIGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0LgogICAgIFdoZW4gZ2l2ZW4gYW4gYXJndW1lbnQsIG9ubHkgdXNlIHRoZSBmaWxlcyB3aGVyZSB0aGF0IGFyZ3VtZW50IG1hdGNoZXMKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3VuZG8udHh0IGIvcnVudGltZS9kb2MvdW5kby50eHQKaW5kZXggMmM4YzYwYy4uMDVlNTU1NSAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvdW5kby50eHQKKysrIGIvcnVudGltZS9kb2MvdW5kby50eHQKQEAgLTEyLDcgKzEyLDggQEAKIDIuIFR3byB3YXlzIG9mIHVuZG8JCXx1bmRvLXR3by13YXlzfAogMy4gVW5kbyBibG9ja3MJCQl8dW5kby1ibG9ja3N8CiA0LiBVbmRvIGJyYW5jaGVzCQl8dW5kby1icmFuY2hlc3wKLTUuIFJlbWFya3MgYWJvdXQgdW5kbwkJfHVuZG8tcmVtYXJrc3wKKzUuIFVuZG8gcGVyc2lzdGVuY2UJCXx1bmRvLXBlcnNpc3RlbmNlfAorNi4gUmVtYXJrcyBhYm91dCB1bmRvCQl8dW5kby1yZW1hcmtzfAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDEuIFVuZG8gYW5kIHJlZG8gY29tbWFuZHMJCQkJKnVuZG8tY29tbWFuZHMqCkBAIC0yMiw3ICsyMyw3IEBACiAKIAkJCQkJCQkqOnUqICo6dW4qICo6dW5kbyoKIDp1W25kb10JCQlVbmRvIG9uZSBjaGFuZ2UuICB7Vmk6IG9ubHkgb25lIGxldmVsfQotCisJCQkJCQkJCSpFODMwKgogOnVbbmRvXSB7Tn0JCUp1bXAgdG8gYWZ0ZXIgY2hhbmdlIG51bWJlciB7Tn0uICBTZWUgfHVuZG8tYnJhbmNoZXN8CiAJCQlmb3IgdGhlIG1lYW5pbmcgb2Yge059LiAge25vdCBpbiBWaX0KIApAQCAtMTA5LDYgKzExMCw4IEBACiBUbyBkbyB0aGUgb3Bwb3NpdGUsIGJyZWFrIGEgY2hhbmdlIGludG8gdHdvIHVuZG8gYmxvY2tzLCBpbiBJbnNlcnQgbW9kZSB1c2UKIENUUkwtRyB1LiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgYW4gaW5zZXJ0IGNvbW1hbmQgdG8gYmUgdW5kb2FibGUgaW4KIHBhcnRzLiAgRS5nLiwgZm9yIGVhY2ggc2VudGVuY2UuICB8aV9DVFJMLUdfdXwKK1NldHRpbmcgdGhlIHZhbHVlIG9mICd1bmRvbGV2ZWxzJyBhbHNvIGJyZWFrcyB1bmRvLiAgRXZlbiB3aGVuIHRoZSBuZXcgdmFsdWUKK2lzIGVxdWFsIHRvIHRoZSBvbGQgdmFsdWUuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogNC4gVW5kbyBicmFuY2hlcwkJCQkqdW5kby1icmFuY2hlcyogKnVuZG8tdHJlZSoKQEAgLTIwMSw3ICsyMDQsODggQEAKIHdoaWxlIHJlcGVhdGluZyAiZy0iIGFuZCAiZysiIGRvZXMuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotNS4gUmVtYXJrcyBhYm91dCB1bmRvCQkJCQkqdW5kby1yZW1hcmtzKgorNS4gVW5kbyBwZXJzaXN0ZW5jZQkJKnVuZG8tcGVyc2lzdGVuY2UqICpwZXJzaXN0ZW50LXVuZG8qCisKK1doZW4gdW5sb2FkaW5nIGEgYnVmZmVyIFZpbSBub3JtYWxseSBkZXN0cm95cyB0aGUgdHJlZSBvZiB1bmRvcyBjcmVhdGVkIGZvcgordGhhdCBidWZmZXIuICBCeSBzZXR0aW5nIHRoZSAndW5kb2ZpbGUnIG9wdGlvbiwgVmltIHdpbGwgYXV0b21hdGljYWxseSBzYXZlCit5b3VyIHVuZG8gaGlzdG9yeSB3aGVuIHlvdSB3cml0ZSBhIGZpbGUgYW5kIHJlc3RvcmUgdW5kbyBoaXN0b3J5IHdoZW4geW91IGVkaXQKK3RoZSBmaWxlIGFnYWluLgorCitUaGUgJ3VuZG9maWxlJyBvcHRpb24gaXMgY2hlY2tlZCBhZnRlciB3cml0aW5nIGEgZmlsZSwgYmVmb3JlIHRoZSBCdWZXcml0ZVBvc3QKK2F1dG9jb21tYW5kcy4gIElmIHlvdSB3YW50IHRvIGNvbnRyb2wgd2hhdCBmaWxlcyB0byB3cml0ZSB1bmRvIGluZm9ybWF0aW9uCitmb3IsIHlvdSBjYW4gdXNlIGEgQnVmV3JpdGVQcmUgYXV0b2NvbW1hbmQ6ID4KKwlhdSBCdWZXcml0ZVByZSAvdG1wLyogc2V0bG9jYWwgbm91bmRvZmlsZQorCitWaW0gc2F2ZXMgdW5kbyB0cmVlcyBpbiBhIHNlcGFyYXRlIHVuZG8gZmlsZSwgb25lIGZvciBlYWNoIGVkaXRlZCBmaWxlLCB1c2luZworYSBzaW1wbGUgc2NoZW1lIHRoYXQgbWFwcyBmaWxlc3lzdGVtIHBhdGhzIGRpcmVjdGx5IHRvIHVuZG8gZmlsZXMuIFZpbSB3aWxsCitkZXRlY3QgaWYgYW4gdW5kbyBmaWxlIGlzIG5vIGxvbmdlciBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZmlsZSBpdCB3YXMgd3JpdHRlbgorZm9yICh3aXRoIGEgaGFzaCBvZiB0aGUgZmlsZSBjb250ZW50cykgYW5kIGlnbm9yZSBpdCB3aGVuIHRoZSBmaWxlIHdhcyBjaGFuZ2VkCithZnRlciB0aGUgdW5kbyBmaWxlIHdhcyB3cml0dGVuLCB0byBwcmV2ZW50IGNvcnJ1cHRpb24uCisKK1VuZG8gZmlsZXMgYXJlIG5vcm1hbGx5IHNhdmVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgZmlsZS4gIFRoaXMgY2FuIGJlCitjaGFuZ2VkIHdpdGggdGhlICd1bmRvZGlyJyBvcHRpb24uCisKK1lvdSBjYW4gYWxzbyBzYXZlIGFuZCByZXN0b3JlIHVuZG8gaGlzdG9yaWVzIGJ5IHVzaW5nICI6d3VuZG8iIGFuZCAiOnJ1bmRvIgorcmVzcGVjdGl2ZWx5OgorCQkJCQkJCSo6d3VuZG8qICo6cnVuZG8qCis6d3VuZG9bIV0ge2ZpbGV9CisJCVdyaXRlIHVuZG8gaGlzdG9yeSB0byB7ZmlsZX0uCisJCVdoZW4ge2ZpbGV9IGV4aXN0cyBhbmQgaXQgZG9lcyBub3QgbG9vayBsaWtlIGFuIHVuZG8gZmlsZQorCQkodGhlIG1hZ2ljIG51bWJlciBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgaXMgd3JvbmcpLCB0aGVuCisJCXRoaXMgZmFpbHMsIHVubGVzcyB0aGUgISB3YXMgYWRkZWQuCisJCUlmIGl0IGV4aXN0cyBhbmQgZG9lcyBsb29rIGxpa2UgYW4gdW5kbyBmaWxlIGl0IGlzCisJCW92ZXJ3cml0dGVuLgorCQl7bm90IGluIFZpfQorCis6cnVuZG8ge2ZpbGV9CVJlYWQgdW5kbyBoaXN0b3J5IGZyb20ge2ZpbGV9LgorCQl7bm90IGluIFZpfQorCitZb3UgY2FuIHVzZSB0aGVzZSBpbiBhdXRvY29tbWFuZHMgdG8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZQoraGlzdG9yeSBmaWxlLiAgRS5nLjogPgorCisJYXUgQnVmUmVhZFBvc3QgKiBydW5kbyAlOmgvVU5ETy8lOnQKKwlhdSBCdWZXcml0ZVBvc3QgKiB3dW5kbyAlOmgvVU5ETy8lOnQKKworWW91IHNob3VsZCBrZWVwICd1bmRvZmlsZScgb2ZmLCBvdGhlcndpc2UgeW91IGVuZCB1cCB3aXRoIHR3byB1bmRvIGZpbGVzIGZvcgorZXZlcnkgd3JpdGUuCitOb3RlOiBJIGRpZCBub3QgdmVyaWZ5IHRoaXMgYWx3YXlzIHdvcmtzIQorCitOb3RlIHRoYXQgd2hpbGUgcmVhZGluZy93cml0aW5nIGZpbGVzIGFuZCAndW5kb2ZpbGUnIGlzIHNldCBtb3N0IGVycm9ycyB3aWxsCitiZSBzaWxlbnQsIHVubGVzcyAndmVyYm9zZScgaXMgc2V0LiAgV2l0aCA6d3VuZG8gYW5kIDpydW5kbyB5b3Ugd2lsbCBnZXQgbW9yZQorZXJyb3IgbWVzc2FnZXMsIGUuZy4sIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHJlYWQgb3Igd3JpdHRlbi4KKworTk9URTogdW5kbyBmaWxlcyBhcmUgbmV2ZXIgZGVsZXRlZCBieSBWaW0uICBZb3UgbmVlZCB0byBkZWxldGUgdGhlbSB5b3Vyc2VsZi4KKworUmVhZGluZyBhbiBleGlzdGluZyB1bmRvIGZpbGUgbWF5IGZhaWwgZm9yIHNldmVyYWwgcmVhc29uczoKKypFODIyKglJdCBjYW5ub3QgYmUgb3BlbmVkLCBiZWNhdXNlIHRoZSBmaWxlIHBlcm1pc3Npb25zIGRvbid0IGFsbG93IGl0LgorKkU4MjMqCVRoZSBtYWdpYyBudW1iZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIGRvZXNuJ3QgbWF0Y2guICBUaGlzIHVzdWFsbHkKKwltZWFucyBpdCBpcyBub3QgYW4gdW5kbyBmaWxlLgorKkU4MjQqCVRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgdW5kbyBmaWxlIGluZGljYXRlcyB0aGF0IGl0J3Mgd3JpdHRlbiBieSBhCisJbmV3ZXIgdmVyc2lvbiBvZiBWaW0uICBZb3UgbmVlZCB0aGF0IG5ld2VyIHZlcnNpb24gdG8gb3BlbiBpdC4gIERvbid0CisJd3JpdGUgdGhlIGJ1ZmZlciBpZiB5b3Ugd2FudCB0byBrZWVwIHRoZSB1bmRvIGluZm8gaW4gdGhlIGZpbGUuCisiVW5kbyBmaWxlIGNvbnRlbnRzIGNoYW5nZWQiCisJVGhlIGZpbGUgdGV4dCBkaWZmZXJzIGZyb20gd2hlbiB0aGUgdW5kbyBmaWxlIHdhcyB3cml0dGVuLiAgVGhpcyBtZWFucworCXRoZSB1bmRvIGZpbGUgY2Fubm90IGJlIHVzZWQsIGl0IHdvdWxkIGNvcnJ1cHQgdGhlIHRleHQuCisqRTgyNSogKkU4MjYqCVRoZSB1bmRvIGZpbGUgZG9lcyBub3QgY29udGFpbiB2YWxpZCBjb250ZW50cyBhbmQgY2Fubm90IGJlCisJdXNlZC4KKypFODI3KglUaGUgbWFnaWMgbnVtYmVyIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgd2FzIG5vdCBmb3VuZC4gIFRoaXMgdXN1YWxseQorCW1lYW5zIHRoZSBmaWxlIHdhcyB0cnVuY2F0ZWQuCisKK1dyaXRpbmcgYW4gdW5kbyBmaWxlIG1heSBmYWlsIGZvciB0aGVzZSByZWFzb25zOgorKkU4MjgqCVRoZSBmaWxlIHRvIGJlIHdyaXR0ZW4gY2Fubm90IGJlIGNyZWF0ZWQuICBQZXJoYXBzIHlvdSBkbyBub3QgaGF2ZQorCXdyaXRlIHBlcm1pc3Npb25zIGluIHRoZSBkaXJlY3RvcnkuCisiV2lsbCBub3Qgb3ZlcndyaXRlIHdpdGggdW5kbyBmaWxlLCBjYW5ub3QgcmVhZCIKKwlBIGZpbGUgZXhpc3RzIHdpdGggdGhlIG5hbWUgb2YgdGhlIHVuZG8gZmlsZSB0byBiZSB3cml0dGVuLCBidXQgaXQKKwljYW5ub3QgYmUgcmVhZC4gIFlvdSBtYXkgd2FudCB0byBkZWxldGUgdGhpcyBmaWxlIG9yIHJlbmFtZSBpdC4KKyJXaWxsIG5vdCBvdmVyd3JpdGUsIHRoaXMgaXMgbm90IGFuIHVuZG8gZmlsZSIKKwlBIGZpbGUgZXhpc3RzIHdpdGggdGhlIG5hbWUgb2YgdGhlIHVuZG8gZmlsZSB0byBiZSB3cml0dGVuLCBidXQgaXQKKwlkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSByaWdodCBtYWdpYyBudW1iZXIuICBZb3UgbWF5IHdhbnQgdG8gZGVsZXRlCisJdGhpcyBmaWxlIG9yIHJlbmFtZSBpdC4KKypFODI5KglBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB3cml0aW5nIHRoZSB1bmRvIGZpbGUuICBZb3UgbWF5IHdhbnQgdG8gdHJ5CisJYWdhaW4uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gUmVtYXJrcyBhYm91dCB1bmRvCQkJCQkqdW5kby1yZW1hcmtzKgogCiBUaGUgbnVtYmVyIG9mIGNoYW5nZXMgdGhhdCBhcmUgcmVtZW1iZXJlZCBpcyBzZXQgd2l0aCB0aGUgJ3VuZG9sZXZlbHMnIG9wdGlvbi4KIElmIGl0IGlzIHplcm8sIHRoZSBWaS1jb21wYXRpYmxlIHdheSBpcyBhbHdheXMgdXNlZC4gIElmIGl0IGlzIG5lZ2F0aXZlIG5vCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92YXJpb3VzLnR4dCBiL3J1bnRpbWUvZG9jL3ZhcmlvdXMudHh0CmluZGV4IGNmYWRmZDYuLjY1Njg4ZWUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3ZhcmlvdXMudHh0CisrKyBiL3J1bnRpbWUvZG9jL3ZhcmlvdXMudHh0CkBAIC0zNTksNiArMzU5LDcgQEAKIE4gICorcGF0aF9leHRyYSoJVXAvZG93bndhcmRzIHNlYXJjaCBpbiAncGF0aCcgYW5kICd0YWdzJwogbSAgKitwZXJsKgkJUGVybCBpbnRlcmZhY2UgfHBlcmx8CiBtICAqK3BlcmwvZHluKgkJUGVybCBpbnRlcmZhY2UgfHBlcmwtZHluYW1pY3wgfC9keW58CitIICAqK3BlcnNpc3RlbnRfdW5kbyoJUGVyc2lzdGVudCB1bmRvIHx1bmRvLXBlcnNpc3RlbmNlfAogICAgKitwb3N0c2NyaXB0Kgl8OmhhcmRjb3B5fCB3cml0ZXMgYSBQb3N0U2NyaXB0IGZpbGUKIE4gICorcHJpbnRlcioJCXw6aGFyZGNvcHl8IGNvbW1hbmQKIEggICorcHJvZmlsZSoJCXw6cHJvZmlsZXwgY29tbWFuZApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0IGIvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0CmluZGV4IGE2ZTFmNjEuLmQ1OWI2MjIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dAorKysgYi9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQKQEAgLTcxNzAsNiArNzE3MCwxMCBAQAogQWRkZWQJCQkJCQkJKmFkZGVkLTcuMyoKIC0tLS0tCiAKK1BlcnNpc3RlbnQgdW5kbzogc3RvcmUgdW5kbyBpbmZvcm1hdGlvbiBpbiBhIGZpbGUuICBDYW4gdW5kbyB0byBiZWZvcmUgd2hlbgordGhlIGZpbGUgd2FzIHJlYWQsIGFsc28gZm9yIHVubG9hZGVkIGJ1ZmZlcnMuIHx1bmRvLXBlcnNpc3RlbmNlfAorKHBhcnRseSBieSBKb3JkYW4gTGV3aXMpCisKIEFkZGVkIHRoZSAncmVsYXRpdmVudW1iZXInIG9wdGlvbi4gKE1hcmt1cyBIZWlkZWxiZXJnKQogCiBTdXBwb3J0IGZvciBCbG93ZmlzaCBlbmNyeXB0aW9uLiAgQWRkZWQgdGhlICdjcnlwdG1ldGhvZCcgb3B0aW9uLgpkaWZmIC0tZ2l0IGEvcnVudGltZS9vcHR3aW4udmltIGIvcnVudGltZS9vcHR3aW4udmltCmluZGV4IDA2YTc2NjIuLjBhY2U0Y2MgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvb3B0d2luLnZpbQorKysgYi9ydW50aW1lL29wdHdpbi52aW0KQEAgLTEwMzIsNiArMTAzMiwxMCBAQAogICBjYWxsIGFwcGVuZCgiJCIsICJjbWR3aW5oZWlnaHRcdGhlaWdodCBvZiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdyIpCiAgIGNhbGwgPFNJRD5PcHRpb25HKCJjd2giLCAmY3doKQogZW5kaWYKK2NhbGwgYXBwZW5kKCIkIiwgInVuZG9maWxlXHRhdXRvbWF0aWNhbGx5IHNhdmUgYW5kIHJlc3RvcmUgdW5kbyBoaXN0b3J5IikKK2NhbGwgPFNJRD5CaW5PcHRpb25HKCJ1ZGYiLCAmdWRmKQorY2FsbCBhcHBlbmQoIiQiLCAidW5kb2Rpclx0bGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgdW5kbyBmaWxlcyIpCitjYWxsIDxTSUQ+T3B0aW9uRygidWRpciIsICZ1ZGlyKQogCiAKIGNhbGwgPFNJRD5IZWFkZXIoImV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcyIpCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLml0IGIvcnVudGltZS90dXRvci90dXRvci5pdAppbmRleCBiMWY2Nzk4Li42OWU4M2ViIDEwMDY0NAotLS0gYS9ydW50aW1lL3R1dG9yL3R1dG9yLml0CisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuaXQKQEAgLTI4OCw3ICsyODgsNyBAQAogCiAgIDIuIEJhdHRpICBkMncgIHBlciBjYW5jZWxsYXJlIGxlIGR1ZSBwYXJvbGUgTUFJVVNDT0xFCiAKLSAgMy4gUmlwZXRpIGkgcGFzc2kgMSBlIDIgY29uIHVuIGNvbnRhdG9yZSBkaXZlcnNvIHBlciBjYW5jZWxsYXJlIGxhIHBhcm9sZQorICAzLiBSaXBldGkgaSBwYXNzaSAxIGUgMiBjb24gdW4gY29udGF0b3JlIGRpdmVyc28gcGVyIGNhbmNlbGxhcmUgbGUgcGFyb2xlCiAgICAgIE1BSVVTQ09MRSBjb25zZWN1dGl2ZSBjb24gdW4gc29sbyBjb21hbmRvCiAKIC0tLT4gIHF1ZXN0YSBBQkMgREUgbGluZWEgRkdISSBKSyBMTU4gT1AgZGkgcGFyb2xlIOggUSBSUyBUVVYgb3JhIHJpcHVsaXRhLgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci5pdC51dGYtOCBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuaXQudXRmLTgKaW5kZXggMDUxYjUxYi4uYmVlM2Y2ZCAxMDA2NDQKLS0tIGEvcnVudGltZS90dXRvci90dXRvci5pdC51dGYtOAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLml0LnV0Zi04CkBAIC0yODgsNyArMjg4LDcgQEAKIAogICAyLiBCYXR0aSAgZDJ3ICBwZXIgY2FuY2VsbGFyZSBsZSBkdWUgcGFyb2xlIE1BSVVTQ09MRQogCi0gIDMuIFJpcGV0aSBpIHBhc3NpIDEgZSAyIGNvbiB1biBjb250YXRvcmUgZGl2ZXJzbyBwZXIgY2FuY2VsbGFyZSBsYSBwYXJvbGUKKyAgMy4gUmlwZXRpIGkgcGFzc2kgMSBlIDIgY29uIHVuIGNvbnRhdG9yZSBkaXZlcnNvIHBlciBjYW5jZWxsYXJlIGxlIHBhcm9sZQogICAgICBNQUlVU0NPTEUgY29uc2VjdXRpdmUgY29uIHVuIHNvbG8gY29tYW5kbwogCiAtLS0+ICBxdWVzdGEgQUJDIERFIGxpbmVhIEZHSEkgSksgTE1OIE9QIGRpIHBhcm9sZSDDqCBRIFJTIFRVViBvcmEgcmlwdWxpdGEuCmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmMgYi9zcmMvYnVmZmVyLmMKaW5kZXggNTMxZTRiOS4uNWVjYjYzOCAxMDA2NDQKLS0tIGEvc3JjL2J1ZmZlci5jCisrKyBiL3NyYy9idWZmZXIuYwpAQCAtNjEsOCArNjEsOSBAQAogI2VuZGlmCiAKIC8qCi0gKiBPcGVuIGN1cnJlbnQgYnVmZmVyLCB0aGF0IGlzOiBvcGVuIHRoZSBtZW1maWxlIGFuZCByZWFkIHRoZSBmaWxlIGludG8gbWVtb3J5Ci0gKiByZXR1cm4gRkFJTCBmb3IgZmFpbHVyZSwgT0sgb3RoZXJ3aXNlCisgKiBPcGVuIGN1cnJlbnQgYnVmZmVyLCB0aGF0IGlzOiBvcGVuIHRoZSBtZW1maWxlIGFuZCByZWFkIHRoZSBmaWxlIGludG8KKyAqIG1lbW9yeS4KKyAqIFJldHVybiBGQUlMIGZvciBmYWlsdXJlLCBPSyBvdGhlcndpc2UuCiAgKi8KICAgICBpbnQKIG9wZW5fYnVmZmVyKHJlYWRfc3RkaW4sIGVhcCkKZGlmZiAtLWdpdCBhL3NyYy9ldmFsLmMgYi9zcmMvZXZhbC5jCmluZGV4IDQ0NmRmOGUuLjNjMjM4ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9ldmFsLmMKKysrIGIvc3JjL2V2YWwuYwpAQCAtMTE4NjksNiArMTE4NjksOSBAQAogCSJwZXJsIiwKICNlbmRpZgogI2VuZGlmCisjaWZkZWYgRkVBVF9QRVJTSVNURU5UX1VORE8KKwkicGVyc2lzdGVudF91bmRvIiwKKyNlbmRpZgogI2lmZGVmIEZFQVRfUFlUSE9OCiAjaWZuZGVmIERZTkFNSUNfUFlUSE9OCiAJInB5dGhvbiIsCmRpZmYgLS1naXQgYS9zcmMvZXhfY21kcy5oIGIvc3JjL2V4X2NtZHMuaAppbmRleCAxZWY4ODVhLi5mNDFlMGY0IDEwMDY0NAotLS0gYS9zcmMvZXhfY21kcy5oCisrKyBiL3NyYy9leF9jbWRzLmgKQEAgLTc3Myw2ICs3NzMsOCBAQAogCQkJUkFOR0V8REZMQUxMfEVYVFJBfE5FRURBUkd8Q01EV0lOKSwKIEVYKENNRF9ydWJ5ZmlsZSwJInJ1YnlmaWxlIiwJZXhfcnVieWZpbGUsCiAJCQlSQU5HRXxGSUxFMXxORUVEQVJHfENNRFdJTiksCitFWChDTURfcnVuZG8sCQkicnVuZG8iLAlleF9ydW5kbywKKwkJCU5FRURBUkd8RVhUUkF8WEZJTEUpLAogRVgoQ01EX3J2aW1pbmZvLAkicnZpbWluZm8iLAlleF92aW1pbmZvLAogCQkJQkFOR3xGSUxFMXxUUkxCQVJ8Q01EV0lOKSwKIEVYKENNRF9zdWJzdGl0dXRlLAkic3Vic3RpdHV0ZSIsCWRvX3N1YiwKQEAgLTEwNjEsNiArMTA2Myw4IEBACiAJCQlCQU5HfEZJTEUxfEFSR09QVHxERkxBTEx8VFJMQkFSKSwKIEVYKENNRF93c3ZlcmIsCQkid3N2ZXJiIiwJZXhfd3N2ZXJiLAogCQkJRVhUUkF8Tk9UQURSfE5FRURBUkcpLAorRVgoQ01EX3d1bmRvLAkJInd1bmRvIiwJZXhfd3VuZG8sCisJCQlCQU5HfE5FRURBUkd8RVhUUkF8WEZJTEUpLAogRVgoQ01EX3d2aW1pbmZvLAkid3ZpbWluZm8iLAlleF92aW1pbmZvLAogCQkJQkFOR3xGSUxFMXxUUkxCQVJ8Q01EV0lOKSwKIEVYKENNRF94aXQsCQkieGl0IiwJCWV4X2V4aXQsCmRpZmYgLS1naXQgYS9zcmMvZXhfZG9jbWQuYyBiL3NyYy9leF9kb2NtZC5jCmluZGV4IGZmMzkwNDAuLjQwOTdmMWQgMTAwNjQ0Ci0tLSBhL3NyYy9leF9kb2NtZC5jCisrKyBiL3NyYy9leF9kb2NtZC5jCkBAIC0yNDMsNiArMjQzLDEwIEBACiAjIGRlZmluZSBleF9zcGVsbGluZm8JCWV4X25pCiAjIGRlZmluZSBleF9zcGVsbHJlcGFsbAkJZXhfbmkKICNlbmRpZgorI2lmbmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworIyBkZWZpbmUgZXhfcnVuZG8JCWV4X25pCisjIGRlZmluZSBleF93dW5kbwkJZXhfbmkKKyNlbmRpZgogI2lmbmRlZiBGRUFUX01aU0NIRU1FCiAjIGRlZmluZSBleF9tenNjaGVtZQkJZXhfc2NyaXB0X25pCiAjIGRlZmluZSBleF9temZpbGUJCWV4X25pCkBAIC0yOTgsNiArMzAyLDEwIEBACiBzdGF0aWMgdm9pZAlleF9hdCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfYmFuZyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfdW5kbyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2lmZGVmIEZFQVRfUEVSU0lTVEVOVF9VTkRPCitzdGF0aWMgdm9pZAlleF93dW5kbyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworc3RhdGljIHZvaWQJZXhfcnVuZG8gX19BUkdTKChleGFyZ19UICplYXApKTsKKyNlbmRpZgogc3RhdGljIHZvaWQJZXhfcmVkbyBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJZXhfbGF0ZXIgX19BUkdTKChleGFyZ19UICplYXApKTsKIHN0YXRpYyB2b2lkCWV4X3JlZGlyIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CkBAIC04NDUyLDYgKzg0NjAsMjggQEAKIAl1X3VuZG8oMSk7CiB9CiAKKyNpZmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworICAgIHZvaWQKK2V4X3d1bmRvKGVhcCkKKyAgICBleGFyZ19UICplYXA7Cit7CisgICAgY2hhcl91IGhhc2hbVU5ET19IQVNIX1NJWkVdOworCisgICAgdV9jb21wdXRlX2hhc2goaGFzaCk7CisgICAgdV93cml0ZV91bmRvKGVhcC0+YXJnLCBlYXAtPmZvcmNlaXQsIGN1cmJ1ZiwgaGFzaCk7Cit9CisKKyAgICB2b2lkCitleF9ydW5kbyhlYXApCisgICAgZXhhcmdfVCAqZWFwOworeworICAgIGNoYXJfdSBoYXNoW1VORE9fSEFTSF9TSVpFXTsKKworICAgIHVfY29tcHV0ZV9oYXNoKGhhc2gpOworICAgIHVfcmVhZF91bmRvKGVhcC0+YXJnLCBoYXNoKTsKK30KKyNlbmRpZgorCiAvKgogICogIjpyZWRvIi4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ZlYXR1cmUuaCBiL3NyYy9mZWF0dXJlLmgKaW5kZXggNmI4ZjYwMC4uNjFmZTMzNCAxMDA2NDQKLS0tIGEvc3JjL2ZlYXR1cmUuaAorKysgYi9zcmMvZmVhdHVyZS5oCkBAIC0xMjc1LDMgKzEyNzUsMTEgQEAKIAkgICAgfHwgZGVmaW5lZChGRUFUX0JJRykKICMgZGVmaW5lIEZFQVRfQVVUT0NIRElSCiAjZW5kaWYKKworLyoKKyAqICtwZXJzaXN0ZW50X3VuZG8JJ3VuZG9maWxlJywgJ3VuZG9kaXInIG9wdGlvbnMsIDp3dW5kbyBhbmQgOnJ1bmRvLCBhbmQKKyAqIGltcGxlbWVudGF0aW9uLgorICovCisjaWZkZWYgRkVBVF9OT1JNQUwKKyMgZGVmaW5lIEZFQVRfUEVSU0lTVEVOVF9VTkRPCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9maWxlaW8uYyBiL3NyYy9maWxlaW8uYwppbmRleCA3YTY5N2VlLi5iN2M4NmFmIDEwMDY0NAotLS0gYS9zcmMvZmlsZWlvLmMKKysrIGIvc3JjL2ZpbGVpby5jCkBAIC0yNTMsNiArMjUzLDEwIEBACiAgICAgY2hhcl91CSpjcnlwdGtleSA9IE5VTEw7CiAgICAgaW50CQlkaWRfYXNrX2Zvcl9rZXkgPSBGQUxTRTsKICNlbmRpZgorI2lmZGVmIEZFQVRfUEVSU0lTVEVOVF9VTkRPCisgICAgY29udGV4dF9zaGEyNTZfVCBzaGFfY3R4OworICAgIGludAkJcmVhZF91bmRvX2ZpbGUgPSBGQUxTRTsKKyNlbmRpZgogICAgIGludAkJc3BsaXQgPSAwOwkJLyogbnVtYmVyIG9mIHNwbGl0IGxpbmVzICovCiAjZGVmaW5lIFVOS05PV04JIDB4MGZmZmZmZmYJCS8qIGZpbGUgc2l6ZSBpcyB1bmtub3duICovCiAgICAgbGluZW5yX1QJbGluZWNudDsKQEAgLTExNzgsNiArMTE4MiwxMiBAQAogI2lmZGVmIEZFQVRfTUJZVEUKIAljb252X3Jlc3RsZW4gPSAwOwogI2VuZGlmCisjaWZkZWYgRkVBVF9QRVJTSVNURU5UX1VORE8KKwlyZWFkX3VuZG9fZmlsZSA9IChuZXdmaWxlICYmIGN1cmJ1Zi0+Yl9mZm5hbWUgIT0gTlVMTCAmJiBjdXJidWYtPmJfcF91ZGYKKwkJCQkmJiAhZmlsdGVyaW5nICYmICFyZWFkX3N0ZGluICYmICFyZWFkX2J1ZmZlcik7CisJaWYgKHJlYWRfdW5kb19maWxlKQorCSAgICBzaGEyNTZfc3RhcnQoJnNoYV9jdHgpOworI2VuZGlmCiAgICAgfQogCiAgICAgd2hpbGUgKCFlcnJvciAmJiAhZ290X2ludCkKQEAgLTIxMzMsNiArMjE0MywxMCBAQAogCQkJICAgIGVycm9yID0gVFJVRTsKIAkJCSAgICBicmVhazsKIAkJCX0KKyNpZmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworCQkJaWYgKHJlYWRfdW5kb19maWxlKQorCQkJICAgIHNoYTI1Nl91cGRhdGUoJnNoYV9jdHgsIGxpbmVfc3RhcnQsIGxlbik7CisjZW5kaWYKIAkJCSsrbG51bTsKIAkJCWlmICgtLXJlYWRfY291bnQgPT0gMCkKIAkJCXsKQEAgLTIxOTcsNiArMjIxMSwxMCBAQAogCQkJICAgIGVycm9yID0gVFJVRTsKIAkJCSAgICBicmVhazsKIAkJCX0KKyNpZmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworCQkJaWYgKHJlYWRfdW5kb19maWxlKQorCQkJICAgIHNoYTI1Nl91cGRhdGUoJnNoYV9jdHgsIGxpbmVfc3RhcnQsIGxlbik7CisjZW5kaWYKIAkJCSsrbG51bTsKIAkJCWlmICgtLXJlYWRfY291bnQgPT0gMCkKIAkJCXsKQEAgLTIyMzcsMTEgKzIyNTUsMTcgQEAKIAlpZiAoc2V0X29wdGlvbnMpCiAJICAgIGN1cmJ1Zi0+Yl9wX2VvbCA9IEZBTFNFOwogCSpwdHIgPSBOVUw7Ci0JaWYgKG1sX2FwcGVuZChsbnVtLCBsaW5lX3N0YXJ0LAotCQkJKGNvbG5yX1QpKHB0ciAtIGxpbmVfc3RhcnQgKyAxKSwgbmV3ZmlsZSkgPT0gRkFJTCkKKwlsZW4gPSAoY29sbnJfVCkocHRyIC0gbGluZV9zdGFydCArIDEpOworCWlmIChtbF9hcHBlbmQobG51bSwgbGluZV9zdGFydCwgbGVuLCBuZXdmaWxlKSA9PSBGQUlMKQogCSAgICBlcnJvciA9IFRSVUU7CiAJZWxzZQorCXsKKyNpZmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworCSAgICBpZiAocmVhZF91bmRvX2ZpbGUpCisJCXNoYTI1Nl91cGRhdGUoJnNoYV9jdHgsIGxpbmVfc3RhcnQsIGxlbik7CisjZW5kaWYKIAkgICAgcmVhZF9ub19lb2xfbG51bSA9ICsrbG51bTsKKwl9CiAgICAgfQogCiAgICAgaWYgKHNldF9vcHRpb25zKQpAQCAtMjU1NSw2ICsyNTc5LDE5IEBACiAgICAgICovCiAgICAgd3JpdGVfbm9fZW9sX2xudW0gPSByZWFkX25vX2VvbF9sbnVtOwogCisjaWZkZWYgRkVBVF9QRVJTSVNURU5UX1VORE8KKyAgICAvKgorICAgICAqIFdoZW4gb3BlbmluZyBhIG5ldyBmaWxlIGxvY2F0ZSB1bmRvIGluZm8gYW5kIHJlYWQgaXQuCisgICAgICovCisgICAgaWYgKHJlYWRfdW5kb19maWxlKQorICAgIHsKKwljaGFyX3UJaGFzaFtVTkRPX0hBU0hfU0laRV07CisKKwlzaGEyNTZfZmluaXNoKCZzaGFfY3R4LCBoYXNoKTsKKwl1X3JlYWRfdW5kbyhOVUxMLCBoYXNoKTsKKyAgICB9CisjZW5kaWYKKwogI2lmZGVmIEZFQVRfQVVUT0NNRAogICAgIGlmICghcmVhZF9zdGRpbiAmJiAhcmVhZF9idWZmZXIpCiAgICAgewpAQCAtMzAzOCw2ICszMDc1LDEwIEBACiAgICAgdmltX2FjbF9UCSAgICBhY2wgPSBOVUxMOwkJLyogQUNMIGNvcGllZCBmcm9tIG9yaWdpbmFsIGZpbGUgdG8KIAkJCQkJICAgYmFja3VwIG9yIG5ldyBmaWxlICovCiAjZW5kaWYKKyNpZmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworICAgIGludAkJICAgIHdyaXRlX3VuZG9fZmlsZSA9IEZBTFNFOworICAgIGNvbnRleHRfc2hhMjU2X1Qgc2hhX2N0eDsKKyNlbmRpZgogCiAgICAgaWYgKGZuYW1lID09IE5VTEwgfHwgKmZuYW1lID09IE5VTCkJLyogc2FmZXR5IGNoZWNrICovCiAJcmV0dXJuIEZBSUw7CkBAIC00MzQ0LDYgKzQzODUsMTQgQEAKICAgICB3cml0ZV9pbmZvLmJ3X3N0YXJ0X2xudW0gPSBzdGFydDsKICNlbmRpZgogCisjaWZkZWYgRkVBVF9QRVJTSVNURU5UX1VORE8KKyAgICB3cml0ZV91bmRvX2ZpbGUgPSAoYnVmLT5iX3BfdWRmICYmIG92ZXJ3cml0aW5nICYmICFhcHBlbmQKKwkJCQkJICAgICAgJiYgIWZpbHRlcmluZyAmJiByZXNldF9jaGFuZ2VkKTsKKyAgICBpZiAod3JpdGVfdW5kb19maWxlKQorCS8qIFByZXBhcmUgZm9yIGNvbXB1dGluZyB0aGUgaGFzaCB2YWx1ZSBvZiB0aGUgdGV4dC4gKi8KKwlzaGEyNTZfc3RhcnQoJnNoYV9jdHgpOworI2VuZGlmCisKICAgICB3cml0ZV9pbmZvLmJ3X2xlbiA9IGJ1ZnNpemU7CiAjaWZkZWYgSEFTX0JXX0ZMQUdTCiAgICAgd3JpdGVfaW5mby5id19mbGFncyA9IHdiX2ZsYWdzOwpAQCAtNDM1OCw2ICs0NDA3LDEwIEBACiAJICogS2VlcCBpdCBmYXN0IQogCSAqLwogCXB0ciA9IG1sX2dldF9idWYoYnVmLCBsbnVtLCBGQUxTRSkgLSAxOworI2lmZGVmIEZFQVRfUEVSU0lTVEVOVF9VTkRPCisJaWYgKHdyaXRlX3VuZG9fZmlsZSkKKwkgICAgc2hhMjU2X3VwZGF0ZSgmc2hhX2N0eCwgcHRyICsgMSwgU1RSTEVOKHB0ciArIDEpICsgMSk7CisjZW5kaWYKIAl3aGlsZSAoKGMgPSAqKytwdHIpICE9IE5VTCkKIAl7CiAJICAgIGlmIChjID09IE5MKQpAQCAtNDg4Niw2ICs0OTM5LDIwIEBACiAgICAgfQogICAgIG1zZ19zY3JvbGwgPSBtc2dfc2F2ZTsKIAorI2lmZGVmIEZFQVRfUEVSU0lTVEVOVF9VTkRPCisgICAgLyoKKyAgICAgKiBXaGVuIHdyaXRpbmcgdGhlIHdob2xlIGZpbGUgYW5kICd1bmRvZmlsZScgaXMgc2V0LCBhbHNvIHdyaXRlIHRoZSB1bmRvCisgICAgICogZmlsZS4KKyAgICAgKi8KKyAgICBpZiAocmV0dmFsID09IE9LICYmIHdyaXRlX3VuZG9fZmlsZSkKKyAgICB7CisJY2hhcl91CSAgICBoYXNoW1VORE9fSEFTSF9TSVpFXTsKKworCXNoYTI1Nl9maW5pc2goJnNoYV9jdHgsIGhhc2gpOworCXVfd3JpdGVfdW5kbyhOVUxMLCBGQUxTRSwgYnVmLCBoYXNoKTsKKyAgICB9CisjZW5kaWYKKwogI2lmZGVmIEZFQVRfQVVUT0NNRAogI2lmZGVmIEZFQVRfRVZBTAogICAgIGlmICghc2hvdWxkX2Fib3J0KHJldHZhbCkpCmRpZmYgLS1naXQgYS9zcmMvbWVtbGluZS5jIGIvc3JjL21lbWxpbmUuYwppbmRleCBiM2MxNzI3Li5jM2ZkYmEzIDEwMDY0NAotLS0gYS9zcmMvbWVtbGluZS5jCisrKyBiL3NyYy9tZW1saW5lLmMKQEAgLTI0NSw5ICsyNDUsNiBAQAogI2lmZGVmIEZFQVRfQllURU9GRgogc3RhdGljIHZvaWQgbWxfdXBkYXRlY2h1bmsgX19BUkdTKChidWZfVCAqYnVmLCBsb25nIGxpbmUsIGxvbmcgbGVuLCBpbnQgdXBkdHlwZSkpOwogI2VuZGlmCi0jaWZkZWYgSEFWRV9SRUFETElOSwotc3RhdGljIGludCByZXNvbHZlX3N5bWxpbmsgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBjaGFyX3UgKmJ1ZikpOwotI2VuZGlmCiAKIC8qCiAgKiBPcGVuIGEgbmV3IG1lbWxpbmUgZm9yICJidWYiLgpAQCAtMzU1OSw3ICszNTU2LDcgQEAKICAgICB9CiB9CiAKLSNpZmRlZiBIQVZFX1JFQURMSU5LCisjaWYgZGVmaW5lZChIQVZFX1JFQURMSU5LKSB8fCBkZWZpbmVkKFBST1RPKQogLyoKICAqIFJlc29sdmUgYSBzeW1saW5rIGluIHRoZSBsYXN0IGNvbXBvbmVudCBvZiBhIGZpbGUgbmFtZS4KICAqIE5vdGUgdGhhdCBmX3Jlc29sdmUoKSBkb2VzIGl0IGZvciBldmVyeSBwYXJ0IG9mIHRoZSBwYXRoLCB3ZSBkb24ndCBkbyB0aGF0CkBAIC0zNTY3LDcgKzM1NjQsNyBAQAogICogSWYgaXQgd29ya2VkIHJldHVybnMgT0sgYW5kIHRoZSByZXNvbHZlZCBsaW5rIGluICJidWZbTUFYUEFUSExdIi4KICAqIE90aGVyd2lzZSByZXR1cm5zIEZBSUwuCiAgKi8KLSAgICBzdGF0aWMgaW50CisgICAgaW50CiByZXNvbHZlX3N5bWxpbmsoZm5hbWUsIGJ1ZikKICAgICBjaGFyX3UJKmZuYW1lOwogICAgIGNoYXJfdQkqYnVmOwpAQCAtMzg2Miw3ICszODU5LDcgQEAKICAqIFJldHVybnMgdGhlIG5hbWUgaW4gYWxsb2NhdGVkIG1lbW9yeSBvciBOVUxMLgogICoKICAqIE5vdGU6IElmIEJBU0VOQU1FTEVOIGlzIG5vdCBjb3JyZWN0LCB5b3Ugd2lsbCBnZXQgZXJyb3IgbWVzc2FnZXMgZm9yCi0gKgkgbm90IGJlaW5nIGFibGUgdG8gb3BlbiB0aGUgc3dhcGZpbGUKKyAqCSBub3QgYmVpbmcgYWJsZSB0byBvcGVuIHRoZSBzd2FwIG9yIHVuZG8gZmlsZQogICogTm90ZTogTWF5IHRyaWdnZXIgU3dhcEV4aXN0cyBhdXRvY21kLCBwb2ludGVycyBtYXkgY2hhbmdlIQogICovCiAgICAgc3RhdGljIGNoYXJfdSAqCkBAIC0zODg2LDI5ICszODgzLDI5IEBACiAjIGRlZmluZSBDUkVBVEVfRFVNTVlfRklMRQogICAgIEZJTEUJKmR1bW15ZmQgPSBOVUxMOwogCi0vKgotICogSWYgd2Ugc3RhcnQgZWRpdGluZyBhIG5ldyBmaWxlLCBlLmcuICJ0ZXN0LmRvYyIsIHdoaWNoIHJlc2lkZXMgb24gYW4gTVNET1MKLSAqIGNvbXBhdGlibGUgZmlsZXN5c3RlbSwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZmlsZSAidGVzdC5kb2Muc3dwIiB3aGljaCB3ZQotICogY3JlYXRlIHdpbGwgYmUgZXhhY3RseSB0aGUgc2FtZSBmaWxlLiBUbyBhdm9pZCB0aGlzIHByb2JsZW0gd2UgdGVtcG9yYXJpbHkKLSAqIGNyZWF0ZSAidGVzdC5kb2MiLgotICogRG9uJ3QgZG8gdGhpcyB3aGVuIHRoZSBjaGVjayBiZWxvdyBmb3IgYSA4LjMgZmlsZSBuYW1lIGlzIHVzZWQuCi0gKi8KKyAgICAvKgorICAgICAqIElmIHdlIHN0YXJ0IGVkaXRpbmcgYSBuZXcgZmlsZSwgZS5nLiAidGVzdC5kb2MiLCB3aGljaCByZXNpZGVzIG9uIGFuCisgICAgICogTVNET1MgY29tcGF0aWJsZSBmaWxlc3lzdGVtLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBmaWxlCisgICAgICogInRlc3QuZG9jLnN3cCIgd2hpY2ggd2UgY3JlYXRlIHdpbGwgYmUgZXhhY3RseSB0aGUgc2FtZSBmaWxlLiBUbyBhdm9pZAorICAgICAqIHRoaXMgcHJvYmxlbSB3ZSB0ZW1wb3JhcmlseSBjcmVhdGUgInRlc3QuZG9jIi4gIERvbid0IGRvIHRoaXMgd2hlbiB0aGUKKyAgICAgKiBjaGVjayBiZWxvdyBmb3IgYSA4LjMgZmlsZSBuYW1lIGlzIHVzZWQuCisgICAgICovCiAgICAgaWYgKCEoYnVmLT5iX3Bfc24gfHwgYnVmLT5iX3Nob3J0bmFtZSkgJiYgYnVmLT5iX2ZuYW1lICE9IE5VTEwKIAkJCQkJICAgICAmJiBtY2hfZ2V0cGVybShidWYtPmJfZm5hbWUpIDwgMCkKIAlkdW1teWZkID0gbWNoX2ZvcGVuKChjaGFyICopYnVmLT5iX2ZuYW1lLCAidyIpOwogI2VuZGlmCiAKLS8qCi0gKiBJc29sYXRlIGEgZGlyZWN0b3J5IG5hbWUgZnJvbSAqZGlycCBhbmQgcHV0IGl0IGluIGRpcl9uYW1lLgotICogRmlyc3QgYWxsb2NhdGUgc29tZSBtZW1vcnkgdG8gcHV0IHRoZSBkaXJlY3RvcnkgbmFtZSBpbi4KLSAqLworICAgIC8qCisgICAgICogSXNvbGF0ZSBhIGRpcmVjdG9yeSBuYW1lIGZyb20gKmRpcnAgYW5kIHB1dCBpdCBpbiBkaXJfbmFtZS4KKyAgICAgKiBGaXJzdCBhbGxvY2F0ZSBzb21lIG1lbW9yeSB0byBwdXQgdGhlIGRpcmVjdG9yeSBuYW1lIGluLgorICAgICAqLwogICAgIGRpcl9uYW1lID0gYWxsb2MoKHVuc2lnbmVkKVNUUkxFTigqZGlycCkgKyAxKTsKICAgICBpZiAoZGlyX25hbWUgIT0gTlVMTCkKIAkodm9pZCljb3B5X29wdGlvbl9wYXJ0KGRpcnAsIGRpcl9uYW1lLCAzMTAwMCwgIiwiKTsKIAotLyoKLSAqIHdlIHRyeSBkaWZmZXJlbnQgbmFtZXMgdW50aWwgd2UgZmluZCBvbmUgdGhhdCBkb2VzIG5vdCBleGlzdCB5ZXQKLSAqLworICAgIC8qCisgICAgICogd2UgdHJ5IGRpZmZlcmVudCBuYW1lcyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGRvZXMgbm90IGV4aXN0IHlldAorICAgICAqLwogICAgIGlmIChkaXJfbmFtZSA9PSBOVUxMKQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLwogCWZuYW1lID0gTlVMTDsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9zcmMvb3B0aW9uLmMgYi9zcmMvb3B0aW9uLmMKaW5kZXggNmMwNjE4YS4uYTRhZjE4YSAxMDA2NDQKLS0tIGEvc3JjL29wdGlvbi5jCisrKyBiL3NyYy9vcHRpb24uYwpAQCAtMTc3LDYgKzE3Nyw5IEBACiAjZGVmaW5lIFBWX1RTCQlPUFRfQlVGKEJWX1RTKQogI2RlZmluZSBQVl9UVwkJT1BUX0JVRihCVl9UVykKICNkZWZpbmUgUFZfVFgJCU9QVF9CVUYoQlZfVFgpCisjaWZkZWYgRkVBVF9QRVJTSVNURU5UX1VORE8KKyMgZGVmaW5lIFBWX1VERgkJT1BUX0JVRihCVl9VREYpCisjZW5kaWYKICNkZWZpbmUgUFZfV00JCU9QVF9CVUYoQlZfV00pCiAKIC8qCkBAIC0zNjIsNiArMzY1LDkgQEAKIHN0YXRpYyBsb25nCXBfdHM7CiBzdGF0aWMgbG9uZwlwX3R3Owogc3RhdGljIGludAlwX3R4OworI2lmZGVmIEZFQVRfUEVSU0lTVEVOVF9VTkRPCitzdGF0aWMgaW50CXBfdWRmOworI2VuZGlmCiBzdGF0aWMgbG9uZwlwX3dtOwogI2lmZGVmIEZFQVRfS0VZTUFQCiBzdGF0aWMgY2hhcl91CSpwX2tleW1hcDsKQEAgLTI1ODYsNiArMjU5MiwyMiBAQAogICAgIHsidHR5dHlwZSIsCSAgICAidHR5IiwgIFBfU1RSSU5HfFBfRVhQQU5EfFBfTk9ERUZBVUxUfFBfTk9fTUtSQ3xQX1ZJX0RFRnxQX1JBTEwsCiAJCQkgICAgKGNoYXJfdSAqKSZUX05BTUUsIFBWX05PTkUsCiAJCQkgICAgeyhjaGFyX3UgKikiIiwgKGNoYXJfdSAqKTBMfSBTQ1JJUFRJRF9JTklUfSwKKyAgICB7InVuZG9kaXIiLCAgICAgInVkaXIiLCBQX1NUUklOR3xQX0VYUEFORHxQX0NPTU1BfFBfTk9EVVB8UF9TRUNVUkV8UF9WSV9ERUYsCisjaWZkZWYgRkVBVF9QRVJTSVNURU5UX1VORE8KKwkJCSAgICAoY2hhcl91ICopJnBfdWRpciwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKSIuIiwgKGNoYXJfdSAqKTBMfQorI2Vsc2UKKwkJCSAgICAoY2hhcl91ICopTlVMTCwgUFZfTk9ORSwKKwkJCSAgICB7KGNoYXJfdSAqKTBMLCAoY2hhcl91ICopMEx9CisjZW5kaWYKKwkJCSAgICBTQ1JJUFRJRF9JTklUfSwKKyAgICB7InVuZG9maWxlIiwgICAgInVkZiIsICBQX0JPT0x8UF9WSV9ERUZ8UF9WSU0sCisjaWZkZWYgRkVBVF9QRVJTSVNURU5UX1VORE8KKwkJCSAgICAoY2hhcl91ICopJnBfdWRmLCBQVl9VREYsCisjZWxzZQorCQkJICAgIChjaGFyX3UgKilOVUxMLCBQVl9OT05FLAorI2VuZGlmCisJCQkgICAgeyhjaGFyX3UgKilGQUxTRSwgKGNoYXJfdSAqKTBMfSBTQ1JJUFRJRF9JTklUfSwKICAgICB7InVuZG9sZXZlbHMiLCAgInVsIiwgICBQX05VTXxQX1ZJX0RFRiwKIAkJCSAgICAoY2hhcl91ICopJnBfdWwsIFBWX05PTkUsCiAJCQkgICAgewpAQCAtOTQwNCw2ICs5NDI2LDkgQEAKIAljYXNlIFBWX1RTOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfdHMpOwogCWNhc2UgUFZfVFc6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF90dyk7CiAJY2FzZSBQVl9UWDoJcmV0dXJuIChjaGFyX3UgKikmKGN1cmJ1Zi0+Yl9wX3R4KTsKKyNpZmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworCWNhc2UgUFZfVURGOglyZXR1cm4gKGNoYXJfdSAqKSYoY3VyYnVmLT5iX3BfdWRmKTsKKyNlbmRpZgogCWNhc2UgUFZfV006CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF93bSk7CiAjaWZkZWYgRkVBVF9LRVlNQVAKIAljYXNlIFBWX0tNQVA6CXJldHVybiAoY2hhcl91ICopJihjdXJidWYtPmJfcF9rZXltYXApOwpAQCAtOTc3NCw2ICs5Nzk5LDkgQEAKICNpZiBkZWZpbmVkKEZFQVRfQkVWQUwpICYmIGRlZmluZWQoRkVBVF9FVkFMKQogCSAgICBidWYtPmJfcF9iZXhwciA9IGVtcHR5X29wdGlvbjsKICNlbmRpZgorI2lmZGVmIEZFQVRfUEVSU0lTVEVOVF9VTkRPCisJICAgIGJ1Zi0+Yl9wX3VkZiA9IHBfdWRmOworI2VuZGlmCiAKIAkgICAgLyoKIAkgICAgICogRG9uJ3QgY29weSB0aGUgb3B0aW9ucyBzZXQgYnkgZXhfaGVscCgpLCB1c2UgdGhlIHNhdmVkIHZhbHVlcywKZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uaCBiL3NyYy9vcHRpb24uaAppbmRleCBiNDljMGM0Li5mMGViYzhkIDEwMDY0NAotLS0gYS9zcmMvb3B0aW9uLmgKKysrIGIvc3JjL29wdGlvbi5oCkBAIC04MTUsNiArODE1LDcgQEAKICMgZGVmaW5lIFRUWU1fSlNCVEVSTQkJMHgxMAogIyBkZWZpbmUgVFRZTV9QVEVSTQkJMHgyMAogI2VuZGlmCitFWFRFUk4gY2hhcl91CSpwX3VkaXI7CS8qICd1bmRvZGlyJyAqLwogRVhURVJOIGxvbmcJcF91bDsJCS8qICd1bmRvbGV2ZWxzJyAqLwogRVhURVJOIGxvbmcJcF91YzsJCS8qICd1cGRhdGVjb3VudCcgKi8KIEVYVEVSTiBsb25nCXBfdXQ7CQkvKiAndXBkYXRldGltZScgKi8KQEAgLTEwMDQsNiArMTAwNSw3IEBACiAgICAgLCBCVl9UUwogICAgICwgQlZfVFcKICAgICAsIEJWX1RYCisgICAgLCBCVl9VREYKICAgICAsIEJWX1dNCiAgICAgLCBCVl9DT1VOVAkgICAgLyogbXVzdCBiZSB0aGUgbGFzdCBvbmUgKi8KIH07CmRpZmYgLS1naXQgYS9zcmMvb3NfbWFjLmggYi9zcmMvb3NfbWFjLmgKaW5kZXggMzE0ZWMzMi4uZjFlZDk2NSAxMDA2NDQKLS0tIGEvc3JjL29zX21hYy5oCisrKyBiL3NyYy9vc19tYWMuaApAQCAtMjA0LDcgKzIwNCw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBERkxUX1ZESVIKLSMgIGRlZmluZSBERkxUX1ZESVIJIiRWSU0vdmltZmlsZXMvdmlldyIJLyogZGVmYXVsdCBmb3IgJ3ZpZXdkaXInICovCisjIGRlZmluZSBERkxUX1ZESVIJIiRWSU0vdmltZmlsZXMvdmlldyIJLyogZGVmYXVsdCBmb3IgJ3ZpZXdkaXInICovCiAjZW5kaWYKIAogI2RlZmluZSBERkxUX0VSUk9SRklMRQkJImVycm9ycy5lcnIiCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vbWVtbGluZS5wcm8gYi9zcmMvcHJvdG8vbWVtbGluZS5wcm8KaW5kZXggZGU3NWE3ZC4uNGQ1MDY3MSAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL21lbWxpbmUucHJvCisrKyBiL3NyYy9wcm90by9tZW1saW5lLnBybwpAQCAtMjUsNiArMjUsNyBAQAogdm9pZCBtbF9zZXRtYXJrZWQgX19BUkdTKChsaW5lbnJfVCBsbnVtKSk7CiBsaW5lbnJfVCBtbF9maXJzdG1hcmtlZCBfX0FSR1MoKHZvaWQpKTsKIHZvaWQgbWxfY2xlYXJtYXJrZWQgX19BUkdTKCh2b2lkKSk7CitpbnQgcmVzb2x2ZV9zeW1saW5rIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgY2hhcl91ICpidWYpKTsKIGNoYXJfdSAqbWFrZXN3YXBuYW1lIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgY2hhcl91ICpmZm5hbWUsIGJ1Zl9UICpidWYsIGNoYXJfdSAqZGlyX25hbWUpKTsKIGNoYXJfdSAqZ2V0X2ZpbGVfaW5fZGlyIF9fQVJHUygoY2hhcl91ICpmbmFtZSwgY2hhcl91ICpkbmFtZSkpOwogdm9pZCBtbF9zZXRmbGFncyBfX0FSR1MoKGJ1Zl9UICpidWYpKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9zaGEyNTYucHJvIGIvc3JjL3Byb3RvL3NoYTI1Ni5wcm8KaW5kZXggYTZkNmJlNy4uZTlhM2QzYyAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL3NoYTI1Ni5wcm8KKysrIGIvc3JjL3Byb3RvL3NoYTI1Ni5wcm8KQEAgLTEsNCArMSw3IEBACiAvKiBzaGEyNTYuYyAqLwordm9pZCBzaGEyNTZfc3RhcnQgX19BUkdTKChjb250ZXh0X3NoYTI1Nl9UICpjdHgpKTsKK3ZvaWQgc2hhMjU2X3VwZGF0ZSBfX0FSR1MoKGNvbnRleHRfc2hhMjU2X1QgKmN0eCwgY2hhcl91ICppbnB1dCwgdWludDMyX3QgbGVuZ3RoKSk7Cit2b2lkIHNoYTI1Nl9maW5pc2ggX19BUkdTKChjb250ZXh0X3NoYTI1Nl9UICpjdHgsIGNoYXJfdSBkaWdlc3RbMzJdKSk7CiBjaGFyX3UgKnNoYTI1Nl9rZXkgX19BUkdTKChjaGFyX3UgKmJ1ZikpOwogaW50IHNoYTI1Nl9zZWxmX3Rlc3QgX19BUkdTKCh2b2lkKSk7CiB2b2lkIHNoYTJfc2VlZCBfX0FSR1MoKGNoYXJfdSBoZWFkZXJbXSwgaW50IGhlYWRlcl9sZW4pKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9zcGVsbC5wcm8gYi9zcmMvcHJvdG8vc3BlbGwucHJvCmluZGV4IGY0OTdkYzYuLjhhYjU0NGQgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9zcGVsbC5wcm8KKysrIGIvc3JjL3Byb3RvL3NwZWxsLnBybwpAQCAtMiwxMSArMiwxNCBAQAogaW50IHNwZWxsX2NoZWNrIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKnB0ciwgaGxmX1QgKmF0dHJwLCBpbnQgKmNhcGNvbCwgaW50IGRvY291bnQpKTsKIGludCBzcGVsbF9tb3ZlX3RvIF9fQVJHUygod2luX1QgKndwLCBpbnQgZGlyLCBpbnQgYWxsd29yZHMsIGludCBjdXJsaW5lLCBobGZfVCAqYXR0cnApKTsKIHZvaWQgc3BlbGxfY2F0X2xpbmUgX19BUkdTKChjaGFyX3UgKmJ1ZiwgY2hhcl91ICpsaW5lLCBpbnQgbWF4bGVuKSk7CitpbnQgZ2V0MmMgX19BUkdTKChGSUxFICpmZCkpOworaW50IGdldDNjIF9fQVJHUygoRklMRSAqZmQpKTsKK2ludCBnZXQ0YyBfX0FSR1MoKEZJTEUgKmZkKSk7CiBjaGFyX3UgKmRpZF9zZXRfc3BlbGxsYW5nIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwogdm9pZCBzcGVsbF9mcmVlX2FsbCBfX0FSR1MoKHZvaWQpKTsKIHZvaWQgc3BlbGxfcmVsb2FkIF9fQVJHUygodm9pZCkpOwogaW50IHNwZWxsX2NoZWNrX21zbSBfX0FSR1MoKHZvaWQpKTsKLXZvaWQgcHV0X2J5dGVzIF9fQVJHUygoRklMRSAqZmQsIGxvbmdfdSBuciwgaW50IGxlbikpOworaW50IHB1dF9ieXRlcyBfX0FSR1MoKEZJTEUgKmZkLCBsb25nX3UgbnIsIGludCBsZW4pKTsKIHZvaWQgZXhfbWtzcGVsbCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogdm9pZCBleF9zcGVsbCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogdm9pZCBzcGVsbF9hZGRfd29yZCBfX0FSR1MoKGNoYXJfdSAqd29yZCwgaW50IGxlbiwgaW50IGJhZCwgaW50IGlkeCwgaW50IHVuZG8pKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by91bmRvLnBybyBiL3NyYy9wcm90by91bmRvLnBybwppbmRleCBlNzEyZjAzLi5lNWYyOGJlIDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vdW5kby5wcm8KKysrIGIvc3JjL3Byb3RvL3VuZG8ucHJvCkBAIC01LDYgKzUsOSBAQAogaW50IHVfaW5zc3ViIF9fQVJHUygobGluZW5yX1QgbG51bSkpOwogaW50IHVfc2F2ZWRlbCBfX0FSR1MoKGxpbmVucl9UIGxudW0sIGxvbmcgbmxpbmVzKSk7CiBpbnQgdW5kb19hbGxvd2VkIF9fQVJHUygodm9pZCkpOwordm9pZCB1X2NvbXB1dGVfaGFzaCBfX0FSR1MoKGNoYXJfdSAqaGFzaCkpOwordm9pZCB1X3JlYWRfdW5kbyBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgY2hhcl91ICpoYXNoKSk7Cit2b2lkIHVfd3JpdGVfdW5kbyBfX0FSR1MoKGNoYXJfdSAqbmFtZSwgaW50IGZvcmNlaXQsIGJ1Zl9UICpidWYsIGNoYXJfdSAqaGFzaCkpOwogdm9pZCB1X3VuZG8gX19BUkdTKChpbnQgY291bnQpKTsKIHZvaWQgdV9yZWRvIF9fQVJHUygoaW50IGNvdW50KSk7CiB2b2lkIHVuZG9fdGltZSBfX0FSR1MoKGxvbmcgc3RlcCwgaW50IHNlYywgaW50IGFic29sdXRlKSk7CmRpZmYgLS1naXQgYS9zcmMvc2hhMjU2LmMgYi9zcmMvc2hhMjU2LmMKaW5kZXggOTM3MmQ1Zi4uMDQ4Y2U3NSAxMDA2NDQKLS0tIGEvc3JjL3NoYTI1Ni5jCisrKyBiL3NyYy9zaGEyNTYuYwpAQCAtMjAsMTggKzIwLDkgQEAKIAogI2luY2x1ZGUgInZpbS5oIgogCi0jaWZkZWYgRkVBVF9DUllQVAorI2lmIGRlZmluZWQoRkVBVF9DUllQVCkgfHwgZGVmaW5lZChGRUFUX1BFUlNJU1RFTlRfVU5ETykKIAotdHlwZWRlZiBzdHJ1Y3QgewotICBVSU5UMzJfVCB0b3RhbFsyXTsKLSAgVUlOVDMyX1Qgc3RhdGVbOF07Ci0gIGNoYXJfdSAgIGJ1ZmZlcls2NF07Ci19IGNvbnRleHRfc2hhMjU2X1Q7Ci0KLXN0YXRpYyB2b2lkIHNoYTI1Nl9zdGFydHMgX19BUkdTKChjb250ZXh0X3NoYTI1Nl9UICpjdHgpKTsKIHN0YXRpYyB2b2lkIHNoYTI1Nl9wcm9jZXNzIF9fQVJHUygoY29udGV4dF9zaGEyNTZfVCAqY3R4LCBjaGFyX3UgZGF0YVs2NF0pKTsKLXN0YXRpYyB2b2lkIHNoYTI1Nl91cGRhdGUgX19BUkdTKChjb250ZXh0X3NoYTI1Nl9UICpjdHgsIGNoYXJfdSAqaW5wdXQsIFVJTlQzMl9UIGxlbmd0aCkpOwotc3RhdGljIHZvaWQgc2hhMjU2X2ZpbmlzaCBfX0FSR1MoKGNvbnRleHRfc2hhMjU2X1QgKmN0eCwgY2hhcl91IGRpZ2VzdFszMl0pKTsKIHN0YXRpYyBjaGFyX3UgKnNoYTI1Nl9ieXRlcyBfX0FSR1MoKGNoYXJfdSAqYnVmLCBpbnQgYnVmbGVuKSk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9zb21lX3RpbWUgX19BUkdTKCh2b2lkKSk7CiAKQEAgLTUyLDggKzQzLDggQEAKICAgICAoYilbKGkpICsgM10gPSAoY2hhcl91KSgobikgICAgICApOyAgIFwKIH0KIAotICAgIHN0YXRpYyB2b2lkCi1zaGEyNTZfc3RhcnRzKGN0eCkKKyAgICAgdm9pZAorc2hhMjU2X3N0YXJ0KGN0eCkKICAgICBjb250ZXh0X3NoYTI1Nl9UICpjdHg7CiB7CiAgICAgY3R4LT50b3RhbFswXSA9IDA7CkBAIC0yMDMsNyArMTk0LDcgQEAKICAgICBjdHgtPnN0YXRlWzddICs9IEg7CiB9CiAKLSAgICBzdGF0aWMgdm9pZAorICAgIHZvaWQKIHNoYTI1Nl91cGRhdGUoY3R4LCBpbnB1dCwgbGVuZ3RoKQogICAgIGNvbnRleHRfc2hhMjU2X1QgKmN0eDsKICAgICBjaGFyX3UJICAgICAqaW5wdXQ7CkBAIC0yNTAsNyArMjQxLDcgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiB9OwogCi0gICAgc3RhdGljIHZvaWQKKyAgICB2b2lkCiBzaGEyNTZfZmluaXNoKGN0eCwgZGlnZXN0KQogICAgIGNvbnRleHRfc2hhMjU2X1QgKmN0eDsKICAgICBjaGFyX3UgICAgICAgICAgIGRpZ2VzdFszMl07CkBAIC0yOTYsNyArMjg3LDcgQEAKIAogICAgIHNoYTI1Nl9zZWxmX3Rlc3QoKTsKIAotICAgIHNoYTI1Nl9zdGFydHMoJmN0eCk7CisgICAgc2hhMjU2X3N0YXJ0KCZjdHgpOwogICAgIHNoYTI1Nl91cGRhdGUoJmN0eCwgYnVmLCBidWZsZW4pOwogICAgIHNoYTI1Nl9maW5pc2goJmN0eCwgc2hhMjU2c3VtKTsKICAgICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykKQEAgLTM2OCw3ICszNTksNyBAQAogCX0KIAllbHNlCiAJewotCSAgICBzaGEyNTZfc3RhcnRzKCZjdHgpOworCSAgICBzaGEyNTZfc3RhcnQoJmN0eCk7CiAJICAgIG1lbXNldChidWYsICdhJywgMTAwMCk7CiAJICAgIGZvciAoaiA9IDA7IGogPCAxMDAwOyBqKyspCiAJCXNoYTI1Nl91cGRhdGUoJmN0eCwgKGNoYXJfdSAqKWJ1ZiwgMTAwMCk7CkBAIC00MTYsNyArNDA3LDcgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KXNpemVvZihyYW5kb21fZGF0YSkgLSAxOyBpKyspCiAJcmFuZG9tX2RhdGFbaV0gPSAoY2hhcl91KSgoZ2V0X3NvbWVfdGltZSgpIF4gcmFuZCgpKSAmIDB4ZmYpOwotICAgIHNoYTI1Nl9zdGFydHMoJmN0eCk7CisgICAgc2hhMjU2X3N0YXJ0KCZjdHgpOwogICAgIHNoYTI1Nl91cGRhdGUoJmN0eCwgKGNoYXJfdSAqKXJhbmRvbV9kYXRhLCBzaXplb2YocmFuZG9tX2RhdGEpKTsKICAgICBzaGEyNTZfZmluaXNoKCZjdHgsIHNoYTI1NnN1bSk7CiAKQEAgLTQyNCw0ICs0MTUsNCBAQAogCWhlYWRlcltpXSA9IHNoYTI1NnN1bVtpICUgc2l6ZW9mKHNoYTI1NnN1bSldOwogfQogCi0jZW5kaWYgLyogRkVBVF9DUllQVCAqLworI2VuZGlmIC8qIEZFQVRfQ1JZUFQgfHwgRkVBVF9QRVJTSVNURU5UX1VORE8gKi8KZGlmZiAtLWdpdCBhL3NyYy9zcGVsbC5jIGIvc3JjL3NwZWxsLmMKaW5kZXggNDdiODZhZC4uMWMzZmQwZiAxMDA2NDQKLS0tIGEvc3JjL3NwZWxsLmMKKysrIGIvc3JjL3NwZWxsLmMKQEAgLTg1NCw5ICs4NTQsNiBAQAogc3RhdGljIHZvaWQgaW50X3dvcmRsaXN0X3NwbCBfX0FSR1MoKGNoYXJfdSAqZm5hbWUpKTsKIHN0YXRpYyB2b2lkIHNwZWxsX2xvYWRfY2IgX19BUkdTKChjaGFyX3UgKmZuYW1lLCB2b2lkICpjb29raWUpKTsKIHN0YXRpYyBzbGFuZ19UICpzcGVsbF9sb2FkX2ZpbGUgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBjaGFyX3UgKmxhbmcsIHNsYW5nX1QgKm9sZF9scCwgaW50IHNpbGVudCkpOwotc3RhdGljIGludCBnZXQyYyBfX0FSR1MoKEZJTEUgKmZkKSk7Ci1zdGF0aWMgaW50IGdldDNjIF9fQVJHUygoRklMRSAqZmQpKTsKLXN0YXRpYyBpbnQgZ2V0NGMgX19BUkdTKChGSUxFICpmZCkpOwogc3RhdGljIHRpbWVfdCBnZXQ4YyBfX0FSR1MoKEZJTEUgKmZkKSk7CiBzdGF0aWMgY2hhcl91ICpyZWFkX2NudF9zdHJpbmcgX19BUkdTKChGSUxFICpmZCwgaW50IGNudF9ieXRlcywgaW50ICpsZW5wKSk7CiBzdGF0aWMgY2hhcl91ICpyZWFkX3N0cmluZyBfX0FSR1MoKEZJTEUgKmZkLCBpbnQgY250KSk7CkBAIC0yOTg4LDcgKzI5ODUsNyBAQAogLyoKICAqIFJlYWQgMiBieXRlcyBmcm9tICJmZCIgYW5kIHR1cm4gdGhlbSBpbnRvIGFuIGludCwgTVNCIGZpcnN0LgogICovCi0gICAgc3RhdGljIGludAorICAgIGludAogZ2V0MmMoZmQpCiAgICAgRklMRQkqZmQ7CiB7CkBAIC0zMDAyLDcgKzI5OTksNyBAQAogLyoKICAqIFJlYWQgMyBieXRlcyBmcm9tICJmZCIgYW5kIHR1cm4gdGhlbSBpbnRvIGFuIGludCwgTVNCIGZpcnN0LgogICovCi0gICAgc3RhdGljIGludAorICAgIGludAogZ2V0M2MoZmQpCiAgICAgRklMRQkqZmQ7CiB7CkBAIC0zMDE3LDcgKzMwMTQsNyBAQAogLyoKICAqIFJlYWQgNCBieXRlcyBmcm9tICJmZCIgYW5kIHR1cm4gdGhlbSBpbnRvIGFuIGludCwgTVNCIGZpcnN0LgogICovCi0gICAgc3RhdGljIGludAorICAgIGludAogZ2V0NGMoZmQpCiAgICAgRklMRQkqZmQ7CiB7CkBAIC04MDE4LDcgKzgwMTUsNyBAQAogLyoKICAqIFdyaXRlIGEgbnVtYmVyIHRvIGZpbGUgImZkIiwgTVNCIGZpcnN0LCBpbiAibGVuIiBieXRlcy4KICAqLwotICAgIHZvaWQKKyAgICBpbnQKIHB1dF9ieXRlcyhmZCwgbnIsIGxlbikKICAgICBGSUxFICAgICpmZDsKICAgICBsb25nX3UgIG5yOwpAQCAtODAyNyw3ICs4MDI0LDkgQEAKICAgICBpbnQJICAgIGk7CiAKICAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkKLQlwdXRjKChpbnQpKG5yID4+IChpICogOCkpLCBmZCk7CisJaWYgKHB1dGMoKGludCkobnIgPj4gKGkgKiA4KSksIGZkKSA9PSBFT0YpCisJICAgIHJldHVybiBGQUlMOworICAgIHJldHVybiBPSzsKIH0KIAogI2lmZGVmIF9NU0NfVkVSCmRpZmYgLS1naXQgYS9zcmMvc3RydWN0cy5oIGIvc3JjL3N0cnVjdHMuaAppbmRleCBhMzRmYTY2Li5hNzYzMmI4IDEwMDY0NAotLS0gYS9zcmMvc3RydWN0cy5oCisrKyBiL3NyYy9zdHJ1Y3RzLmgKQEAgLTE0NjUsNiArMTQ2NSw5IEBACiAgICAgY2hhcl91CSpiX3BfZGljdDsJLyogJ2RpY3Rpb25hcnknIGxvY2FsIHZhbHVlICovCiAgICAgY2hhcl91CSpiX3BfdHNyOwkvKiAndGhlc2F1cnVzJyBsb2NhbCB2YWx1ZSAqLwogI2VuZGlmCisjaWZkZWYgRkVBVF9QRVJTSVNURU5UX1VORE8KKyAgICBpbnQJCWJfcF91ZGY7CS8qICd1bmRvZmlsZScgKi8KKyNlbmRpZgogCiAgICAgLyogZW5kIG9mIGJ1ZmZlciBvcHRpb25zICovCiAKQEAgLTIzOTIsMyArMjM5NSw5IEBACiAjZGVmaW5lIENQVF9LSU5EICAgIDIJLyogImtpbmQiICovCiAjZGVmaW5lIENQVF9JTkZPICAgIDMJLyogImluZm8iICovCiAjZGVmaW5lIENQVF9DT1VOVCAgIDQJLyogTnVtYmVyIG9mIGVudHJpZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBVSU5UMzJfVCB0b3RhbFsyXTsKKyAgVUlOVDMyX1Qgc3RhdGVbOF07CisgIGNoYXJfdSAgIGJ1ZmZlcls2NF07Cit9IGNvbnRleHRfc2hhMjU2X1Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlZmlsZSBiL3NyYy90ZXN0ZGlyL01ha2VmaWxlCmluZGV4IDZhOGU4NWYuLjUzZTA4NTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0ZGlyL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0ZGlyL01ha2VmaWxlCkBAIC02OSw3ICs2OSw3IEBACiAJCSAgZmkgXAogCQllbHNlIGVjaG8gJCogTk8gT1VUUFVUID4+dGVzdC5sb2c7IFwKIAkJZmkiCi0JIy1ybSAtcmYgWCogdGVzdC5vayB2aW1pbmZvCisJLXJtIC1yZiBYKiB0ZXN0Lm9rIHZpbWluZm8KIAogdGVzdDQ5Lm91dDogdGVzdDQ5LnZpbQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NjEuaW4gYi9zcmMvdGVzdGRpci90ZXN0NjEuaW4KaW5kZXggN2NlNzJlNi4uOTA5ZDEyMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3RkaXIvdGVzdDYxLmluCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q2MS5pbgpAQCAtNTAsNiArNTAsNTMgQEAKIG9iYmJiGzpzZXQgdWw9MTAwCiA6dW5kb2pvaW4KIG9jY2NjG3U6LncgPj50ZXN0Lm91dAorOiIKKzoiIFRlc3QgJ3VuZG9maWxlJzogZmlyc3QgYSBzaW1wbGUgb25lLWxpbmUgY2hhbmdlLgorOnNldCBub2NwIHVsPTEwMCB1bmRvZmlsZQorOmUhIFh0ZXN0ZmlsZQorZ2dkR2l0aGlzIGlzIG9uZSBsaW5lGzpzZXQgdWw9MTAwCis6cy9vbmUvT05FLworOnNldCB1bD0xMDAKKzp3Cis6YndpcGUhCis6ZSBYdGVzdGZpbGUKK3U6LncgPj50ZXN0Lm91dAorOiIKKzoiIFRlc3QgJ3VuZG9maWxlJywgY2hhbmdlIGluIG9yaWdpbmFsIGZpbGUgZmFpbHMgY2hlY2sKKzpzZXQgbm91bmRvZmlsZQorOmUhIFh0ZXN0ZmlsZQorOnMvbGluZS9MaW5lLworOncKKzpzZXQgdW5kb2ZpbGUKKzpid2lwZSEKKzplIFh0ZXN0ZmlsZQordToudyA+PnRlc3Qub3V0Cis6IgorOiIgVGVzdCAndW5kb2ZpbGUnLCBhZGQgMTAgbGluZXMsIGRlbGV0ZSA2IGxpbmVzLCB1bmRvIDMKKzpzZXQgdW5kb2ZpbGUKK2dnZEdpb25lCit0d28KK3RocmVlCitmb3VyCitmaXZlCitzaXgKK3NldmVuCitlaWdodAorbmluZQordGVuGzpzZXQgdWw9MTAwCiszR2RkOnNldCB1bD0xMDAKK2RkOnNldCB1bD0xMDAKK2RkOnNldCB1bD0xMDAKK2RkOnNldCB1bD0xMDAKK2RkOnNldCB1bD0xMDAKK2RkOnNldCB1bD0xMDAKKzp3Cis6YndpcGUhCis6ZSBYdGVzdGZpbGUKK3V1dTp3ID4+dGVzdC5vdXQKKzoiCis6IiBSZW5hbWUgdGhlIHVuZG8gZmlsZSBzbyB0aGF0IGl0IGdldHMgY2xlYW5lZCB1cC4KKzpjYWxsIHJlbmFtZSgiLlh0ZXN0ZmlsZS51bn4iLCAiWHRlc3R1bmRvIikKIDpxYSEKIEVORFRFU1QKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDYxLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDYxLm9rCmluZGV4IDAyMGRkNTMuLmVhODhjMDcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0ZGlyL3Rlc3Q2MS5vaworKysgYi9zcmMvdGVzdGRpci90ZXN0NjEub2sKQEAgLTIyLDMgKzIyLDEyIEBACiAxMjM0NTZhYmMKIGFhYWEKIGFhYWEKK3RoaXMgaXMgb25lIGxpbmUKK3RoaXMgaXMgT05FIExpbmUKK29uZQordHdvCitzaXgKK3NldmVuCitlaWdodAorbmluZQordGVuCmRpZmYgLS1naXQgYS9zcmMvdW5kby5jIGIvc3JjL3VuZG8uYwppbmRleCA0MDM1NDY2Li5iNDk0NWQxIDEwMDY0NAotLS0gYS9zcmMvdW5kby5jCisrKyBiL3NyYy91bmRvLmMKQEAgLTk5LDYgKzk5LDE0IEBACiBzdGF0aWMgdm9pZCB1X2ZyZWVicmFuY2ggX19BUkdTKChidWZfVCAqYnVmLCB1X2hlYWRlcl9UICp1aHAsIHVfaGVhZGVyX1QgKip1aHBwKSk7CiBzdGF0aWMgdm9pZCB1X2ZyZWVlbnRyaWVzIF9fQVJHUygoYnVmX1QgKmJ1ZiwgdV9oZWFkZXJfVCAqdWhwLCB1X2hlYWRlcl9UICoqdWhwcCkpOwogc3RhdGljIHZvaWQgdV9mcmVlZW50cnkgX19BUkdTKCh1X2VudHJ5X1QgKiwgbG9uZykpOworI2lmZGVmIEZFQVRfUEVSU0lTVEVOVF9VTkRPCitzdGF0aWMgdm9pZCB1bnNlcmlhbGl6ZV9wb3MgX19BUkdTKChwb3NfVCAqcG9zLCBGSUxFICpmcCkpOworc3RhdGljIHZvaWQgdW5zZXJpYWxpemVfdmlzdWFsaW5mbyBfX0FSR1MoKHZpc3VhbGluZm9fVCAqaW5mbywgRklMRSAqZnApKTsKK3N0YXRpYyBjaGFyX3UgKnVfZ2V0X3VuZG9fZmlsZV9uYW1lIF9fQVJHUygoY2hhcl91ICosIGludCByZWFkaW5nKSk7CitzdGF0aWMgaW50IHNlcmlhbGl6ZV91ZXAgX19BUkdTKCh1X2VudHJ5X1QgKnVlcCwgRklMRSAqZnApKTsKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZV9wb3MgX19BUkdTKChwb3NfVCBwb3MsIEZJTEUgKmZwKSk7CitzdGF0aWMgdm9pZCBzZXJpYWxpemVfdmlzdWFsaW5mbyBfX0FSR1MoKHZpc3VhbGluZm9fVCBpbmZvLCBGSUxFICpmcCkpOworI2VuZGlmCiAKICNpZmRlZiBVX1VTRV9NQUxMT0MKICMgZGVmaW5lIFVfRlJFRV9MSU5FKHB0cikgdmltX2ZyZWUocHRyKQpAQCAtMTE5LDYgKzEyNyw4IEBACiAgKi8KIHN0YXRpYyBpbnQJdW5kb191bmRvZXMgPSBGQUxTRTsKIAorc3RhdGljIGludAlsYXN0bWFyayA9IDA7CisKICNpZmRlZiBVX0RFQlVHCiAvKgogICogQ2hlY2sgdGhlIHVuZG8gc3RydWN0dXJlcyBmb3IgYmVpbmcgdmFsaWQuICBQcmludCBhIHdhcm5pbmcgd2hlbiBzb21ldGhpbmcKQEAgLTY1Miw2ICs2NjIsNzk1IEBACiAgICAgcmV0dXJuIEZBSUw7CiB9CiAKKyNpZmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworCisjIGRlZmluZSBVRl9TVEFSVF9NQUdJQwkgICAgMHhmZWFjCS8qIG1hZ2ljIGF0IHN0YXJ0IG9mIHVuZG9maWxlICovCisjIGRlZmluZSBVRl9IRUFERVJfTUFHSUMgICAgMHg1ZmQwCS8qIG1hZ2ljIGF0IHN0YXJ0IG9mIGhlYWRlciAqLworIyBkZWZpbmUgVUZfRU5EX01BR0lDCSAgICAweGU3YWEJLyogbWFnaWMgYWZ0ZXIgbGFzdCBoZWFkZXIgKi8KKyMgZGVmaW5lIFVGX1ZFUlNJT04JICAgIDEJCS8qIDItYnl0ZSB1bmRvZmlsZSB2ZXJzaW9uIG51bWJlciAqLworCisvKgorICogQ29tcHV0ZSB0aGUgaGFzaCBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIHRleHQgaW50byBoYXNoW1VORE9fSEFTSF9TSVpFXS4KKyAqLworICAgIHZvaWQKK3VfY29tcHV0ZV9oYXNoKGhhc2gpCisgICAgY2hhcl91ICpoYXNoOworeworICAgIGNvbnRleHRfc2hhMjU2X1QJY3R4OworICAgIGxpbmVucl9UCQlsbnVtOworICAgIGNoYXJfdQkJKnA7CisKKyAgICBzaGEyNTZfc3RhcnQoJmN0eCk7CisgICAgZm9yIChsbnVtID0gMTsgbG51bSA8IGN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OyArK2xudW0pCisgICAgeworCXAgPSBtbF9nZXQobG51bSk7CisJc2hhMjU2X3VwZGF0ZSgmY3R4LCBwLCBTVFJMRU4ocCkgKyAxKTsKKyAgICB9CisgICAgc2hhMjU2X2ZpbmlzaCgmY3R4LCBoYXNoKTsKK30KKworLyoKKyAqIFVuc2VyaWFsaXplIHRoZSBwb3NfVCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiBmcC4KKyAqLworICAgIHN0YXRpYyB2b2lkCit1bnNlcmlhbGl6ZV9wb3MocG9zLCBmcCkKKyAgICBwb3NfVCAqcG9zOworICAgIEZJTEUgICpmcDsKK3sKKyAgICBwb3MtPmxudW0gPSBnZXQ0YyhmcCk7CisgICAgcG9zLT5jb2wgPSBnZXQ0YyhmcCk7CisjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAorICAgIHBvcy0+Y29sYWRkID0gZ2V0NGMoZnApOworI2Vsc2UKKyAgICAodm9pZClnZXQ0YyhmcCk7CisjZW5kaWYKK30KKworLyoKKyAqIFVuc2VyaWFsaXplIHRoZSB2aXN1YWxpbmZvX1QgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gZnAuCisgKi8KKyAgICBzdGF0aWMgdm9pZAordW5zZXJpYWxpemVfdmlzdWFsaW5mbyhpbmZvLCBmcCkKKyAgICB2aXN1YWxpbmZvX1QgICAgKmluZm87CisgICAgRklMRQkgICAgKmZwOworeworICAgIHVuc2VyaWFsaXplX3BvcygmaW5mby0+dmlfc3RhcnQsIGZwKTsKKyAgICB1bnNlcmlhbGl6ZV9wb3MoJmluZm8tPnZpX2VuZCwgZnApOworICAgIGluZm8tPnZpX21vZGUgPSBnZXQ0YyhmcCk7CisgICAgaW5mby0+dmlfY3Vyc3dhbnQgPSBnZXQ0YyhmcCk7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gYWxsb2NhdGVkIHN0cmluZyBvZiB0aGUgZnVsbCBwYXRoIG9mIHRoZSB0YXJnZXQgdW5kb2ZpbGUuCisgKiBXaGVuICJyZWFkaW5nIiBpcyBUUlVFIGZpbmQgdGhlIGZpbGUgdG8gcmVhZCwgZ28gb3ZlciBhbGwgZGlyZWN0b3JpZXMgaW4KKyAqICd1bmRvZGlyJy4KKyAqIFdoZW4gInJlYWRpbmciIGlzIEZBTFNFIHVzZSB0aGUgZmlyc3QgbmFtZSB3aGVyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAqLworICAgIHN0YXRpYyBjaGFyX3UgKgordV9nZXRfdW5kb19maWxlX25hbWUoYnVmX2ZmbmFtZSwgcmVhZGluZykKKyAgICBjaGFyX3UJKmJ1Zl9mZm5hbWU7CisgICAgaW50CQlyZWFkaW5nOworeworICAgIGNoYXJfdQkqZGlycDsKKyAgICBjaGFyX3UJZGlyX25hbWVbSU9TSVpFICsgMV07CisgICAgY2hhcl91CSptdW5nZWRfbmFtZSA9IE5VTEw7CisgICAgY2hhcl91CSp1bmRvX2ZpbGVfbmFtZSA9IE5VTEw7CisgICAgaW50CQlkaXJfbGVuOworICAgIGNoYXJfdQkqcDsKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBjaGFyX3UJKmZmbmFtZSA9IGJ1Zl9mZm5hbWU7CisjaWZkZWYgSEFWRV9SRUFETElOSworICAgIGNoYXJfdQlmbmFtZV9idWZbTUFYUEFUSExdOworI2VuZGlmCisKKyAgICBpZiAoZmZuYW1lID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBIQVZFX1JFQURMSU5LCisgICAgLyogRXhwYW5kIHN5bWxpbmsgaW4gdGhlIGZpbGUgbmFtZSwgc28gdGhhdCB3ZSBwdXQgdGhlIHVuZG8gZmlsZSB3aXRoIHRoZQorICAgICAqIGFjdHVhbCBmaWxlIGluc3RlYWQgb2Ygd2l0aCB0aGUgc3ltbGluay4gKi8KKyAgICBpZiAocmVzb2x2ZV9zeW1saW5rKGZmbmFtZSwgZm5hbWVfYnVmKSA9PSBPSykKKwlmZm5hbWUgPSBmbmFtZV9idWY7CisjZW5kaWYKKworICAgIC8qIExvb3Agb3ZlciAndW5kb2RpcicuICBXaGVuIHJlYWRpbmcgZmluZCB0aGUgZmlyc3QgZmlsZSB0aGF0IGV4aXN0cy4KKyAgICAgKiBXaGVuIG5vdCByZWFkaW5nIHVzZSB0aGUgZmlyc3QgZGlyZWN0b3J5IHRoYXQgZXhpc3RzIG9yICIuIi4gKi8KKyAgICBkaXJwID0gcF91ZGlyOworICAgIHdoaWxlICgqZGlycCAhPSBOVUwpCisgICAgeworICAgICAgICBkaXJfbGVuID0gY29weV9vcHRpb25fcGFydCgmZGlycCwgZGlyX25hbWUsIElPU0laRSwgIiwiKTsKKwlpZiAoZGlyX2xlbiA9PSAxICYmIGRpcl9uYW1lWzBdID09ICcuJykKKwl7CisJICAgIC8qIFVzZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgZmZuYW1lLAorCSAgICAgKiAiZGlyL25hbWUiIC0+ICJkaXIvLm5hbWUudW5+IiAqLworCSAgICB1bmRvX2ZpbGVfbmFtZSA9IHZpbV9zdHJuc2F2ZShmZm5hbWUsIFNUUkxFTihmZm5hbWUpICsgNSk7CisJICAgIGlmICh1bmRvX2ZpbGVfbmFtZSA9PSBOVUxMKQorCQlicmVhazsKKwkgICAgcCA9IGdldHRhaWwodW5kb19maWxlX25hbWUpOworCSAgICBtY2hfbWVtbW92ZShwICsgMSwgcCwgU1RSTEVOKHApICsgMSk7CisJICAgICpwID0gJy4nOworCSAgICBTVFJDQVQocCwgIi51bn4iKTsKKwl9CisJZWxzZQorCXsKKwkgICAgZGlyX25hbWVbZGlyX2xlbl0gPSBOVUw7CisJICAgIGlmIChtY2hfaXNkaXIoZGlyX25hbWUpKQorCSAgICB7CisJCWlmIChtdW5nZWRfbmFtZSA9PSBOVUxMKQorCQl7CisJCSAgICBtdW5nZWRfbmFtZSA9IHZpbV9zdHJzYXZlKGZmbmFtZSk7CisJCSAgICBpZiAobXVuZ2VkX25hbWUgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQkgICAgZm9yIChwID0gbXVuZ2VkX25hbWU7ICpwICE9IE5VTDsgbWJfcHRyX2FkdihwKSkKKwkJCWlmICh2aW1faXNwYXRoc2VwKCpwKSkKKwkJCSAgICAqcCA9ICclJzsKKwkJfQorCQl1bmRvX2ZpbGVfbmFtZSA9IGNvbmNhdF9mbmFtZXMoZGlyX25hbWUsIG11bmdlZF9uYW1lLCBUUlVFKTsKKwkgICAgfQorCX0KKworCS8qIFdoZW4gcmVhZGluZyBjaGVjayBpZiB0aGUgZmlsZSBleGlzdHMuICovCisJaWYgKHVuZG9fZmlsZV9uYW1lICE9IE5VTEwgJiYgKCFyZWFkaW5nCisJCQkgICAgICAgfHwgbWNoX3N0YXQoKGNoYXIgKil1bmRvX2ZpbGVfbmFtZSwgJnN0KSA+PSAwKSkKKwkgICAgYnJlYWs7CisJdmltX2ZyZWUodW5kb19maWxlX25hbWUpOworCXVuZG9fZmlsZV9uYW1lID0gTlVMTDsKKyAgICB9CisKKyAgICB2aW1fZnJlZShtdW5nZWRfbmFtZSk7CisgICAgcmV0dXJuIHVuZG9fZmlsZV9uYW1lOworfQorCisvKgorICogTG9hZCB0aGUgdW5kbyB0cmVlIGZyb20gYW4gdW5kbyBmaWxlLgorICogSWYgIm5hbWUiIGlzIG5vdCBOVUxMIHVzZSBpdCBhcyB0aGUgdW5kbyBmaWxlIG5hbWUuICBUaGlzIGFsc28gbWVhbnMgYmVpbmcKKyAqIGEgYml0IG1vcmUgdmVyYm9zZS4KKyAqIE90aGVyd2lzZSB1c2UgY3VyYnVmLT5iX2ZmbmFtZSB0byBnZW5lcmF0ZSB0aGUgdW5kbyBmaWxlIG5hbWUuCisgKiAiaGFzaFtVTkRPX0hBU0hfU0laRV0iIG11c3QgYmUgdGhlIGhhc2ggdmFsdWUgb2YgdGhlIGJ1ZmZlciB0ZXh0LgorICovCisgICAgdm9pZAordV9yZWFkX3VuZG8obmFtZSwgaGFzaCkKKyAgICBjaGFyX3UgKm5hbWU7CisgICAgY2hhcl91ICpoYXNoOworeworICAgIGNoYXJfdQkqZmlsZV9uYW1lOworICAgIEZJTEUJKmZwOworICAgIGxvbmcJbWFnaWMsIHZlcnNpb24sIHN0cl9sZW47CisgICAgY2hhcl91CSpsaW5lX3B0ciA9IE5VTEw7CisgICAgbGluZW5yX1QJbGluZV9sbnVtOworICAgIGNvbG5yX1QJbGluZV9jb2xucjsKKyAgICBsaW5lbnJfVAlsaW5lX2NvdW50OworICAgIGludAkJdWVwX2xlbjsKKyAgICBpbnQJCWxpbmVfbGVuOworICAgIGludAkJbnVtX2hlYWQ7CisgICAgbG9uZwlvbGRfaGVhZGVyX3NlcSwgbmV3X2hlYWRlcl9zZXEsIGN1cl9oZWFkZXJfc2VxOworICAgIGxvbmcJc2VxX2xhc3QsIHNlcV9jdXI7CisgICAgc2hvcnQJb2xkX2lkeCA9IC0xLCBuZXdfaWR4ID0gLTEsIGN1cl9pZHggPSAtMTsKKyAgICBsb25nCW51bV9yZWFkX3VocHMgPSAwOworICAgIHRpbWVfdAlzZXFfdGltZTsKKyAgICBpbnQJCWksIGo7CisgICAgaW50CQljOworICAgIHNob3J0CWZvdW5kX2ZpcnN0X3VlcCA9IDA7CisgICAgY2hhcl91CSoqYXJyYXk7CisgICAgY2hhcl91CSpsaW5lOworICAgIHVfZW50cnlfVAkqdWVwLCAqbGFzdF91ZXAsICpudWVwOworICAgIHVfaGVhZGVyX1QJKnVocDsKKyAgICB1X2hlYWRlcl9UCSoqdWhwX3RhYmxlID0gTlVMTDsKKyAgICBjaGFyX3UJcmVhZF9oYXNoW1VORE9fSEFTSF9TSVpFXTsKKworICAgIGlmIChuYW1lID09IE5VTEwpCisgICAgeworICAgICAgICBmaWxlX25hbWUgPSB1X2dldF91bmRvX2ZpbGVfbmFtZShjdXJidWYtPmJfZmZuYW1lLCBUUlVFKTsKKwlpZiAoZmlsZV9uYW1lID09IE5VTEwpCisJICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBmaWxlX25hbWUgPSBuYW1lOworCisgICAgaWYgKHBfdmVyYm9zZSA+IDApCisJc21zZygoY2hhcl91ICopXygiUmVhZGluZyB1bmRvIGZpbGU6ICVzIiksIGZpbGVfbmFtZSk7CisgICAgZnAgPSBtY2hfZm9wZW4oKGNoYXIgKilmaWxlX25hbWUsICJyIik7CisgICAgaWYgKGZwID09IE5VTEwpCisgICAgeworICAgICAgICBpZiAobmFtZSAhPSBOVUxMIHx8IHBfdmVyYm9zZSA+IDApCisgICAgICAgICAgICBFTVNHMihfKCJFODIyOiBDYW5ub3Qgb3BlbiB1bmRvIGZpbGUgZm9yIHJlYWRpbmc6ICVzIiksIGZpbGVfbmFtZSk7CisJZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvKiBCZWdpbiBvdmVyYWxsIGZpbGUgaW5mb3JtYXRpb24gKi8KKyAgICBtYWdpYyA9IGdldDJjKGZwKTsKKyAgICBpZiAobWFnaWMgIT0gVUZfU1RBUlRfTUFHSUMpCisgICAgeworICAgICAgICBFTVNHMihfKCJFODIzOiBDb3JydXB0ZWQgdW5kbyBmaWxlOiAlcyIpLCBmaWxlX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICB2ZXJzaW9uID0gZ2V0MmMoZnApOworICAgIGlmICh2ZXJzaW9uICE9IFVGX1ZFUlNJT04pCisgICAgeworICAgICAgICBFTVNHMihfKCJFODI0OiBJbmNvbXBhdGlibGUgdW5kbyBmaWxlOiAlcyIpLCBmaWxlX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGZyZWFkKHJlYWRfaGFzaCwgVU5ET19IQVNIX1NJWkUsIDEsIGZwKTsKKyAgICBsaW5lX2NvdW50ID0gKGxpbmVucl9UKWdldDRjKGZwKTsKKyAgICBpZiAobWVtY21wKGhhc2gsIHJlYWRfaGFzaCwgVU5ET19IQVNIX1NJWkUpICE9IDAKKwkJCQkgIHx8IGxpbmVfY291bnQgIT0gY3VyYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCisgICAgeworICAgICAgICBpZiAocF92ZXJib3NlID4gMCB8fCBuYW1lICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlcmJvc2VfZW50ZXIoKTsKKyAgICAgICAgICAgIGdpdmVfd2FybmluZygoY2hhcl91ICopXygiVW5kbyBmaWxlIGNvbnRlbnRzIGNoYW5nZWQiKSwgVFJVRSk7CisgICAgICAgICAgICB2ZXJib3NlX2xlYXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvKiBCZWdpbiB1bmRvIGRhdGEgZm9yIFUgKi8KKyAgICBzdHJfbGVuID0gZ2V0NGMoZnApOworICAgIGlmIChzdHJfbGVuIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBlbHNlIGlmIChzdHJfbGVuID4gMCkKKyAgICB7CisgICAgICAgIGlmICgobGluZV9wdHIgPSBVX0FMTE9DX0xJTkUoc3RyX2xlbikpID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyX2xlbjsgaSsrKQorICAgICAgICAgICAgbGluZV9wdHJbaV0gPSAoY2hhcl91KWdldGMoZnApOworICAgICAgICBsaW5lX3B0cltpXSA9IE5VTDsKKyAgICB9CisgICAgbGluZV9sbnVtID0gKGxpbmVucl9UKWdldDRjKGZwKTsKKyAgICBsaW5lX2NvbG5yID0gKGNvbG5yX1QpZ2V0NGMoZnApOworCisgICAgLyogQmVnaW4gZ2VuZXJhbCB1bmRvIGRhdGEgKi8KKyAgICBvbGRfaGVhZGVyX3NlcSA9IGdldDRjKGZwKTsKKyAgICBuZXdfaGVhZGVyX3NlcSA9IGdldDRjKGZwKTsKKyAgICBjdXJfaGVhZGVyX3NlcSA9IGdldDRjKGZwKTsKKyAgICBudW1faGVhZCA9IGdldDRjKGZwKTsKKyAgICBzZXFfbGFzdCA9IGdldDRjKGZwKTsKKyAgICBzZXFfY3VyID0gZ2V0NGMoZnApOworICAgIHNlcV90aW1lID0gZ2V0NGMoZnApOworCisgICAgLyogdWhwX3RhYmxlIHdpbGwgc3RvcmUgdGhlIGZyZXNobHkgY3JlYXRlZCB1bmRvIGhlYWRlcnMgd2UgYWxsb2NhdGUKKyAgICAgKiB1bnRpbCB3ZSBpbnNlcnQgdGhlbSBpbnRvIGN1cmJ1Zi4gVGhlIHRhYmxlIHJlbWFpbnMgc29ydGVkIGJ5IHRoZQorICAgICAqIHNlcXVlbmNlIG51bWJlcnMgb2YgdGhlIGhlYWRlcnMuICovCisgICAgdWhwX3RhYmxlID0gKHVfaGVhZGVyX1QgKiopVV9BTExPQ19MSU5FKG51bV9oZWFkICogc2l6ZW9mKHVfaGVhZGVyX1QgKikpOworICAgIGlmICh1aHBfdGFibGUgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB2aW1fbWVtc2V0KHVocF90YWJsZSwgMCwgbnVtX2hlYWQgKiBzaXplb2YodV9oZWFkZXJfVCAqKSk7CisKKyAgICBjID0gZ2V0MmMoZnApOworICAgIHdoaWxlIChjID09IFVGX0hFQURFUl9NQUdJQykKKyAgICB7CisgICAgICAgIGZvdW5kX2ZpcnN0X3VlcCA9IDA7CisgICAgICAgIHVocCA9ICh1X2hlYWRlcl9UICopVV9BTExPQ19MSU5FKCh1bnNpZ25lZClzaXplb2YodV9oZWFkZXJfVCkpOworICAgICAgICBpZiAodWhwID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB2aW1fbWVtc2V0KHVocCwgMCwgc2l6ZW9mKHVfaGVhZGVyX1QpKTsKKyAgICAgICAgLyogV2UncmUgbm90IGFjdHVhbGx5IHRyeWluZyB0byBzdG9yZSBwb2ludGVycyBoZXJlLiBXZSdyZSBqdXN0IHN0b3JpbmcKKyAgICAgICAgICogSURzIHNvIHdlIGNhbiBzd2l6emxlIHRoZW0gaW50byBwb2ludGVycyBsYXRlciAtIGhlbmNlIHRoZSB0eXBlCisJICogY2FzdC4gKi8KKyAgICAgICAgdWhwLT51aF9uZXh0ID0gKHVfaGVhZGVyX1QgKikobG9uZylnZXQ0YyhmcCk7CisgICAgICAgIHVocC0+dWhfcHJldiA9ICh1X2hlYWRlcl9UICopKGxvbmcpZ2V0NGMoZnApOworICAgICAgICB1aHAtPnVoX2FsdF9uZXh0ID0gKHVfaGVhZGVyX1QgKikobG9uZylnZXQ0YyhmcCk7CisgICAgICAgIHVocC0+dWhfYWx0X3ByZXYgPSAodV9oZWFkZXJfVCAqKShsb25nKWdldDRjKGZwKTsKKyAgICAgICAgdWhwLT51aF9zZXEgPSBnZXQ0YyhmcCk7CisgICAgICAgIGlmICh1aHAtPnVoX3NlcSA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFTVNHMihfKCJFODI1OiBVbmRvIGZpbGUgY29ycnVwdGlvbjogaW52YWxpZCB1aF9zZXEuOiAlcyIpLAorCQkJCQkJCQkgICBmaWxlX25hbWUpOworICAgICAgICAgICAgVV9GUkVFX0xJTkUodWhwKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgdWhwLT51aF93YWxrID0gMDsKKyAgICAgICAgdW5zZXJpYWxpemVfcG9zKCZ1aHAtPnVoX2N1cnNvciwgZnApOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICAgICAgdWhwLT51aF9jdXJzb3JfdmNvbCA9IGdldDRjKGZwKTsKKyNlbHNlCisgICAgICAgICh2b2lkKWdldDRjKGZwKTsKKyNlbmRpZgorICAgICAgICB1aHAtPnVoX2ZsYWdzID0gZ2V0MmMoZnApOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTk1BUktTOyArK2kpCisgICAgICAgICAgICB1bnNlcmlhbGl6ZV9wb3MoJnVocC0+dWhfbmFtZWRtW2ldLCBmcCk7CisjaWZkZWYgRkVBVF9WSVNVQUwKKyAgICAgICAgdW5zZXJpYWxpemVfdmlzdWFsaW5mbygmdWhwLT51aF92aXN1YWwsIGZwKTsKKyNlbHNlCisJeworCSAgICB2aXN1YWxpbmZvX1QgaW5mbzsKKwkgICAgdW5zZXJpYWxpemVfdmlzdWFsaW5mbygmaW5mbywgZnApOworCX0KKyNlbmRpZgorICAgICAgICB1aHAtPnVoX3RpbWUgPSBnZXQ0YyhmcCk7CisKKyAgICAgICAgLyogVW5zZXJpYWxpemUgdWVwIGxpc3QuIFRoZSBmaXJzdCA0IGJ5dGVzIGlzIHRoZSBsZW5ndGggb2YgdGhlCisgICAgICAgICAqIGVudGlyZSB1ZXAgaW4gYnl0ZXMgbWludXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5ncyB3aXRoaW4uCisgICAgICAgICAqIC0xIGlzIGEgc2VudGluZWwgdmFsdWUgbWVhbmluZyBubyBtb3JlIHVlcHMuKi8KKyAgICAgICAgbGFzdF91ZXAgPSBOVUxMOworICAgICAgICB3aGlsZSAoKHVlcF9sZW4gPSBnZXQ0YyhmcCkpICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICB1ZXAgPSAodV9lbnRyeV9UICopVV9BTExPQ19MSU5FKCh1bnNpZ25lZClzaXplb2YodV9lbnRyeV9UKSk7CisgICAgICAgICAgICB2aW1fbWVtc2V0KHVlcCwgMCwgc2l6ZW9mKHVfZW50cnlfVCkpOworICAgICAgICAgICAgaWYgKHVlcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB1ZXAtPnVlX3RvcCA9IGdldDRjKGZwKTsKKyAgICAgICAgICAgIHVlcC0+dWVfYm90ID0gZ2V0NGMoZnApOworICAgICAgICAgICAgdWVwLT51ZV9sY291bnQgPSBnZXQ0YyhmcCk7CisgICAgICAgICAgICB1ZXAtPnVlX3NpemUgPSBnZXQ0YyhmcCk7CisgICAgICAgICAgICB1ZXAtPnVlX25leHQgPSBOVUxMOworICAgICAgICAgICAgYXJyYXkgPSAoY2hhcl91ICoqKVVfQUxMT0NfTElORSgKKwkJCQkgKHVuc2lnbmVkKShzaXplb2YoY2hhcl91ICopICogdWVwLT51ZV9zaXplKSk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdWVwLT51ZV9zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGluZV9sZW4gPSBnZXQ0YyhmcCk7CisgICAgICAgICAgICAgICAgLyogVV9BTExPQ19MSU5FIHByb3ZpZGVzIGFuIGV4dHJhIGJ5dGUgZm9yIHRoZSBOVUwgdGVybWluYXRvci4qLworICAgICAgICAgICAgICAgIGxpbmUgPSAoY2hhcl91ICopVV9BTExPQ19MSU5FKAorCQkJCSAgICAgICh1bnNpZ25lZCkgKHNpemVvZihjaGFyX3UpICogbGluZV9sZW4pKTsKKyAgICAgICAgICAgICAgICBpZiAobGluZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lX2xlbjsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZVtqXSA9IGdldGMoZnApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lW2pdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGxpbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1ZXAtPnVlX2FycmF5ID0gYXJyYXk7CisgICAgICAgICAgICBpZiAoZm91bmRfZmlyc3RfdWVwID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWhwLT51aF9lbnRyeSA9IHVlcDsKKyAgICAgICAgICAgICAgICBmb3VuZF9maXJzdF91ZXAgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxhc3RfdWVwLT51ZV9uZXh0ID0gdWVwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdF91ZXAgPSB1ZXA7CisgICAgICAgIH0KKworICAgICAgICAvKiBJbnNlcnRpb24gc29ydCB0aGUgdWhwIGludG8gdGhlIHRhYmxlIGJ5IGl0cyB1aF9zZXEuIFRoaXMgaXMKKyAgICAgICAgICogcmVxdWlyZWQgYmVjYXVzZSwgd2hpbGUgdGhlIG51bWJlciBvZiB1aHBzIGlzIGxpbWl0ZWQgdG8KKyAgICAgICAgICogbnVtX2hlYWRzLCBhbmQgdGhlIHVoX3NlcSBvcmRlciBpcyBtb25vdG9uaWMgd2l0aCByZXNwZWN0IHRvCisgICAgICAgICAqIGNyZWF0aW9uIHRpbWUsIHRoZSBzdGFydGluZyB1aF9zZXEgY2FuIGJlID4gMCBpZiBhbnkgdW5kb2xldmVsCisgICAgICAgICAqIGN1bGxpbmcgd2FzIGRvbmUgYXQgdW5kb2ZpbGUgd3JpdGUgdGltZSwgYW5kIHRoZXJlIGNhbiBiZSB1aF9zZXEKKyAgICAgICAgICogZ2FwcyBpbiB0aGUgdWhwcy4KKyAgICAgICAgICovCisgICAgICAgIGZvciAoaSA9IG51bV9yZWFkX3VocHMgLSAxOyBpID49IC0xOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGlmIGkgPT0gLTEsIHdlJ3ZlIGhpdCB0aGUgbGVmdG1vc3Qgc2lkZSBvZiB0aGUgdGFibGUsIHNvIGluc2VydAorICAgICAgICAgICAgICogYXQgdWhwX3RhYmxlWzBdLiAqLworICAgICAgICAgICAgaWYgKGkgPT0gLTEgfHwgdWhwLT51aF9zZXEgPiB1aHBfdGFibGVbaV0tPnVoX3NlcSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJZiB3ZSd2ZSBoYWQgdG8gbW92ZSBmcm9tIHRoZSByaWdodG1vc3Qgc2lkZSBvZiB0aGUgdGFibGUsCisgICAgICAgICAgICAgICAgICogd2UgaGF2ZSB0byBzaGlmdCBldmVyeXRoaW5nIHRvIHRoZSByaWdodCBieSBvbmUgc3BvdC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaSA8IG51bV9yZWFkX3VocHMgLSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtbW92ZSh1aHBfdGFibGUgKyBpICsgMiwgdWhwX3RhYmxlICsgaSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV9yZWFkX3VocHMgLSBpKSAqIHNpemVvZih1X2hlYWRlcl9UICopKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdWhwX3RhYmxlW2kgKyAxXSA9IHVocDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHVocC0+dWhfc2VxID09IHVocF90YWJsZVtpXS0+dWhfc2VxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVNU0cyKF8oIkU4MjYgVW5kbyBmaWxlIGNvcnJ1cHRpb246IGR1cGxpY2F0ZSB1aF9zZXE6ICVzIiksCisJCQkJCQkJCSAgIGZpbGVfbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBudW1fcmVhZF91aHBzKys7CisJYyA9IGdldDJjKGZwKTsKKyAgICB9CisKKyAgICBpZiAoYyAhPSBVRl9FTkRfTUFHSUMpCisgICAgeworCUVNU0cyKF8oIkU4Mjc6IFVuZG8gZmlsZSBjb3JydXB0aW9uOyBubyBlbmQgbWFya2VyOiAlcyIpLCBmaWxlX25hbWUpOworCWdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLyogV2UndmUgb3JnYW5pemVkIGFsbCBvZiB0aGUgdWhwcyBpbnRvIGEgdGFibGUgc29ydGVkIGJ5IHVoX3NlcS4gTm93IHdlCisgICAgICogaXRlcmF0ZSB0aHJvdWdoIHRoZSB0YWJsZSBhbmQgc3dpenpsZSBlYWNoIHNlcXVlbmNlIG51bWJlciB3ZSd2ZQorICAgICAqIHN0b3JlZCBpbiB1aF9mb28gaW50byBhIHBvaW50ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgaGVhZGVyIHdpdGggdGhhdAorICAgICAqIHNlcXVlbmNlIG51bWJlci4gVGhlbiBmcmVlIGN1cmJ1ZidzIG9sZCB1bmRvIHN0cnVjdHVyZSwgZ2l2ZSBjdXJidWYKKyAgICAgKiB0aGUgdXBkYXRlZCB7b2xkLG5ldyxjdXJ9aGVhZCBwb2ludGVycywgYW5kIHRoZW4gZnJlZSB0aGUgdGFibGUuICovCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9oZWFkOyBpKyspCisgICAgeworICAgICAgICB1aHAgPSB1aHBfdGFibGVbaV07CisgICAgICAgIGlmICh1aHAgPT0gTlVMTCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtX2hlYWQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHVocF90YWJsZVtqXSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHVocF90YWJsZVtqXS0+dWhfc2VxID09IChsb25nKXVocC0+dWhfbmV4dCkKKyAgICAgICAgICAgICAgICB1aHAtPnVoX25leHQgPSB1aHBfdGFibGVbal07CisgICAgICAgICAgICBpZiAodWhwX3RhYmxlW2pdLT51aF9zZXEgPT0gKGxvbmcpdWhwLT51aF9wcmV2KQorICAgICAgICAgICAgICAgIHVocC0+dWhfcHJldiA9IHVocF90YWJsZVtqXTsKKyAgICAgICAgICAgIGlmICh1aHBfdGFibGVbal0tPnVoX3NlcSA9PSAobG9uZyl1aHAtPnVoX2FsdF9uZXh0KQorICAgICAgICAgICAgICAgIHVocC0+dWhfYWx0X25leHQgPSB1aHBfdGFibGVbal07CisgICAgICAgICAgICBpZiAodWhwX3RhYmxlW2pdLT51aF9zZXEgPT0gKGxvbmcpdWhwLT51aF9hbHRfcHJldikKKyAgICAgICAgICAgICAgICB1aHAtPnVoX2FsdF9wcmV2ID0gdWhwX3RhYmxlW2pdOworICAgICAgICB9CisgICAgICAgIGlmIChvbGRfaGVhZGVyX3NlcSA+IDAgJiYgb2xkX2lkeCA8IDAgJiYgdWhwLT51aF9zZXEgPT0gb2xkX2hlYWRlcl9zZXEpCisgICAgICAgICAgICBvbGRfaWR4ID0gaTsKKyAgICAgICAgaWYgKG5ld19oZWFkZXJfc2VxID4gMCAmJiBuZXdfaWR4IDwgMCAmJiB1aHAtPnVoX3NlcSA9PSBuZXdfaGVhZGVyX3NlcSkKKyAgICAgICAgICAgIG5ld19pZHggPSBpOworICAgICAgICBpZiAoY3VyX2hlYWRlcl9zZXEgPiAwICYmIGN1cl9pZHggPCAwICYmIHVocC0+dWhfc2VxID09IGN1cl9oZWFkZXJfc2VxKQorICAgICAgICAgICAgY3VyX2lkeCA9IGk7CisgICAgfQorICAgIHVfYmxvY2tmcmVlKGN1cmJ1Zik7CisgICAgY3VyYnVmLT5iX3Vfb2xkaGVhZCA9IG9sZF9pZHggPCAwID8gMCA6IHVocF90YWJsZVtvbGRfaWR4XTsKKyAgICBjdXJidWYtPmJfdV9uZXdoZWFkID0gbmV3X2lkeCA8IDAgPyAwIDogdWhwX3RhYmxlW25ld19pZHhdOworICAgIGN1cmJ1Zi0+Yl91X2N1cmhlYWQgPSBjdXJfaWR4IDwgMCA/IDAgOiB1aHBfdGFibGVbY3VyX2lkeF07CisgICAgY3VyYnVmLT5iX3VfbGluZV9wdHIgPSBsaW5lX3B0cjsKKyAgICBjdXJidWYtPmJfdV9saW5lX2xudW0gPSBsaW5lX2xudW07CisgICAgY3VyYnVmLT5iX3VfbGluZV9jb2xuciA9IGxpbmVfY29sbnI7CisgICAgY3VyYnVmLT5iX3VfbnVtaGVhZCA9IG51bV9oZWFkOworICAgIGN1cmJ1Zi0+Yl91X3NlcV9sYXN0ID0gc2VxX2xhc3Q7CisgICAgY3VyYnVmLT5iX3Vfc2VxX2N1ciA9IHNlcV9jdXI7CisgICAgY3VyYnVmLT5iX3Vfc2VxX3RpbWUgPSBzZXFfdGltZTsKKyAgICBVX0ZSRUVfTElORSh1aHBfdGFibGUpOworI2lmZGVmIFVfREVCVUcKKyAgICB1X2NoZWNrKFRSVUUpOworI2VuZGlmCisgICAgaWYgKG5hbWUgIT0gTlVMTCkKKwlzbXNnKChjaGFyX3UgKilfKCJGaW5pc2hlZCByZWFkaW5nIHVuZG8gZmlsZSAlcyIpLCBmaWxlX25hbWUpOworICAgIGdvdG8gdGhlZW5kOworCitlcnJvcjoKKyAgICBpZiAobGluZV9wdHIgIT0gTlVMTCkKKyAgICAgICAgVV9GUkVFX0xJTkUobGluZV9wdHIpOworICAgIGlmICh1aHBfdGFibGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1faGVhZDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodWhwX3RhYmxlW2ldICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWVwID0gdWhwX3RhYmxlW2ldLT51aF9lbnRyeTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodWVwICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBudWVwID0gdWVwLT51ZV9uZXh0OworICAgICAgICAgICAgICAgICAgICB1X2ZyZWVlbnRyeSh1ZXAsIHVlcC0+dWVfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHVlcCA9IG51ZXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFVfRlJFRV9MSU5FKHVocF90YWJsZVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVV9GUkVFX0xJTkUodWhwX3RhYmxlKTsKKyAgICB9CisKK3RoZWVuZDoKKyAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICBpZiAoZmlsZV9uYW1lICE9IG5hbWUpCisJdmltX2ZyZWUoZmlsZV9uYW1lKTsKKyAgICByZXR1cm47Cit9CisKKy8qCisgKiBTZXJpYWxpemUgInVlcCIgdG8gImZwIi4KKyAqLworICAgIHN0YXRpYyBpbnQKK3NlcmlhbGl6ZV91ZXAodWVwLCBmcCkKKyAgICB1X2VudHJ5X1QJKnVlcDsKKyAgICBGSUxFCSpmcDsKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgdWVwX2xlbjsKKyAgICBpbnQgKmVudHJ5X2xlbnM7CisKKyAgICBpZiAodWVwLT51ZV9zaXplID4gMCkKKyAgICAgICAgZW50cnlfbGVucyA9IChpbnQgKilhbGxvYyh1ZXAtPnVlX3NpemUgKiBzaXplb2YoaW50KSk7CisKKyAgICAvKiBEZWZpbmUgdWVwX2xlbiB0byBiZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIHVlcCBtaW51cyB0aGUgc2l6ZSBvZiBpdHMKKyAgICAgKiBjb21wb25lbnQgc3RyaW5ncywgaW4gYnl0ZXMuIFRoZSBzaXplcyBvZiB0aGUgY29tcG9uZW50IHN0cmluZ3MKKyAgICAgKiBhcmUgd3JpdHRlbiBiZWZvcmUgZWFjaCBpbmRpdmlkdWFsIHN0cmluZy4KKyAgICAgKiBXZSBoYXZlIDQgZW50cmllcyBlYWNoIG9mIDQgYnl0ZXMsIHBsdXMgdWVfc2l6ZSAqIDQgYnl0ZXMKKyAgICAgKiBvZiBzdHJpbmcgc2l6ZSBpbmZvcm1hdGlvbi4gKi8KKworICAgIHVlcF9sZW4gPSB1ZXAtPnVlX3NpemUgKiA0OworICAgIC8qIENvbGxlY3Qgc2l6aW5nIGluZm9ybWF0aW9uIGZvciBsYXRlciBzZXJpYWxpemF0aW9uLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCB1ZXAtPnVlX3NpemU7IGkrKykKKyAgICB7CisgICAgICAgIGVudHJ5X2xlbnNbaV0gPSAoaW50KVNUUkxFTih1ZXAtPnVlX2FycmF5W2ldKTsKKyAgICAgICAgdWVwX2xlbiArPSBlbnRyeV9sZW5zW2ldOworICAgIH0KKyAgICBwdXRfYnl0ZXMoZnAsIChsb25nX3UpdWVwX2xlbiwgNCk7CisgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KXVlcC0+dWVfdG9wLCA0KTsKKyAgICBwdXRfYnl0ZXMoZnAsIChsb25nX3UpdWVwLT51ZV9ib3QsIDQpOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSl1ZXAtPnVlX2xjb3VudCwgNCk7CisgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KXVlcC0+dWVfc2l6ZSwgNCk7CisgICAgZm9yIChpID0gMDsgaSA8IHVlcC0+dWVfc2l6ZTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHB1dF9ieXRlcyhmcCwgKGxvbmdfdSllbnRyeV9sZW5zW2ldLCA0KSA9PSBGQUlMKQorCSAgICByZXR1cm4gRkFJTDsKKyAgICAgICAgZnByaW50ZihmcCwgIiVzIiwgdWVwLT51ZV9hcnJheVtpXSk7CisgICAgfQorICAgIGlmICh1ZXAtPnVlX3NpemUgPiAwKQorICAgICAgICB2aW1fZnJlZShlbnRyeV9sZW5zKTsKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBTZXJpYWxpemUgInBvcyIgdG8gImZwIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXJpYWxpemVfcG9zKHBvcywgZnApCisgICAgcG9zX1QgcG9zOworICAgIEZJTEUgICpmcDsKK3sKKyAgICBwdXRfYnl0ZXMoZnAsIChsb25nX3UpcG9zLmxudW0sIDQpOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSlwb3MuY29sLCA0KTsKKyNpZmRlZiBGRUFUX1ZJUlRVQUxFRElUCisgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KXBvcy5jb2xhZGQsIDQpOworI2Vsc2UKKyAgICBwdXRfYnl0ZXMoZnAsIChsb25nX3UpMCwgNCk7CisjZW5kaWYKK30KKworLyoKKyAqIFNlcmlhbGl6ZSAiaW5mbyIgdG8gImZwIi4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzZXJpYWxpemVfdmlzdWFsaW5mbyhpbmZvLCBmcCkKKyAgICB2aXN1YWxpbmZvX1QgICAgaW5mbzsKKyAgICBGSUxFCSAgICAqZnA7Cit7CisgICAgc2VyaWFsaXplX3BvcyhpbmZvLnZpX3N0YXJ0LCBmcCk7CisgICAgc2VyaWFsaXplX3BvcyhpbmZvLnZpX2VuZCwgZnApOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSlpbmZvLnZpX21vZGUsIDQpOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSlpbmZvLnZpX2N1cnN3YW50LCA0KTsKK30KKworc3RhdGljIGNoYXJfdSBlX25vdF9vcGVuW10gPSBOXygiRTgyODogQ2Fubm90IG9wZW4gdW5kbyBmaWxlIGZvciB3cml0aW5nOiAlcyIpOworCisvKgorICogV3JpdGUgdGhlIHVuZG8gdHJlZSBpbiBhbiB1bmRvIGZpbGUuCisgKiBXaGVuICJuYW1lIiBpcyBub3QgTlVMTCwgdXNlIGl0IGFzIHRoZSBuYW1lIG9mIHRoZSB1bmRvIGZpbGUuCisgKiBPdGhlcndpc2UgdXNlIGJ1Zi0+Yl9mZm5hbWUgdG8gZ2VuZXJhdGUgdGhlIHVuZG8gZmlsZSBuYW1lLgorICogImJ1ZiIgbXVzdCBuZXZlciBiZSBudWxsLCBidWYtPmJfZmZuYW1lIGlzIHVzZWQgdG8gb2J0YWluIHRoZSBvcmlnaW5hbCBmaWxlCisgKiBwZXJtaXNzaW9ucy4KKyAqICJmb3JjZWl0IiBpcyBUUlVFIGZvciAiOnd1bmRvISIsIEZBTFNFIG90aGVyd2lzZS4KKyAqICJoYXNoW1VORE9fSEFTSF9TSVpFXSIgbXVzdCBiZSB0aGUgaGFzaCB2YWx1ZSBvZiB0aGUgYnVmZmVyIHRleHQuCisgKi8KKyAgICB2b2lkCit1X3dyaXRlX3VuZG8obmFtZSwgZm9yY2VpdCwgYnVmLCBoYXNoKQorICAgIGNoYXJfdQkqbmFtZTsKKyAgICBpbnQJCWZvcmNlaXQ7CisgICAgYnVmX1QJKmJ1ZjsKKyAgICBjaGFyX3UJKmhhc2g7Cit7CisgICAgdV9oZWFkZXJfVAkqdWhwOworICAgIHVfZW50cnlfVAkqdWVwOworICAgIGNoYXJfdQkqZmlsZV9uYW1lOworICAgIGludAkJc3RyX2xlbiwgaSwgdWVwX2xlbiwgbWFyazsKKyAgICBpbnQJCWZkOworICAgIEZJTEUJKmZwID0gTlVMTDsKKyAgICBpbnQJCXBlcm07CisgICAgaW50CQl3cml0ZV9vayA9IEZBTFNFOworI2lmZGVmIFVOSVgKKyAgICBzdHJ1Y3Qgc3RhdAlzdF9vbGQ7CisgICAgc3RydWN0IHN0YXQJc3RfbmV3OworI2VuZGlmCisKKyAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgZmlsZV9uYW1lID0gdV9nZXRfdW5kb19maWxlX25hbWUoYnVmLT5iX2ZmbmFtZSwgRkFMU0UpOworCWlmIChmaWxlX25hbWUgPT0gTlVMTCkKKwkgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGZpbGVfbmFtZSA9IG5hbWU7CisKKyNpZmRlZiBVTklYCisgICAgaWYgKG1jaF9zdGF0KChjaGFyICopYnVmLT5iX2ZmbmFtZSwgJnN0X29sZCkgPj0gMCkKKwlwZXJtID0gc3Rfb2xkLnN0X21vZGU7CisgICAgZWxzZQorCXBlcm0gPSAwNjAwOworI2Vsc2UKKyAgICBwZXJtID0gbWNoX2dldHBlcm0oYnVmLT5iX2ZmbmFtZSk7CisgICAgaWYgKHBlcm0gPCAwKQorCXBlcm0gPSAwNjAwOworI2VuZGlmCisgICAgLyogc2V0IGZpbGUgcHJvdGVjdGlvbiBzYW1lIGFzIG9yaWdpbmFsIGZpbGUsIGJ1dCBzdHJpcCBzLWJpdCAqLworICAgIHBlcm0gPSBwZXJtICYgMDc3NzsKKworICAgIC8qIElmIHRoZSB1bmRvIGZpbGUgZXhpc3RzLCB2ZXJpZnkgdGhhdCBpdCBhY3R1YWxseSBpcyBhbiB1bmRvIGZpbGUsIGFuZAorICAgICAqIGRlbGV0ZSBpdC4gKi8KKyAgICBpZiAobWNoX2dldHBlcm0oZmlsZV9uYW1lKSA+PSAwKQorICAgIHsKKwlpZiAobmFtZSA9PSBOVUxMIHx8ICFmb3JjZWl0KQorCXsKKwkgICAgLyogQ2hlY2sgd2UgY2FuIHJlYWQgaXQgYW5kIGl0J3MgYW4gdW5kbyBmaWxlLiAqLworCSAgICBmZCA9IG1jaF9vcGVuKChjaGFyICopZmlsZV9uYW1lLCBPX1JET05MWXxPX0VYVFJBLCAwKTsKKwkgICAgaWYgKGZkIDwgMCkKKwkgICAgeworCQlpZiAobmFtZSAhPSBOVUxMIHx8IHBfdmVyYm9zZSA+IDApCisJCSAgICBzbXNnKChjaGFyX3UgKilfKCJXaWxsIG5vdCBvdmVyd3JpdGUgd2l0aCB1bmRvIGZpbGUsIGNhbm5vdCByZWFkOiAlcyIpLAorCQkJCQkJCQkgICBmaWxlX25hbWUpOworCQlnb3RvIHRoZWVuZDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJY2hhcl91IGJ1ZlsyXTsKKworCQl2aW1fcmVhZChmZCwgYnVmLCAyKTsKKwkJY2xvc2UoZmQpOworCQlpZiAoKGJ1ZlswXSA8PCA4KSArIGJ1ZlsxXSAhPSBVRl9TVEFSVF9NQUdJQykKKwkJeworCQkgICAgaWYgKG5hbWUgIT0gTlVMTCB8fCBwX3ZlcmJvc2UgPiAwKQorCQkJc21zZygoY2hhcl91ICopXygiV2lsbCBub3Qgb3ZlcndyaXRlLCB0aGlzIGlzIG5vdCBhbiB1bmRvIGZpbGU6ICVzIiksCisJCQkJCQkJCSAgIGZpbGVfbmFtZSk7CisJCSAgICBnb3RvIHRoZWVuZDsKKwkJfQorCSAgICB9CisJfQorCW1jaF9yZW1vdmUoZmlsZV9uYW1lKTsKKyAgICB9CisKKyAgICBmZCA9IG1jaF9vcGVuKChjaGFyICopZmlsZV9uYW1lLAorCQkJICAgIE9fQ1JFQVR8T19FWFRSQXxPX1dST05MWXxPX0VYQ0x8T19OT0ZPTExPVywgcGVybSk7CisgICAgKHZvaWQpbWNoX3NldHBlcm0oZmlsZV9uYW1lLCBwZXJtKTsKKyAgICBpZiAoZmQgPCAwKQorICAgIHsKKyAgICAgICAgRU1TRzIoXyhlX25vdF9vcGVuKSwgZmlsZV9uYW1lKTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisgICAgaWYgKHBfdmVyYm9zZSA+IDApCisJc21zZygoY2hhcl91ICopXygiV3JpdGluZyB1bmRvIGZpbGU6ICVzIiksIGZpbGVfbmFtZSk7CisKKyNpZmRlZiBVTklYCisgICAgLyoKKyAgICAgKiBUcnkgdG8gc2V0IHRoZSBncm91cCBvZiB0aGUgdW5kbyBmaWxlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGZpbGUuIElmCisgICAgICogdGhpcyBmYWlscywgc2V0IHRoZSBwcm90ZWN0aW9uIGJpdHMgZm9yIHRoZSBncm91cCBzYW1lIGFzIHRoZQorICAgICAqIHByb3RlY3Rpb24gYml0cyBmb3Igb3RoZXJzLgorICAgICAqLworICAgIGlmIChtY2hfc3RhdCgoY2hhciAqKWZpbGVfbmFtZSwgJnN0X25ldykgPj0gMAorCSAgICAmJiBzdF9uZXcuc3RfZ2lkICE9IHN0X29sZC5zdF9naWQKKyMgaWZkZWYgSEFWRV9GQ0hPV04gIC8qIHNlcXVlbnQtcHR4IGxhY2tzIGZjaG93bigpICovCisJICAgICYmIGZjaG93bihmZCwgKHVpZF90KS0xLCBzdF9vbGQuc3RfZ2lkKSAhPSAwCisjIGVuZGlmCisgICAgICAgKQorCW1jaF9zZXRwZXJtKGZpbGVfbmFtZSwgKHBlcm0gJiAwNzA3KSB8ICgocGVybSAmIDA3KSA8PCAzKSk7CisjIGlmZGVmIEhBVkVfU0VMSU5VWAorICAgIG1jaF9jb3B5X3NlYyhidWYtPmJfZmZuYW1lLCBmaWxlX25hbWUpOworIyBlbmRpZgorI2VuZGlmCisKKyAgICBmcCA9IGZkb3BlbihmZCwgInciKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEVNU0cyKF8oZV9ub3Rfb3BlbiksIGZpbGVfbmFtZSk7CisJY2xvc2UoZmQpOworCW1jaF9yZW1vdmUoZmlsZV9uYW1lKTsKKwlnb3RvIHRoZWVuZDsKKyAgICB9CisKKyAgICAvKiBTdGFydCB3cml0aW5nLCBmaXJzdCBvdmVyYWxsIGZpbGUgaW5mb3JtYXRpb24gKi8KKyAgICBwdXRfYnl0ZXMoZnAsIChsb25nX3UpVUZfU1RBUlRfTUFHSUMsIDIpOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSlVRl9WRVJTSU9OLCAyKTsKKworICAgIC8qIFdyaXRlIGEgaGFzaCBvZiB0aGUgYnVmZmVyIHRleHQsIHNvIHRoYXQgd2UgY2FuIHZlcmlmeSBpdCBpcyBzdGlsbCB0aGUKKyAgICAgKiBzYW1lIHdoZW4gcmVhZGluZyB0aGUgYnVmZmVyIHRleHQuICovCisgICAgaWYgKGZ3cml0ZShoYXNoLCAoc2l6ZV90KVVORE9fSEFTSF9TSVpFLCAoc2l6ZV90KTEsIGZwKSAhPSAxKQorCWdvdG8gd3JpdGVfZXJyb3I7CisgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KWJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LCA0KTsKKworICAgIC8qIEJlZ2luIHVuZG8gZGF0YSBmb3IgVSAqLworICAgIHN0cl9sZW4gPSBidWYtPmJfdV9saW5lX3B0ciAhPSBOVUxMID8gU1RSTEVOKGJ1Zi0+Yl91X2xpbmVfcHRyKSA6IDA7CisgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KXN0cl9sZW4sIDQpOworICAgIGlmIChzdHJfbGVuID4gMCAmJiBmd3JpdGUoYnVmLT5iX3VfbGluZV9wdHIsIChzaXplX3Qpc3RyX2xlbiwKKwkJCQkJCQkgIChzaXplX3QpMSwgZnApICE9IDEpCisJZ290byB3cml0ZV9lcnJvcjsKKworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSlidWYtPmJfdV9saW5lX2xudW0sIDQpOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSlidWYtPmJfdV9saW5lX2NvbG5yLCA0KTsKKworICAgIC8qIEJlZ2luIGdlbmVyYWwgdW5kbyBkYXRhICovCisgICAgdWhwID0gYnVmLT5iX3Vfb2xkaGVhZDsKKyAgICBwdXRfYnl0ZXMoZnAsIChsb25nX3UpKHVocCAhPSBOVUxMID8gdWhwLT51aF9zZXEgOiAwKSwgNCk7CisKKyAgICB1aHAgPSBidWYtPmJfdV9uZXdoZWFkOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSkodWhwICE9IE5VTEwgPyB1aHAtPnVoX3NlcSA6IDApLCA0KTsKKworICAgIHVocCA9IGJ1Zi0+Yl91X2N1cmhlYWQ7CisgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KSh1aHAgIT0gTlVMTCA/IHVocC0+dWhfc2VxIDogMCksIDQpOworCisgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KWJ1Zi0+Yl91X251bWhlYWQsIDQpOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSlidWYtPmJfdV9zZXFfbGFzdCwgNCk7CisgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KWJ1Zi0+Yl91X3NlcV9jdXIsIDQpOworICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSlidWYtPmJfdV9zZXFfdGltZSwgNCk7CisKKyAgICAvKiBJdGVyYXRpdmVseSBzZXJpYWxpemUgVUhQcyBhbmQgdGhlaXIgVUVQcyBmcm9tIHRoZSB0b3AgZG93bi4gICovCisgICAgbWFyayA9ICsrbGFzdG1hcms7CisgICAgdWhwID0gYnVmLT5iX3Vfb2xkaGVhZDsKKyAgICB3aGlsZSAodWhwICE9IE5VTEwpCisgICAgeworICAgICAgICAvKiBTZXJpYWxpemUgY3VycmVudCBVSFAgaWYgd2UgaGF2ZW4ndCBzZWVuIGl0ICovCisgICAgICAgIGlmICh1aHAtPnVoX3dhbGsgIT0gbWFyaykKKyAgICAgICAgeworCSAgICBpZiAocHV0X2J5dGVzKGZwLCAobG9uZ191KVVGX0hFQURFUl9NQUdJQywgMikgPT0gRkFJTCkKKwkJZ290byB3cml0ZV9lcnJvcjsKKworICAgICAgICAgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KSgodWhwLT51aF9uZXh0ICE9IE5VTEwpCisJCQkJCSAgICAgID8gdWhwLT51aF9uZXh0LT51aF9zZXEgOiAwKSwgNCk7CisgICAgICAgICAgICBwdXRfYnl0ZXMoZnAsIChsb25nX3UpKCh1aHAtPnVoX3ByZXYgIT0gTlVMTCkKKwkJCQkJICAgICAgPyB1aHAtPnVoX3ByZXYtPnVoX3NlcSA6IDApLCA0KTsKKyAgICAgICAgICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSkoKHVocC0+dWhfYWx0X25leHQgIT0gTlVMTCkKKwkJCQkJICA/IHVocC0+dWhfYWx0X25leHQtPnVoX3NlcSA6IDApLCA0KTsKKyAgICAgICAgICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSkoKHVocC0+dWhfYWx0X3ByZXYgIT0gTlVMTCkKKwkJCQkJICA/IHVocC0+dWhfYWx0X3ByZXYtPnVoX3NlcSA6IDApLCA0KTsKKyAgICAgICAgICAgIHB1dF9ieXRlcyhmcCwgdWhwLT51aF9zZXEsIDQpOworICAgICAgICAgICAgc2VyaWFsaXplX3Bvcyh1aHAtPnVoX2N1cnNvciwgZnApOworI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKKyAgICAgICAgICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSl1aHAtPnVoX2N1cnNvcl92Y29sLCA0KTsKKyNlbHNlCisgICAgICAgICAgICBwdXRfYnl0ZXMoZnAsIChsb25nX3UpMCwgNCk7CisjZW5kaWYKKyAgICAgICAgICAgIHB1dF9ieXRlcyhmcCwgKGxvbmdfdSl1aHAtPnVoX2ZsYWdzLCAyKTsKKyAgICAgICAgICAgIC8qIEFzc3VtZSBOTUFSS1Mgd2lsbCBzdGF5IHRoZSBzYW1lLiAqLworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5NQVJLUzsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6ZV9wb3ModWhwLT51aF9uYW1lZG1baV0sIGZwKTsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBGRUFUX1ZJU1VBTAorICAgICAgICAgICAgc2VyaWFsaXplX3Zpc3VhbGluZm8odWhwLT51aF92aXN1YWwsIGZwKTsKKyNlbmRpZgorICAgICAgICAgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KXVocC0+dWhfdGltZSwgNCk7CisKKyAgICAgICAgICAgIHVlcCA9IHVocC0+dWhfZW50cnk7CisgICAgICAgICAgICB3aGlsZSAodWVwICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZV91ZXAodWVwLCBmcCkgPT0gRkFJTCkKKwkJICAgIGdvdG8gd3JpdGVfZXJyb3I7CisgICAgICAgICAgICAgICAgdWVwID0gdWVwLT51ZV9uZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogU2VudGluZWwgdmFsdWU6IG5vIG1vcmUgdWVwcyAqLworICAgICAgICAgICAgdWVwX2xlbiA9IC0xOworICAgICAgICAgICAgcHV0X2J5dGVzKGZwLCAobG9uZ191KXVlcF9sZW4sIDQpOworICAgICAgICAgICAgdWhwLT51aF93YWxrID0gbWFyazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE5vdyB3YWxrIHRocm91Z2ggdGhlIHRyZWUgLSBhbGdvcml0aG0gZnJvbSB1bmRvX3RpbWUgKi8KKyAgICAgICAgaWYgKHVocC0+dWhfcHJldiAhPSBOVUxMICYmIHVocC0+dWhfcHJldi0+dWhfd2FsayAhPSBtYXJrKQorICAgICAgICAgICAgdWhwID0gdWhwLT51aF9wcmV2OworICAgICAgICBlbHNlIGlmICh1aHAtPnVoX2FsdF9uZXh0ICE9IE5VTEwgJiYgdWhwLT51aF9hbHRfbmV4dC0+dWhfd2FsayAhPSBtYXJrKQorICAgICAgICAgICAgdWhwID0gdWhwLT51aF9hbHRfbmV4dDsKKyAgICAgICAgZWxzZSBpZiAodWhwLT51aF9uZXh0ICE9IE5VTEwgJiYgdWhwLT51aF9hbHRfcHJldiA9PSBOVUxMCisJCQkJCSAgICAgJiYgdWhwLT51aF9uZXh0LT51aF93YWxrICE9IG1hcmspCisgICAgICAgICAgICB1aHAgPSB1aHAtPnVoX25leHQ7CisgICAgICAgIGVsc2UgaWYgKHVocC0+dWhfYWx0X3ByZXYgIT0gTlVMTCkKKyAgICAgICAgICAgIHVocCA9IHVocC0+dWhfYWx0X3ByZXY7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVocCA9IHVocC0+dWhfbmV4dDsKKyAgICB9CisKKyAgICBpZiAocHV0X2J5dGVzKGZwLCAobG9uZ191KVVGX0VORF9NQUdJQywgMikgPT0gT0spCisJd3JpdGVfb2sgPSBUUlVFOworCit3cml0ZV9lcnJvcjoKKyAgICBmY2xvc2UoZnApOworICAgIGlmICghd3JpdGVfb2spCisgICAgICAgIEVNU0cyKF8oIkU4Mjk6IHdyaXRlIGVycm9yIGluIHVuZG8gZmlsZTogJXMiKSwgZmlsZV9uYW1lKTsKKworI2lmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykgfHwgZGVmaW5lZChXSU4zMjY0KQorICAgICh2b2lkKW1jaF9jb3B5X2ZpbGVfYXR0cmlidXRlKGJ1Zi0+Yl9mZm5hbWUsIGZpbGVfbmFtZSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FDTAorICAgIHsKKwl2aW1fYWNsX1QJICAgIGFjbDsKKworCS8qIEZvciBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBBQ0w6IGdldCB0aGUgQUNMIGZyb20gdGhlIG9yaWdpbmFsIGZpbGUuICovCisJYWNsID0gbWNoX2dldF9hY2woYnVmLT5iX2ZmbmFtZSk7CisJbWNoX3NldF9hY2woZmlsZV9uYW1lLCBhY2wpOworICAgIH0KKyNlbmRpZgorCit0aGVlbmQ6CisgICAgaWYgKGZpbGVfbmFtZSAhPSBuYW1lKQorCXZpbV9mcmVlKGZpbGVfbmFtZSk7Cit9CisKKyNlbmRpZiAvKiBGRUFUX1BFUlNJU1RFTlRfVU5ETyAqLworCisKIC8qCiAgKiBJZiAnY3BvcHRpb25zJyBjb250YWlucyAndSc6IFVuZG8gdGhlIHByZXZpb3VzIHVuZG8gb3IgcmVkbyAodmkgY29tcGF0aWJsZSkuCiAgKiBJZiAnY3BvcHRpb25zJyBkb2VzIG5vdCBjb250YWluICd1JzogQWx3YXlzIHVuZG8uCkBAIC03NTcsOCArMTU1Niw2IEBACiAgICAgdV91bmRvX2VuZCh1bmRvX3VuZG9lcywgRkFMU0UpOwogfQogCi1zdGF0aWMgaW50IGxhc3RtYXJrID0gMDsKLQogLyoKICAqIFVuZG8gb3IgcmVkbyBvdmVyIHRoZSB0aW1lbGluZS4KICAqIFdoZW4gInN0ZXAiIGlzIG5lZ2F0aXZlIGdvIGJhY2sgaW4gdGltZSwgb3RoZXJ3aXNlIGdvZXMgZm9yd2FyZCBpbiB0aW1lLgpAQCAtOTI3LDcgKzE3MjQsNyBAQAogCiAJaWYgKGFic29sdXRlKQogCXsKLQkgICAgRU1TR04oXygiVW5kbyBudW1iZXIgJWxkIG5vdCBmb3VuZCIpLCBzdGVwKTsKKwkgICAgRU1TR04oXygiRTgzMDogVW5kbyBudW1iZXIgJWxkIG5vdCBmb3VuZCIpLCBzdGVwKTsKIAkgICAgcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL3ZlcnNpb24uYyBiL3NyYy92ZXJzaW9uLmMKaW5kZXggZmU4Mjk4Ny4uMDRhMzNiOCAxMDA2NDQKLS0tIGEvc3JjL3ZlcnNpb24uYworKysgYi9zcmMvdmVyc2lvbi5jCkBAIC00MjYsNiArNDI2LDExIEBACiAjZWxzZQogCSItcGVybCIsCiAjZW5kaWYKKyNpZmRlZiBGRUFUX1BFUlNJU1RFTlRfVU5ETworCSIrcGVyc2lzdGVudF91bmRvIiwKKyNlbHNlCisJIi1wZXJzaXN0ZW50X3VuZG8iLAorI2VuZGlmCiAjaWZkZWYgRkVBVF9QUklOVEVSCiAjIGlmZGVmIEZFQVRfUE9TVFNDUklQVAogCSIrcG9zdHNjcmlwdCIsCmRpZmYgLS1naXQgYS9zcmMvdmltLmggYi9zcmMvdmltLmgKaW5kZXggZDMyMGQzYS4uMDQ0NzI3MyAxMDA2NDQKLS0tIGEvc3JjL3ZpbS5oCisrKyBiL3NyYy92aW0uaApAQCAtMTM5OCw2ICsxMzk4LDkgQEAKICAqLwogI2RlZmluZSBNQVhNQVBMRU4gICA1MAogCisvKiBTaXplIGluIGJ5dGVzIG9mIHRoZSBoYXNoIHVzZWQgaW4gdGhlIHVuZG8gZmlsZS4gKi8KKyNkZWZpbmUgVU5ET19IQVNIX1NJWkUgMzIKKwogI2lmZGVmIEhBVkVfRkNOVExfSAogIyBpbmNsdWRlIDxmY250bC5oPgogI2VuZGlmCg==