ZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9BbXVsZXR0X2ZlbWFsZSBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9BbXVsZXR0X2ZlbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDg1MDI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0FtdWxldHRfZmVtYWxlCkBAIC0wLDAgKzEsNSBAQAorNgorMzUKKzUKK1xfLworPyYKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9BbXVsZXR0X21hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvQW11bGV0dF9tYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNGUwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvQW11bGV0dF9tYWxlCkBAIC0wLDAgKzEsNSBAQAorNgorMzYKKzUKK1xfLworPyYKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9CZXNjaHJpZnR1bmcgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvQmVzY2hyaWZ0dW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZGRjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvQmVzY2hyaWZ0dW5nCkBAIC0wLDAgKzEsMjQgQEAKKzcKKzAKKzAKKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P19fX19fX19fX19fX19fX19fX19fPEhlbG0+Cis/PFdhZmZlPl9fX19fX19fX19fX19fCis/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/XD8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P19fX19fX19fX19fX188S29lY2hlcj4KKworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P19fX19fX19fX19fX188QW11bGV0dD4KKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/X19fX19fCis/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P1wKKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PzxQYW56ZXI+CisKKz88UmluZz5fX19fX19fX19fX19fLworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Lz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/X19fX19fX19fX188U2NoaWxkPgorPzxIYW5kc2NodWhlPl9fX19fX18vPz8/Pz8/Pz8/Py8KKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Py8KKz88R3VlcnRlbD5fX19fX19fX19fX19fX19fX19fLworCis/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9cX19fX19fX19fX19fPFVtaGFuZz4KKworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P19fX19fX19fXzxIb3NlPgorCisKKz8/Pz8/Pz8/PzxTY2h1aGU+X19fX19fX19fX19fXwpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0d1ZXJ0ZWxfZmVtYWxlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0d1ZXJ0ZWxfZmVtYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZWQ4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvR3VlcnRlbF9mZW1hbGUKQEAgLTAsMCArMSw0IEBACis1CiszMworMTAKK2A9PU89PScKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9HdWVydGVsX21hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvR3VlcnRlbF9tYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzE0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvR3VlcnRlbF9tYWxlCkBAIC0wLDAgKzEsNCBAQAorNQorMzMKKzEwCitgPT09Tz09PScKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9IYW5kc2NodWhfZmVtYWxlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0hhbmRzY2h1aF9mZW1hbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzZjE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9IYW5kc2NodWhfZmVtYWxlCkBAIC0wLDAgKzEsMTAgQEAKKzQKKzIxCis3Cis/XywtXworKF9fLEkKKworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P3w3Cis/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/L3wKKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P2ApLworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PycKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9IYW5kc2NodWhfbWFsZSBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9IYW5kc2NodWhfbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjgxZGQxCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0hhbmRzY2h1aF9tYWxlCkBAIC0wLDAgKzEsMTAgQEAKKzQKKzIyCis3CissLS1fXworKF9fLEkKKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Xz8KKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz98IHwKKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8vIHwKKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9gKSkKKz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8gJyAKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9IZWxtX2ZlbWFsZSBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9IZWxtX2ZlbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2JhNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0hlbG1fZmVtYWxlCkBAIC0wLDAgKzEsNiBAQAorMQorMzQKKzAKKywtby0uCis9PT09SQorPz8/XF9cCmRpZmYgLS1naXQgYS9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvSGVsbV9tYWxlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0hlbG1fbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE4OGEzCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0hlbG1fbWFsZQpAQCAtMCwwICsxLDYgQEAKKzEKKzM1CiswCissLW8tLgorPT09PUkKKz8/P1xfXApkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0hvc2VuX2ZlbWFsZSBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9Ib3Nlbl9mZW1hbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljZmRkNgotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9Ib3Nlbl9mZW1hbGUKQEAgLTAsMCArMSwxMyBAQAorNgorMzIKKzEwCisvYC0tLS0tJ1wKK3wvICAgICBcfAorfCAgIFkgICB8Cit8ICAgfCAgIHwKKz98ICB8ICB8Cis/KCAgfCAgKQorP3wgIHwgIHwKKz98ICB8ICB8Cis/fCAgfCAgfAorP0xfLyBcX0oKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9Ib3Nlbl9tYWxlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0hvc2VuX21hbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlNjM5MAotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9Ib3Nlbl9tYWxlCkBAIC0wLDAgKzEsMTMgQEAKKzYKKzMzCisxMAorL2AtLS0tLSdcCit8LyAgICAgXHwKK3wgICBZICAgfAorfCAgIHwgICB8Cit8ICAgfCAgIHwKKzwuICB8ICAuPgorfCAgIHwgICB8Cit8ICAgfCAgIHwKK3wgICB8ICAgfAorP0xfLyBcX0oKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9Lb2VjaGVyX2ZlbWFsZSBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9Lb2VjaGVyX2ZlbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBiMWNmCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L0tvZWNoZXJfZmVtYWxlCkBAIC0wLDAgKzEsNSBAQAorNworNDAKKzMKKyIiIgorLy8KZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9Lb2VjaGVyX21hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvS29lY2hlcl9tYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMGIxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvS29lY2hlcl9tYWxlCkBAIC0wLDAgKzEsNSBAQAorNworNDAKKzMKKyIiIgorLy8KZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9SaW5nX2ZlbWFsZSBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9SaW5nX2ZlbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY4YjAwCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L1JpbmdfZmVtYWxlCkBAIC0wLDAgKzEsNCBAQAorNgorMjEKKzgKK2MKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9SaW5nX21hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvUmluZ19tYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjIwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvUmluZ19tYWxlCkBAIC0wLDAgKzEsNCBAQAorNgorMjIKKzgKK2MKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9SdWVzdHVuZ19mZW1hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvUnVlc3R1bmdfZmVtYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NDlmMzUKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvUnVlc3R1bmdfZmVtYWxlCkBAIC0wLDAgKzEsOSBAQAorMQorMjYKKzQKKz8/Pz8/P19fXz8/P19fXworPz8/Pz8vKCAgXF8vICApXAorPz8/Py8gfFxfX19fXy98IFwKK19fXy8gLz9cXy9fXF8vP1wgXAorfF9fXCc/Pz8pXF8vKD8/P1wvfAorPz8/Pz8/Py9fX19fX1w/Pz98fApkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L1J1ZXN0dW5nX21hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvUnVlc3R1bmdfbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTliNjdjCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L1J1ZXN0dW5nX21hbGUKQEAgLTAsMCArMSw5IEBACisxCisyNQorNAorPz8/Pz9fXl9fX18/Pz9fX19fXl8/Cis/Pz8/KCAgXCAgIFxfLyAgIC8gICkKKz8/Pz8vXCB8XF9fXyBfX18vfCAvXAorP19fLyAgLz9cXyAgICAgXy8/XF8gPgorSV9fX1w+Pz8/KVxfX18vKD8/P3wgfAorPz8/Pz8/Pz8vX19fX19fX1w/P3xffApkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L1NjaGlsZF9mZW1hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvU2NoaWxkX2ZlbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQ5ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L1NjaGlsZF9mZW1hbGUKQEAgLTAsMCArMSwxMCBAQAorNworNDMKKzcKKz8/fFwKKz8/fHwKKz8/fHwKKz09fHwpCis/P3x8Cis/P3x8Cis/P3wvCmRpZmYgLS1naXQgYS9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvU2NoaWxkX21hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvU2NoaWxkX21hbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViMzI5ZgotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9TY2hpbGRfbWFsZQpAQCAtMCwwICsxLDEwIEBACis3Cis0NQorNworPz98XAorPz98fAorPz98fAorPT18fCkKKz8/fHwKKz8/fHwKKz8/fC8KZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9TY2h1aGVfZmVtYWxlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L1NjaHVoZV9mZW1hbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlOTU4ZAotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9TY2h1aGVfZmVtYWxlCkBAIC0wLDAgKzEsNyBAQAorNQorMzIKKzE4Cis/P18/Pz9fCis/fF98P3xffAorPy8gSj9MIFwKKyhfLz8/P1xfKQpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L1NjaHVoZV9tYWxlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L1NjaHVoZV9tYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzMwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvU2NodWhlX21hbGUKQEAgLTAsMCArMSw3IEBACis1CiszMgorMTgKKz8/P18/Pz9fCis/P3xffD98X3wKKz8vLyBKP0wgXFwKKyhfXy8/Pz9cX18pCmRpZmYgLS1naXQgYS9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvVW1oYW5nX2ZlbWFsZSBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9VbWhhbmdfZmVtYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODg1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvVW1oYW5nX2ZlbWFsZQpAQCAtMCwwICsxLDE3IEBACisyCiszMQorNAorPz9fPz8/Pz9fCis/P1Y/Pz8/P1YKKworCit8Pz8/Pz8/Pz8/fAorfD8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz98Cit8Pz8/Pz8/Pz8/fAorfD8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz98Cit8Pz8/Pz8/Pz8/fAorfD8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz98Cis/XD8/Pz8/Pz8vCmRpZmYgLS1naXQgYS9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvVW1oYW5nX21hbGUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvVW1oYW5nX21hbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyNWRiZQotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9VbWhhbmdfbWFsZQpAQCAtMCwwICsxLDE3IEBACis0CiszMQorNAorPz8/Xz8/Pz8/XworPz8/Vj8/Pz8/VgorCisKK3w/Pz8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz8/P3wKK3w/Pz8/Pz8/Pz8/P3wKKz9cXz8/Pz8/Pz9fLwpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L2F4ZSBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9heGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyN2Y0OAotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9heGUKQEAgLTAsMCArMSwxMyBAQAorNworMTkKKzEKKz9fXz8/Pz9fXworLy8gXCgpLyBcXAorfHwgIHx8ICB8fAorXFxfL3x8XF8vLworPz8/P3x8Cis/Pz8/fHwKKworCis/Pz8/fHwKKz8/Pz9cLwpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L2Jhc2VfZmVtYWxlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L2Jhc2VfZmVtYWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYWVjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvYmFzZV9mZW1hbGUKQEAgLTAsMCArMSwyNSBAQAorMworMAorMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfIC98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfHxfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvICBgICAgJyAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyB8XF8vIFxfL3wgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIC4tX19fLC8gLyBcICAgICAvIFwgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgYC0tLi5fXycgICApICAgKCAgIFwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgLiAgXCAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwgLyAgfCAgL3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIFkgICB8ICB8JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgfCAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAgfCAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKSAoIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCApICggfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gSiBMIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJycgICBgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvYmFzZV9tYWxlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L2Jhc2VfbWFsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODM2NjUzCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L2Jhc2VfbWFsZQpAQCAtMCwwICsxLDI1IEBACiszCiswCiswCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfIC98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX3wgfF9fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL14gICBgIHwgJyAgIF5cICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gLHxcX18vIFxfXy98LixcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAsLS1fX198ICcvIFwgIF9fXyAgLyBcX2BcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIHxfLi5fX18uJyAgICkvX3xfXCggICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xffF8vXCAgIFwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLlwgLy4gfCAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHwgIFkgIHxsICAvIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAgfCAgfHwgICBcfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgICd8YCAnfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAgfCAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBKLiAuTCBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnJyAgICAgYGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9jbHViIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L2NsdWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2NmVjZQotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9jbHViCkBAIC0wLDAgKzEsMTMgQEAKKzcKKzIxCiswCis/P19fCitfL19fXF8KK198X198XworX3xfX3xfCis/XD8/LworPz98fAorPz98fAorCisKKz8/KCkKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9mZXJud2FmZmUgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvZmVybndhZmZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODk3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvZmVybndhZmZlCkBAIC0wLDAgKzEsMTkgQEAKKzcKKzIzCiswCis/Pz8pCis/Py8uCis/Lz8uCit8Pz8uCit8Pz8uCit8Pz8uCitJPz8uCisKKworST8/LgorfD8/LgorfD8/LgorfD8/LgorP1w/LgorPz9cLgorPz8/KQpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L2tuaWZlIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L2tuaWZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTRlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngva25pZmUKQEAgLTAsMCArMSw5IEBACis3CisyMworNAorPywKKyh8CisofAorLS0KKworP1UKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9tYWdpYyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9tYWdpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM1OTRiCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L21hZ2ljCkBAIC0wLDAgKzEsMTAgQEAKKzcKKzIwCiswCissCis/Lj8nPz8uCis/Llx8Lz8sCistPy0rLT8tCissPy98XD8uCisuPywuPz8/LgorPz8/XC8KZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9taXNjIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L21pc2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiNTI4MQotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9taXNjCkBAIC0wLDAgKzEsMTEgQEAKKzcKKzIzCis0CisvXAorfHwKK3x8CisKKworfHwKK3x8CitgJwpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L3NwZWFyIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L3NwZWFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZTlkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvc3BlYXIKQEAgLTAsMCArMSwyNSBAQAorNworMjMKKzAKKy9cCishfAorXC8KK3x8Cit8fAorfHwKK3x8CisKKworfHwKK3x8Cit8fAorfHwKK3x8Cit8fAorfHwKK3x8Cit8fAorfHwKK3x8Cit8fAorYCcKZGlmZiAtLWdpdCBhL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9zdGFmZiBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9zdGFmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQ0NmQwCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L3N0YWZmCkBAIC0wLDAgKzEsMjIgQEAKKzcKKzIzCiswCissLgorfHwKK3x8Cit8fAorfHwKK3x8Cit8fAorCisKK3x8Cit8fAorfHwKK3x8Cit8fAorfHwKK3x8Cit8fAorfHwKK2AnCmRpZmYgLS1naXQgYS9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvc3dvcmQgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvc3dvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBmZjJkYwotLS0gL2Rldi9udWxsCisrKyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2dmeC9zd29yZApAQCAtMCwwICsxLDEzIEBACis3CisyMgorMAorPz8sCis/fHwKKz98fAorP3x8Cis/fHwKKz98fAorX3x8XworCisKKz9gJwpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L3doaXAgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9nZngvd2hpcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGRiODQzCi0tLSAvZGV2L251bGwKKysrIGIvc3RkL3BsYXllci9pbnZtYXN0ZXIvZ2Z4L3doaXAKQEAgLTAsMCArMSwyMSBAQAorNworMTYKKzIKKz8/ICxfIAorPyAvICBcIAorIC8gPz8gXAorIHwgPz8/IHwKKyB8ID8/PyBeCisgfAorPyBcCis/PyB8ID8/IworPz8gLyAKKz8gLyAKKz8gfCAKKz8gLyAKKyAvIAorIHwgCisgfCAKKyB8IAorIFwgCis/IGAgCmRpZmYgLS1naXQgYS9zdGQvcGxheWVyL2ludm1hc3Rlci9pbnZtYXN0ZXIuYyBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2ludm1hc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Y2NkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9pbnZtYXN0ZXIuYwpAQCAtMCwwICsxLDQ2NCBAQAorLy8gaW52bWFzdGVyLmMgYnkgTmFjaHR3aW5kQE1HIFYxLjEgKDUuMy4yMDAxKQorLy8gQSBzbWFsbCBtYXN0ZXIgdGhhdCBwcm92aWRlcyBhIGdyYXBoaWNhbCBkaXNwbGF5IG9mIHRoZSBwbGF5ZXK0cworLy8gZXF1aXBtZW50LiAKKyNwcmFnbWEgc3Ryb25nX3R5cGVzCisjcHJhZ21hIHNhdmVfdHlwZXMscnR0X2NoZWNrcworI3ByYWdtYSByYW5nZV9jaGVjaworI3ByYWdtYSBub19jbG9uZQorI3ByYWdtYSBwZWRhbnRpYworCisjaW5jbHVkZSA8aW5wdXRfdG8uaD4KKyNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8YW5zaS5oPgorI2luY2x1ZGUgPGNvbWJhdC5oPgorI2luY2x1ZGUgPGxhbmd1YWdlLmg+CisjaW5jbHVkZSAiaW52bWFzdGVyLmgiCisKKworbWFwcGluZyBkYXRhOworY2xvc3VyZSBhYmJyZXZpYXRlOworCisKKy8vIGknbSBhd2FyZSB0aGlzIGNhbiBiZSBkZXRlcm1pbmVkIHdpdGggbV9pbmRpY2VzKFZBTElEX0FSTU9VUl9UWVBFKSwKKy8vIGJ1dCB0aGUgcG9zaXRpb24gaW4gdGhlIGFycmF5cyBpcyBpbXBvcnRhbnQgZm9yIHRoZSBkcmF3aW5nIG9yZGVyLgorLy8gZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXMgZHJhd24gbGFzdAorc3RhdGljIHN0cmluZyAqYXJtb3VyX3R5cGVzID0gCisoe0FUX0JFTFQsCisgIEFUX1NISUVMRCwKKyAgQVRfSEVMTUVULAorICBBVF9CT09ULAorICBBVF9UUk9VU0VSUywKKyAgQVRfQU1VTEVULAorICBBVF9SSU5HLAorICBBVF9HTE9WRSwKKyAgQVRfUVVJVkVSLAorICBBVF9DTE9BSywKKyAgQVRfQVJNT1VSfSk7CisKK3N0YXRpYyBtYXBwaW5nIGNvbG9ycyA9IAorKFswOkFOU0lfQkxBQ0ssCisgIDE6QU5TSV9SRUQsIAorICAyOkFOU0lfR1JFRU4sCisgIDM6QU5TSV9ZRUxMT1csCisgIDQ6QU5TSV9CTFVFLAorICA1OkFOU0lfUFVSUExFLAorICA2OkFOU0lfQ1lBTiwKKyAgNzpBTlNJX1dISVRFLAorICA4OiIiXSk7CisgIAorc3RhdGljIG1hcHBpbmcgYmdjb2xvcnMgPSAKKyhbMDpBTlNJX0JHX0JMQUNLLAorICAxOkFOU0lfQkdfUkVELCAKKyAgMjpBTlNJX0JHX0dSRUVOLAorICAzOkFOU0lfQkdfWUVMTE9XLAorICA0OkFOU0lfQkdfQkxVRSwKKyAgNTpBTlNJX0JHX1BVUlBMRSwKKyAgNjpBTlNJX0JHX0NZQU4sCisgIDc6QU5TSV9CR19XSElURSwKKyAgODoiIl0pOworICAKKworCitzdGF0aWMgc3RyaW5nIE1hcHBpbmcyQ29sb3JlZFRleHQobWFwcGluZyBwaWMsIG9iamVjdCBwbGF5ZXIpOworc3RhdGljIHN0cmluZyBNYXBwaW5nMlBsYWluVGV4dChtYXBwaW5nIHBpYyk7CitzdGF0aWMgdm9pZCBBZGREZXNjcmlwdGlvbihtYXBwaW5nIHBpYywgc3RyaW5nIHR5cGUsIG9iamVjdCBpdGVtKTsKK3N0YXRpYyBzdHJpbmcgQ29tcG9zZURlc2Mob2JqZWN0IGl0ZW0pOworc3RhdGljIHZvaWQgQ29uZmlndXJlQ29sb3JzKHN0cmluZyB0ZXh0KTsKKwordm9pZCBTaG93SW52KG9iamVjdCBwbGF5ZXIsIHN0cmluZyBhcmcpOworCisvLyBvaywgbGV0tHMganVzdCByZWFkIGluIHRoZSBncmFwaGljcy4uLgorLy8gcmVhbGx5IHRha2VzIHNvbWUgdGltZSAofjI1MCBldmFsIHRpY2tzKSBidXQgaXMgb25seSBkb25lCisvLyBvbmNlIGluIGFuIHVwdGltZQordm9pZCBjcmVhdGUoKQoreworICBtYXBwaW5nIHBpYzsKKyAgc3RyaW5nICpmaWxlcywgKmxpbmVzLCB0ZXh0OworICBpbnQgaSxqLGssIGluZGVudHgsaW5kZW50eSwgY29sb3I7CisKKyAgZGF0YT0oW10pOworICAKKyAgREIoIlRyeWluZyB0byBmaXJlIHVwIG1hc3RlciwgcGF0aCBpcyAnIitJTlZQQVRIKyInLi4uIik7CisgIGZpbGVzPWdldF9kaXIoSU5WUEFUSCsiZ2Z4LyoiKS0oeyIuIiwgIi4uIn0pOworICBEQihzcHJpbnRmKCJGaWxlcyBmb3VuZCBpbiAnZ2Z4Lyc6IFxuJU8iLCBmaWxlcykpOworICBmb3IgKGk9c2l6ZW9mKGZpbGVzKS0xO2k+PTA7aS0tKQorICB7CisgICAgREIoIlJlYWRpbmcgJyIrZmlsZXNbaV0rIicgLi4uIik7CisgICAgdGV4dD1yZWFkX2ZpbGUoSU5WUEFUSCsiZ2Z4LyIrZmlsZXNbaV0pOworICAgIGlmICghc3RyaW5ncCh0ZXh0KSkKKyAgICB7CisgICAgICBEQigiRmFpbGVkIHRvIHJlYWQgZmlsZS4iKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBsaW5lcz1leHBsb2RlKHRleHQsICJcbiIpOworICAgIGlmIChzaXplb2YobGluZXMpIDwgNCkKKyAgICB7CisgICAgICBEQigiRmlsZSBjb3JydXB0LiIpOworICAgICAgY29udGludWU7CisgICAgfQorICAgIGluZGVudHg9dG9faW50KGxpbmVzWzFdKTsKKyAgICBpbmRlbnR5PXRvX2ludChsaW5lc1syXSk7CisgICAgY29sb3I9dG9faW50KGxpbmVzWzBdKTsKKyAgICBwaWM9KFtdKTsKKyAgICBmb3IgKGo9c2l6ZW9mKGxpbmVzKS0xO2o+MjtqLS0pCisgICAgeworICAgICAgZm9yIChrPXNpemVvZihsaW5lc1tqXSktMTtrPj0wO2stLSkKKyAgICAgIHsKKyAgICAgICAgaWYgKGxpbmVzW2pdW2suLmtdIT0iPyIpCisgICAgICAgICAgcGljKz0oWyhqLTMraW5kZW50eSkqODAraytpbmRlbnR4OmxpbmVzW2pdW2suLmtdO2NvbG9yXSk7CisgICAgICB9CisgICAgfQorICAgIGRhdGErPShbZmlsZXNbaV06cGljXSk7CisgICAgREIoIkZpbGUgc3VjY2Vzc2Z1bGx5IHJlYWQuIik7CisgIH0KKyAgREIoc3ByaW50ZigiVHlwZXMgY292ZXJlZDpcbiVPXG4iLCBtX2luZGljZXMoZGF0YSkpKTsKKworICAvLyBjcmVhdGUgY2xvc3VyZSBvbmx5IG9uY2UgdG8gc2F2ZSB0aW1lCisgIC8vIG5lZWRlZCBieSBDb21wb3NlRGVzYygpCisgIC8vIHRoZSBjbG9zdXJlIGlzdCBub3QgYXMgY29tcGxpY2F0ZWQgYXMgaXQgc2VlbXMgOykKKyAgLy8gaXQganVzdCBjaGVja3MgZXZlcnkgd29yZCBvZiB0aGUgbmFtZSwgaWYgaXQgZG9lcyBub3QgYmVnaW4KKyAgLy8gd2l0aCBhIGNhcGl0YWwgbGV0dGVyLCBpdCBpcyBhYmJyZXZpYXRlZAorICAvLyB0aGlzIGhhcHBlbnMgb25seSBpZiB0aGUgbmFtZSBsZW5ndGggZXhjZWVkcyAyMCBjaGFycy4uLgorICBhYmJyZXZpYXRlPWxhbWJkYSgoeyd4fSksIAorICAgICAgKHsjJz8sICh7Iyc+LCAoeyMnbWVtYmVyLCBxdW90ZSgoeyJkZXIiLCAiZGVzIn0pKSwgJ3h9KSwgMH0pLAorICAgICAgICAiZC4iLAorICAgICAgICAoeyMnPywgKHsjJz4sICh7IydzaXplb2YsICd4fSksIDN9KSwgCisgICAgICAgICAgKHsjJz8sICh7IycsLCAoeyMnPSwgJ2EsICh7IydhbGxvY2F0ZSwgMX0pIH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgKHsjJz0sICh7IydbLCAnYSwgMH0pLCAneCB9KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAoeyMnc2l6ZW9mLCAoeyMncmVnZXhwLCAnYSwgIl5bYS16XS4qIn0pIH0pIAorICAgICAgICAgICAgICAgICB9KSwgCisgICAgICAgICAgICAoeyMnKywgKHsjJ1suLl0sICd4LCAwLCAxfSksICIuIn0pLAorICAgICAgICAgICAgJ3gKKyAgICAgICAgICB9KSwgCisgICAgICAgICAgJ3gKKyAgICAgICAgfSkKKyAgICAgIH0pKTsKK30KKworLy8gZnVuY3Rpb24gdGhhdCB0cmllcyB0byBndWVzcyBhIGdvb2QgaXRlbSBuYW1lIGFuZCB1c2UgYWJicmV2YXRpb25zCisvLyB3aGVyZSBwb3NzaWJsZQorc3RhdGljIHN0cmluZyBDb21wb3NlRGVzYyhvYmplY3QgaXRlbSkKK3sKKyAgaW50IGk7CisgIHN0cmluZyB0ZXh0LCAqYnVmZjsKKyAgCisgIHRleHQ9cmVncmVwbGFjZShpdGVtLT5RdWVyeVByb3AoUF9TSE9SVCkKKyAgICAgICAgICAgICAgICB8fGl0ZW0tPlF1ZXJ5UHJvcChQX05BTUUpCisgICAgICAgICAgICAgICAgfHwiPD8+IiwKKyAgICAgICAgICAgICAgICAiXihFaW4gUGFhcnxFaW58RWluZXxEZXJ8RGllfERhcykgIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAKKy8vIHRyeSB0byBzaG9ydGVuIHRoZSBuYW1lIHdpdGggdGhlIGNsb3N1cmUKKyAgaWYgKHNpemVvZih0ZXh0KSA+IDIwKQorICAgIHJldHVybiBpbXBsb2RlKG1hcChleHBsb2RlKHRleHQsICIgIiksIGFiYnJldmlhdGUpLCAiICIpOworICBlbHNlICAgICAgCisgICAgcmV0dXJuIHRleHQ7Cit9CisKKy8vIGNvbnZlcnRzIGEgbWFwcGluZyB3aXRoIGNoYXJhY3RlcnMgYW5kIGNvbG9yIGluZm8gaW50byBhCisvLyB0ZXh0LiBkYXRhIGluIHRoZSBtYXBwaW5nIGlzIHN0b3JlZCBpbiBhIG9uZS1kaW1lbnNpb25hbCAKKy8vIG9yZGVyIHdpdGggdGhlIHBvc2l0aW9uIGFzIGtleSAoeXBvcyBpcyBwb3MvODAsIHhwb3MgcG9zJTgwKQorLy8gdGhpcyBzZXR1cCBoYXMgYSBodWdlIGFkdmFudGFnZTogY29tYmluaW5nIHNldmVyYWwKKy8vIGdyYXBoaWNzIGp1c3QgdGFrZXMgYSAiKyIgb3BlcmF0b3IsIHRoZSByZXN0IGlzIGhhbmRsZWQKKy8vIGJ5IHRoZSBnYW1lIGRyaXZlci4gZnJlYWtpbicgZmFzdCwgbXVjaCBiZXR0ZXIgdGhhbiBkb2luZyBhbgorLy8gaXRlcmF0aW9uIG92ZXIgb25lIG9yIG1vcmUgYXJyYXkgaW4gbHBjLgorc3RhdGljIHN0cmluZyBNYXBwaW5nMkNvbG9yZWRUZXh0KG1hcHBpbmcgcGljLCBvYmplY3QgcGxheWVyKQoreworICBzdHJpbmcgdGV4dDsKKyAgbWFwcGluZyBjb25maWdtYXA7CisgIGludCBpLGosY29sb3I7CisgIAorICBjb25maWdtYXA9ZGVmYXVsdF9jb25maWcrKHBsYXllci0+UXVlcnlQcm9wKFBfSU5WTUFTVEVSX0NPTkZJRyl8fChbXSkpOworCisgIHRleHQ9IiI7CisgIGNvbG9yPTA7CisgIGZvciAoaT0wO2k8MjI7aSsrKQorICB7CisgICAgdGV4dCs9Ymdjb2xvcnNbY29uZmlnbWFwWzhdXTsKKyAgICBmb3IgKGo9MDtqPDc4O2orKykKKyAgICB7IAorICAgICAgaWYgKHBpY1tpKjgwK2osMV0hPWNvbG9yKQorICAgICAgeworICAgICAgICBjb2xvcj1waWNbaSo4MCtqLDFdOworICAgICAgICB0ZXh0Kz1jb2xvcnNbY29uZmlnbWFwW2NvbG9yXV07CisgICAgICB9CisgICAgICB0ZXh0Kz1waWNbaSo4MCtqXTsKKyAgICB9CisgICAgdGV4dCs9QU5TSV9OT1JNQUwrIlxuIjsKKyAgICBjb2xvcj0wOworICB9CisgIHJldHVybiB0ZXh0OworfQorCitzdGF0aWMgc3RyaW5nIE1hcHBpbmcyUGxhaW5UZXh0KG1hcHBpbmcgcGljKQoreworICBzdHJpbmcgdGV4dDsKKyAgaW50IGksajsKKyAgCisgIHRleHQ9IiI7CisKKyAgZm9yIChpPTA7aTwyMjtpKyspCisgIHsKKyAgICBmb3IgKGo9MDtqPDc4O2orKykKKyAgICAgIHRleHQrPXBpY1tpKjgwK2pdOworICAgIHRleHQrPSJcbiI7CisgIH0KKyAgcmV0dXJuIHRleHQ7Cit9CitzdGF0aWMgdm9pZCBBZGREZXNjcmlwdGlvbihtYXBwaW5nIHBpYywgc3RyaW5nIHR5cGUsIG9iamVjdCBpdGVtKQoreworICBpbnQgaW5kZW50eCwgaW5kZW50eSwgaTsKKyAgc3RyaW5nIHRleHQ7CisKKyAgc3dpdGNoKHR5cGUpCisgIHsKKyAgIGNhc2UgQVRfSEVMTUVUOgorICAgICAgaW5kZW50eD00NzsKKyAgICAgIGluZGVudHk9MDsKKyAgICAgIHRleHQ9c3ByaW50ZigiJS0zMHMiLENvbXBvc2VEZXNjKGl0ZW0pWzAuLjMwXSk7YnJlYWs7CisgICAgY2FzZSBBVF9RVUlWRVI6CisgICAgICBpbmRlbnR4PTQ5OworICAgICAgaW5kZW50eT0yOworICAgICAgdGV4dD1zcHJpbnRmKCIlLTI4cyIsQ29tcG9zZURlc2MoaXRlbSlbMC4uMjhdKTticmVhazsgICAgIAorICAgIGNhc2UgQVRfQU1VTEVUOgorICAgICAgaW5kZW50eD00OTsKKyAgICAgIGluZGVudHk9NDsgICAgIAorICAgICAgdGV4dD1zcHJpbnRmKCIlLTI3cyIsQ29tcG9zZURlc2MoaXRlbSlbMC4uMjhdKTticmVhazsgICAgIAorICAgIGNhc2UgQVRfQVJNT1VSOgorICAgICAgaW5kZW50eD01MzsKKyAgICAgIGluZGVudHk9NzsKKyAgICAgIHRleHQ9c3ByaW50ZigiJS0yNHMiLENvbXBvc2VEZXNjKGl0ZW0pWzAuLjI1XSk7YnJlYWs7ICAgICAgICAgIAorICAgIGNhc2UgQVRfU0hJRUxEOgorICAgICAgaW5kZW50eD01NDsKKyAgICAgIGluZGVudHk9MTA7ICAgCisgICAgICB0ZXh0PXNwcmludGYoIiUtMjBzIixDb21wb3NlRGVzYyhpdGVtKVswLi4yNF0pO2JyZWFrOworICAgIGNhc2UgQVRfQ0xPQUs6CisgICAgICBpbmRlbnR4PTUzOworICAgICAgaW5kZW50eT0xNTsKKyAgICAgIHRleHQ9c3ByaW50ZigiJS0yMHMiLENvbXBvc2VEZXNjKGl0ZW0pWzAuLjI1XSk7YnJlYWs7CisgICAgY2FzZSBBVF9UUk9VU0VSUzoKKyAgICAgIGluZGVudHg9NDk7CisgICAgICBpbmRlbnR5PTE3OworICAgICAgdGV4dD1zcHJpbnRmKCIlLTIwcyIsQ29tcG9zZURlc2MoaXRlbSlbMC4uMjBdKTticmVhazsgICAgIAorICAgIGNhc2UgQVRfUklORzoKKyAgICAgIGluZGVudHg9MDsKKyAgICAgIGluZGVudHk9OTsKKyAgICAgIHRleHQ9c3ByaW50ZigiJTE0cyIsQ29tcG9zZURlc2MoaXRlbSlbMC4uMTddKTticmVhazsKKyAgICBjYXNlIEFUX0dMT1ZFOgorICAgICAgaW5kZW50eD0wOworICAgICAgaW5kZW50eT0xMTsKKyAgICAgIHRleHQ9c3ByaW50ZigiJTE0cyIsQ29tcG9zZURlc2MoaXRlbSlbMC4uMTddKTticmVhazsKKyAgICBjYXNlIEFUX0JFTFQ6CisgICAgICBpbmRlbnR4PTE7CisgICAgICBpbmRlbnR5PTEzOworICAgICAgdGV4dD1zcHJpbnRmKCIlMTRzIixDb21wb3NlRGVzYyhpdGVtKVswLi4xOF0pO2JyZWFrOyAgICAgCisgICAgY2FzZSBBVF9CT09UOgorICAgICAgaW5kZW50eD0xOworICAgICAgaW5kZW50eT0yMDsKKyAgICAgIHRleHQ9c3ByaW50ZigiJTE4cyIsQ29tcG9zZURlc2MoaXRlbSlbMC4uMThdKTticmVhazsKKyAgICBjYXNlICJXYWZmZSI6CisgICAgICBpbmRlbnR4PTE7CisgICAgICBpbmRlbnR5PTE7CisgICAgICB0ZXh0PXNwcmludGYoIiUxOHMiLENvbXBvc2VEZXNjKGl0ZW0pWzAuLjI1XSk7CisgICAgICBpZiAoaXRlbS0+UXVlcnlQcm9wKFBfTlJfSEFORFMpID4gMSAmJgorICAgICAgICAgIHRoaXNfcGxheWVyKCkgJiYKKyAgICAgICAgICAhKHRoaXNfcGxheWVyKCktPlF1ZXJ5QXJtb3JCeVR5cGUoQVRfU0hJRUxEKSkpCisgICAgICAgIEFkZERlc2NyaXB0aW9uKHBpYywgQVRfU0hJRUxELCBpdGVtKTticmVhazsKKyAgICBkZWZhdWx0OiByZXR1cm47CisgIH0KKyAgZm9yIChpPTA7aTxzaXplb2YodGV4dCk7aSsrKQorICAgIHBpYys9KFsoODAqaW5kZW50eStpbmRlbnR4K2kpOnRleHRbaS4uaV07Ml0pOworfQorCit2YXJhcmdzIHN0YXRpYyB2b2lkIENvbmZpZ3VyZUNvbG9ycyhzdHJpbmcgdGV4dCkKK3sgCisgIG1hcHBpbmcgY29uZmlnLCBkaXNwbGF5OworICBzdHJpbmcgKnN0cnM7CisgIAorICBpZiAoIW9iamVjdHAodGhpc19wbGF5ZXIoKSkpIHJldHVybjsKKyAgCisgIGlmICh0aGlzX3BsYXllcigpLT5JbkZpZ2h0KCkpCisgIHsKKyAgICB3cml0ZShicmVha19zdHJpbmcoCisgICAgICAiSW0gS2FtcGY/IE5hIER1IGhhc3QgTmVydmVuLCBkYXMgbGFzc2VuIHdpciBkb2NoIG1hbCBsaWViZXIhICIKKyAgICAgICJQcm9iaWVyIGVzIGRhbmFjaCBub2NobWFsLi4uIiwgNzgpKTsKKyAgICByZXR1cm47CisgIH0KKyAgCisgIGlmIChzdHJpbmdwKHRleHQpKSB0ZXh0PWxvd2VyX2Nhc2UodGV4dCk7CisgIAorICBpZiAodGV4dD09Im9rIikKKyAgeworICAgIHdyaXRlKCJGYXJia29uZmlndXJhdGlvbiBiZWVuZGV0LlxuIik7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8iYW5zaV9jb25maWciLCBkZWYgaW4gaW52bWFzdGVyLmgKKyAgY29uZmlnPXRoaXNfcGxheWVyKCktPlF1ZXJ5UHJvcChQX0lOVk1BU1RFUl9DT05GSUcpfHwoW10pOworICBkaXNwbGF5PWRlZmF1bHRfY29uZmlnK2NvbmZpZzsKKyAgCisgIGlmICghdGV4dCB8fCB0ZXh0PT0iIikKKyAgeworICAgIHdyaXRlKCAKKyAgICAiKioqIEZhcmJrb25maWd1cmF0aW9uIGZ1ZXIgZGVuIEF1c3J1ZXN0dW5nc2JlZmVobCAqKipcblxuIgorICAgICIgRmFyYmU6ICAgICAgICAgICAgICAgICAgICAgd2lyZCBkYXJnZXN0ZWxsdCBtaXQ6XG4iCisgICAgIi0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICIgSGludGVyZ3J1bmQgICAgICAgICAgICAgICAgICIrQ09MT1JOQU1FU1tkaXNwbGF5WzhdXSsiXG4iCisgICAgIiBTY2h3YXJ6ICAgICAgICAgICAgICAgICAgICAgIitDT0xPUk5BTUVTW2Rpc3BsYXlbMF1dKyJcbiIKKyAgICAiIFJvdCAgICAgICAgICAgICAgICAgICAgICAgICAiK0NPTE9STkFNRVNbZGlzcGxheVsxXV0rIlxuIgorICAgICIgR3J1ZW4gICAgICAgICAgICAgICAgICAgICAgICIrQ09MT1JOQU1FU1tkaXNwbGF5WzJdXSsiXG4iCisgICAgIiBHZWxiICAgICAgICAgICAgICAgICAgICAgICAgIitDT0xPUk5BTUVTW2Rpc3BsYXlbM11dKyJcbiIKKyAgICAiIEJsYXUgICAgICAgICAgICAgICAgICAgICAgICAiK0NPTE9STkFNRVNbZGlzcGxheVs0XV0rIlxuIgorICAgICIgTWFnZW50YSAgICAgICAgICAgICAgICAgICAgICIrQ09MT1JOQU1FU1tkaXNwbGF5WzVdXSsiXG4iCisgICAgIiBUdWVya2lzICAgICAgICAgICAgICAgICAgICAgIitDT0xPUk5BTUVTW2Rpc3BsYXlbNl1dKyJcbiIKKyAgICAiIFdlaXNzICAgICAgICAgICAgICAgICAgICAgICAiK0NPTE9STkFNRVNbZGlzcGxheVs3XV0rIlxuXG4iCisgICAgIkZhcmJlIGFlbmRlcm4gbWl0ICc8ZmFyYmU+IDxnZXd1ZW5zY2h0ZSBmYXJiZT4nLlxuIgorICAgICJCZWlzcGllbDogJ2dlbGIgcm90Jy5cbiIKKyAgICAiQWxsZXMsIHdhcyBzdGFuZGFyZG1hZXNzaWcgZ2VsYiB3YWVyZSwgd3VlcmRlIGRhbm4gbWl0IGRlciBBTlNJLUZhcmJlIFxuIgorICAgICJSb3QgZGFyZ2VzdGVsbHQuXG4iCisgICAgIkRlciBIaW50ZXJncnVuZCBrYW5uIHp1c2FldHpsaWNoIGRpZSBGYXJiZSAna2VpbmUnIGhhYmVuLCBiZWkgZGVyIGRlciBcbiIKKyAgICAiSGludGVyZ3J1bmQgZWJlbiB1ZWJlcmhhdXB0IG5pY2h0IGdlZmFlcmJ0IHdpcmQuXG4iCisgICAgIkJlaXNwaWVsOiAnaGludGVyZ3J1bmQga2VpbmUnLiBTY2hhbHRldCBkaWUgSGludGVyZ3J1bmRmYXJiZSBhdXMuXG5cbiIKKyAgICAiQmVlbmRlbiBtaXQgJ29rJy4gXG4iCisgICAgIldpZWRlcmhvbHVuZyBkZXIgRmFyYmxpc3RlIG1pdCA8UmV0dXJuPi5cbiIKKyAgICAiRmFyYmxpc3RlIGF1ZiBTdGFuZGFyZCB6dXJ1ZWNrc2V0emVuIG1pdCAncmVzZXQnLlxuIik7CisgIH0KKyAgZWxzZQorICBpZiAodGV4dD09InJlc2V0IikKKyAgeworICAgIHRoaXNfcGxheWVyKCktPlNldChQX0lOVk1BU1RFUl9DT05GSUcsIFNBVkUsIEZfTU9ERV9BRCk7ICAgIAorICAgIHRoaXNfcGxheWVyKCktPlNldFByb3AoUF9JTlZNQVNURVJfQ09ORklHLCAwKTsKKyAgICB3cml0ZSgiRmFyYmVuIHp1cnVlY2tnZXNldHp0IVxuIik7ICAgIAorICB9CisgIGVsc2UKKyAgeworICAgIGlmICggc2l6ZW9mKHN0cnM9ZXhwbG9kZSh0ZXh0LCAiICIpLSh7IiJ9KSkgIT0yIAorICAgICAgfHwgIW1lbWJlcigoQ09MT1JDT0RFUy0oWyJrZWluZSJdKSksIHN0cnNbMF0pCisgICAgICB8fCAhbWVtYmVyKChDT0xPUkNPREVTLShbImhpbnRlcmdydW5kIl0pKSwgc3Ryc1sxXSkKKyAgICAgIHx8ICgoc3Ryc1swXSE9ImhpbnRlcmdydW5kIikgJiYgKHN0cnNbMV09PSJrZWluZSIpKSApIAorICAgIHsKKyAgICAgIHdyaXRlKCJGYWxzY2hlIEVpbmdhYmUuXG4iCisgICAgICAgICAgICAiRm9ybWF0OiA8ZmFyYmV8aGludGVyZ3J1bmQ+IDx6dWdld2llc2VuZSBGYXJiZT5cbiIKKyAgICAgICAgICAgICJBYmJyZWNoZW4gbWl0ICdvaycuXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmIChDT0xPUkNPREVTW3N0cnNbMV1dPT1kZWZhdWx0X2NvbmZpZ1tDT0xPUkNPREVTW3N0cnNbMF1dXSkKKyAgICAgICAgY29uZmlnLT0oW0NPTE9SQ09ERVNbc3Ryc1swXV1dKTsKKyAgICAgIGVsc2UKKyAgICAgICAgY29uZmlnKz0oW0NPTE9SQ09ERVNbc3Ryc1swXV06Q09MT1JDT0RFU1tzdHJzWzFdXV0pOworICAgICAgaWYgKCFzaXplb2YoY29uZmlnKSkKKyAgICAgIHsKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+U2V0KFBfSU5WTUFTVEVSX0NPTkZJRywgU0FWRSwgRl9NT0RFX0FEKTsgICAgCisgICAgICAgIHRoaXNfcGxheWVyKCktPlNldFByb3AoUF9JTlZNQVNURVJfQ09ORklHLCAwKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+U2V0UHJvcChQX0lOVk1BU1RFUl9DT05GSUcsIGRlZXBfY29weShjb25maWcpKTsKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+U2V0KFBfSU5WTUFTVEVSX0NPTkZJRywgU0FWRSwgRl9NT0RFX0FTKTsgICAgICAgIAorICAgICAgfQorICAgICAgd3JpdGUoIk9rLCBGYXJiZSBnZXdhZWhsdCFcbiIpOworICAgIH0KKyAgfQorICBpbnB1dF90bygiQ29uZmlndXJlQ29sb3JzIiwgSU5QVVRfUFJPTVBULCAiXG5FaW5nYWJlOiAiKTsKK30KKworCitzdHJpbmcqIGFybW91cl9vcmRlcj0oeyAKKyAgICBBVF9IRUxNRVQsIEFUX0FNVUxFVCwgQVRfUVVJVkVSLCBBVF9BUk1PVVIsIEFUX0NMT0FLLAorICBBVF9HTE9WRSwgQVRfUklORywgQVRfQkVMVCwKKyAgQVRfVFJPVVNFUlMsIEFUX0JPT1QsIEFUX1NISUVMRCwgQVRfTUlTQ30pOyAKKworbWFwcGluZyB3ZWFwb25fbmFtZXM9KFsKKwkJICAgICAgIFdUX1NQRUFSIDogIlNwZWVyIiwKKwkJICAgICAgIFdUX1NXT1JEIDogIlNjaHdlcnQiLAorCQkgICAgICAgV1RfU1RBRkYgOiAiS2FtcGZzdGFiIiwKKwkJICAgICAgIFdUX1dISVAgIDogIlBlaXRzY2hlIiwKKwkJICAgICAgIFdUX0NMVUIgIDogIktldWxlIiwKKwkJICAgICAgIFdUX0tOSUZFIDogIk1lc3NlciIsCisJCSAgICAgICBXVF9NSVNDICA6ICJJcmdlbmR3YXMiLAorCQkgICAgICAgV1RfTUFHSUMgOiAiQXJ0ZWZha3QiLAorCQkgICAgICAgV1RfQVhFICAgOiAiQXh0IiwKKwkgICAgICAgV1RfUkFOR0VEX1dFQVBPTiA6ICJGZXJud2FmZmUiCisJCSAgICAgICBdKTsKKworc3RyaW5nIFNpbXBsZUludihvYmplY3QgcGxheWVyKSB7CisgIG9iamVjdCogYXJtb3Vycz1wbGF5ZXItPlF1ZXJ5UHJvcChQX0FSTU9VUlMpOworICBpbnQgY291bnQ9c2l6ZW9mKGFybW91cl9vcmRlcik7CisgIHN0cmluZyogbGlzdD1hbGxvY2F0ZShjb3VudCk7CisgIHN0cmluZyByZXN1bHQ9IkF1c3J1ZXN0dW5nXG4iOworICBpbnQgaTsKKworICBmb3JlYWNoKG9iamVjdCBvYjogYXJtb3VycykgeworICAgIGlmICghb2JqZWN0cChvYikpIGNvbnRpbnVlOworICAgICAgaW50IGlkeCA9IG1lbWJlcihhcm1vdXJfb3JkZXIsIG9iLT5RdWVyeVByb3AoUF9BUk1PVVJfVFlQRSkpOwkgICAgICAKKyAgICAgIGlmIChpZHg+PTApCisgICAgICAgIGxpc3RbaWR4XT1vYi0+UXVlcnlQcm9wKFBfU0hPUlQpOworICB9CisKKyAgLy8gQVRfTUlTQyAobGV0enRlcyBFbGVtZW50IGluIGxpc3QgdW5kIGFybW91cl9vcmRlcikgd2VnbGFzc2VuLgorICBmb3IgKGk9MDtpPGNvdW50LTE7aSsrKSB7CisgICAgcmVzdWx0Kz1zcHJpbnRmKCIlLTIwcyAlLTU3c1xuIixhcm1vdXJfb3JkZXJbaV0sbGlzdFtpXSB8fCAiIik7CisgIH0KKworICBvYmplY3Qgb2I9b2I9cGxheWVyLT5RdWVyeVByb3AoUF9XRUFQT04pOworICBpZiAob2JqZWN0cChvYikpIHsKKyAgICByZXN1bHQrPXNwcmludGYoIiUtMjBzICUtNTdzXG4iLAorCQkgICAgKG9iLT5RdWVyeVByb3AoUF9OUl9IQU5EUyk9PTEgPyAiRWluaGFuZC0iOiJad2VpaGFuZC0iKQorCQkgICAgK3dlYXBvbl9uYW1lc1tvYi0+UXVlcnlQcm9wKFBfV0VBUE9OX1RZUEUpXSwKKwkJICAgIG9iLT5RdWVyeVByb3AoUF9TSE9SVCkpOworICB9IGVsc2UgcmVzdWx0Kz0iS2VpbmUgV2FmZmVcbiI7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKy8vIHRoZSBtYWluIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgcGxheWVyIG9iamVjdC4KKy8vIGRldGVybWluZXMgZ2VuZGVyLCB0aGVuIGFkZHMgYXJtb3Ivd2VhcG9uIGdyYXBoaWNzCisvLyBkeW5hbWljYWxseS4gc3RpbGwgdmVyeSBmYXN0IGR1ZSB0byB0aGUgdXNlIG9mIHRoZSAiKyIgb3BlcmF0b3IsCisvLyBzZWUgYWJvdmUuCit2b2lkIFNob3dJbnYob2JqZWN0IHBsYXllciwgc3RyaW5nIGFyZykKK3sKKyAgc3RyaW5nIGdlbmRlciwgdHlwZTsKKyAgbWFwcGluZyBwaWM7CisgIGludCBpOworICBvYmplY3QgaXRlbTsKKworICBpZiAoIW9iamVjdHAocGxheWVyKXx8IWludGVyYWN0aXZlKHBsYXllcikpIHJldHVybjsKKworICAvLyBzcGxpdCBhcmdzLgorICBzdHJpbmcgKmFyZ3M7CisgIGlmIChzdHJpbmdwKGFyZykpCisgICAgYXJncyA9IGV4cGxvZGUobG93ZXJfY2FzZShhcmcpLCAiICIpIC0gKHsiICJ9KTsKKyAgZWxzZQorICAgIGFyZ3MgPSAoe30pOworCisgIGlmIChtZW1iZXIoYXJncywgImZhcmJlbiIpID4gLTEpIHsKKyAgICAgIENvbmZpZ3VyZUNvbG9ycygpOworICAgICAgcmV0dXJuOworICB9CisKKyAgaWYgKG1lbWJlcihhcmdzLCAiLWsiKSA+IC0xIHx8IHBsYXllci0+UXVlcnlQcm9wKFBfTk9fQVNDSUlfQVJUKSkgeworICAgIHRlbGxfb2JqZWN0KHBsYXllciwgU2ltcGxlSW52KHBsYXllcikpOworICAgIHJldHVybjsKKyAgfQorCisgIGdlbmRlcj1wbGF5ZXItPlF1ZXJ5UHJvcChQX0dFTkRFUik9PUZFTUFMRT8iX2ZlbWFsZSI6Il9tYWxlIjsKKyAgcGljPWRlZXBfY29weShkYXRhWyJiYXNlIitnZW5kZXJdKTsKKyAgcGljKz1kYXRhWyJCZXNjaHJpZnR1bmciXTsKKyAgZm9yIChpPXNpemVvZihhcm1vdXJfdHlwZXMpLTE7aT49MDtpLS0pCisgICAgaWYgKG9iamVjdHAoaXRlbT1wbGF5ZXItPlF1ZXJ5QXJtb3VyQnlUeXBlKGFybW91cl90eXBlc1tpXSkpKQorICAgIHsKKyAgICAgIHBpYys9ZGF0YVthcm1vdXJfdHlwZXNbaV0rZ2VuZGVyXTsKKyAgICAgIEFkZERlc2NyaXB0aW9uKHBpYywgYXJtb3VyX3R5cGVzW2ldLCBpdGVtKTsKKyAgICB9CisgIGlmIChpdGVtPXBsYXllci0+UXVlcnlQcm9wKFBfV0VBUE9OKSkKKyAgeworICAgIHBpYys9ZGF0YVsoVkFMSURfV0VBUE9OX1RZUEUodHlwZT1pdGVtLT5RdWVyeVByb3AoUF9XRUFQT05fVFlQRSkpKT8KKyAgICAgIHR5cGU6V1RfTUlTQ107CisgICAgQWRkRGVzY3JpcHRpb24ocGljLCAiV2FmZmUiLCBpdGVtKTsKKyAgfSAgICAgIAorICBpZiAocGxheWVyLT5RdWVyeVByb3AoUF9UVFkpIT0iYW5zaSIpCisgICAgcGxheWVyLT5Nb3JlKE1hcHBpbmcyUGxhaW5UZXh0KHBpYykpOworICBlbHNlCisgICAgcGxheWVyLT5Nb3JlKE1hcHBpbmcyQ29sb3JlZFRleHQocGljLCBwbGF5ZXIpKTsKKyAgREIoZ2V0ZXVpZChwbGF5ZXIpKyIgZXZhbCBjb3N0OiAiKygxMDAwMDAwLWdldF9ldmFsX2Nvc3QoKSkrIiB0aWNrcy5cbiIpOworfQorCmRpZmYgLS1naXQgYS9zdGQvcGxheWVyL2ludm1hc3Rlci9pbnZtYXN0ZXIuaCBiL3N0ZC9wbGF5ZXIvaW52bWFzdGVyL2ludm1hc3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjFiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGQvcGxheWVyL2ludm1hc3Rlci9pbnZtYXN0ZXIuaApAQCAtMCwwICsxLDIxIEBACisjZGVmaW5lIElOVlBBVEggIi9zdGQvcGxheWVyL2ludm1hc3Rlci8iCisjZGVmaW5lIERCKHgpCisvKgorI2RlZmluZSBEQih4KSBpZiAoZmluZF9wbGF5ZXIoInJpa3VzIikpIFwKKyAgICAgICAgICAgICAgICAgICB0ZWxsX29iamVjdChmaW5kX3BsYXllcigicmlrdXMiKSwgXAorICAgICAgICAgICAgICAgICAgICAgYnJlYWtfc3RyaW5nKHgsIDc4LCAiSU5WTUFTVEVSOiAiLCAxKSk7CisqLworI2RlZmluZSBQX0lOVk1BU1RFUl9DT05GSUcgImludm1hc3Rlcl9jb25maWciCisjZGVmaW5lIENPTE9STkFNRVMgKHsiU2Nod2FyeiIsIlJvdCIsIkdydWVuIiwiR2VsYiIsXAorICAgICAgICAgICAgICAgICAgICAgIkJsYXUiLCJNYWdlbnRhIiwiVHVlcmtpcyIsIldlaXNzIiwiS2VpbmUifSkKKyNkZWZpbmUgQ09MT1JDT0RFUyAoWyJzY2h3YXJ6IjowLFwKKyAgICAgICAgICAgICAgICAgICAgICJyb3QiOjEsXAorICAgICAgICAgICAgICAgICAgICAgImdydWVuIjoyLFwKKyAgICAgICAgICAgICAgICAgICAgICJnZWxiIjozLFwKKyAgICAgICAgICAgICAgICAgICAgICJibGF1Ijo0LFwKKyAgICAgICAgICAgICAgICAgICAgICJtYWdlbnRhIjo1LFwKKyAgICAgICAgICAgICAgICAgICAgICJ0dWVya2lzIjo2LFwKKyAgICAgICAgICAgICAgICAgICAgICJ3ZWlzcyI6NyxcCisgICAgICAgICAgICAgICAgICAgICAia2VpbmUiOjgsXAorICAgICAgICAgICAgICAgICAgICAgImhpbnRlcmdydW5kIjo4XSkKKyNkZWZpbmUgZGVmYXVsdF9jb25maWcgKFswOjAsIDE6MSwgMjoyLCAzOjMsIDQ6NCwgNTo1LCA2OjYsIDc6NywgODowXSkK