ZGlmZiAtLWdpdCBhL01hYy9zY3JpcHRzL2JpbmhleHRyZWUucHkgYi9NYWMvc2NyaXB0cy9iaW5oZXh0cmVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmVmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvc2NyaXB0cy9iaW5oZXh0cmVlLnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMKKyMgaGV4YmludHJlZSAtIFJlY3Vyc2l2ZWx5IGRlc2NlbmQgYSBkaXJlY3RvcnkgYW5kCisjIHBhY2sgYWxsIHJlc291cmNlIGZpbGVzLgorIworIyBKYWNrIEphbnNlbiwgQ1dJLCBBdWd1c3QgMTk5NS4KKyMKKyMgVG8gZG86CisjIC0gQWxzbyBkbyBwcm9qZWN0IGZpbGVzICgutSBhbmQgLrkpLCBhZnRlciB1c2luZyBBcHBsZUV2ZW50cyB0byB0aGUKKyMgICB2YXJpb3VzIGJ1aWxkZXJzIHRvIGNsZWFuIHRoZSBwcm9qZWN0cworIyAtIERvbid0IGhleGJpbiAoYW5kIGNsZWFuKSBpZiB0aGVyZSBleGlzdHMgYSAuaHF4IGZpbGUgdGhhdCBpcyBuZXdlci4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgYmluaGV4CitpbXBvcnQgc3lzCisKK2V4dGVuc2lvbnMgPSBbJy5yc3JjJ10KKworZGVmIHdhbGtlcihhcmcsIHRvcCwgbmFtZXMpOgorCWZvciBuIGluIG5hbWVzOgorCQlmb3IgZXh0IGluIGV4dGVuc2lvbnM6CisJCQlpZiBuWy1sZW4oZXh0KTpdID09IGV4dDoKKwkJCQluYW1lID0gb3MucGF0aC5qb2luKHRvcCwgbikKKwkJCQlwcmludCAnQmluaGV4aW5nJywgbmFtZQorCQkJCWJpbmhleC5iaW5oZXgobmFtZSwgbmFtZSArICcuaHF4JykKKwkJCQkKK2RlZiBkb2RpcihuYW1lKToKKwlvcy5wYXRoLndhbGsobmFtZSwgd2Fsa2VyLCBOb25lKQorCQkJCQorZGVmIG1haW4oKToKKwlpZiBsZW4oc3lzLmFyZ3YpID4gMToKKwkJZm9yIGRpciBpbiBzeXMuYXJndlsxOl06CisJCQlkb2RpcihkaXIpCisJZWxpZiBvcy5uYW1lID09ICdtYWMnOgorCQlpbXBvcnQgbWFjZnMKKwkJZGlyLCBvayA9IG1hY2ZzLkdldERpcmVjdG9yeSgnRm9sZGVyIHRvIHNlYXJjaDonKQorCQlpZiBub3Qgb2s6CisJCQlzeXMuZXhpdCgwKQorCQlkb2RpcihkaXIuYXNfcGF0aG5hbWUoKSkKKwllbHNlOgorCQlwcmludCAnVXNhZ2U6IGhleGJpbnRyZWUgZGlyIC4uLicKKwkJc3lzLmV4aXQoMSkKKwlpZiBvcy5uYW1lID09ICdtYWMnOgorCQlzeXMuZXhpdCgxKSAgICMgS2VlcCB3aW5kb3cKKwllbHNlOgorCQlzeXMuZXhpdCgwKQorCQkKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJbWFpbigpCisJCg==