ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkKaW5kZXggYTNhOWFkZS4uZTRmYWE5ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkKQEAgLTEsMzAgKzEsMzcgQEAKLSMhIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0NCi0NCi1pbXBvcnQgdW5pdHRlc3QNCi1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydA0KLQ0KLWNsYXNzIFBFUDI2M1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOg0KLQ0KLSAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6DQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKA0KLSAgICAgICAgICAgIHUi8MnUz84iLmVuY29kZSgidXRmLTgiKSwNCi0gICAgICAgICAgICAnXHhkMFx4OWZceGQwXHhiOFx4ZDFceDgyXHhkMFx4YmVceGQwXHhiZCcNCi0gICAgICAgICkNCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoDQotICAgICAgICAgICAgdSJc8CIuZW5jb2RlKCJ1dGYtOCIpLA0KLSAgICAgICAgICAgICdcXFx4ZDBceDlmJw0KLSAgICAgICAgKQ0KLQ0KLSAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOg0KLSAgICAgICAgIyBzZWUgIzE4ODINCi0gICAgICAgIGMgPSBjb21waWxlKCJcbiMgY29kaW5nOiB1dGYtOFxudSA9IHUnXHhjM1x4YjMnXG4iLCAiZHVtbXkiLCAiZXhlYyIpDQotICAgICAgICBkID0ge30NCi0gICAgICAgIGV4ZWMgYyBpbiBkDQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgdSdceGYzJykNCi0NCi0NCi1kZWYgdGVzdF9tYWluKCk6DQotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUEVQMjYzVGVzdCkNCi0NCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoNCi0gICAgdGVzdF9tYWluKCkNCisjIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBQRVAyNjNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BlcDI2MyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHUi8MnUz84iLmVuY29kZSgidXRmLTgiKSwKKyAgICAgICAgICAgICdceGQwXHg5Zlx4ZDBceGI4XHhkMVx4ODJceGQwXHhiZVx4ZDBceGJkJworICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1IlzwIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICAnXFxceGQwXHg5ZicKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY29tcGlsZXN0cmluZyhzZWxmKToKKyAgICAgICAgIyBzZWUgIzE4ODIKKyAgICAgICAgYyA9IGNvbXBpbGUoIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gdSdceGMzXHhiMydcbiIsICJkdW1teSIsICJleGVjIikKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMgYyBpbiBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndSddLCB1J1x4ZjMnKQorCisKKyAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUEVQMjYzVGVzdCkKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi9hc3QuYyBiL1B5dGhvbi9hc3QuYwppbmRleCBhM2ZkZDg5Li5iODllMjljIDEwMDY0NAotLS0gYS9QeXRob24vYXN0LmMKKysrIGIvUHl0aG9uL2FzdC5jCkBAIC0zMjQ4LDEwICszMjQ4LDExIEBACiAgICAgICAgICAgICAgICAgdSA9IE5VTEw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cgKi8KLSAgICAgICAgICAgICAgICBpZiAobGVuID4gUFlfU0laRV9NQVggLyA0KQorICAgICAgICAgICAgICAgIGlmIChsZW4gPiBQWV9TSVpFX01BWCAvIDYpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAvKiAiXFhYIiBtYXkgYmVjb21lICJcdTAwNWNcdUhITEwiICgxMiBieXRlcykgKi8KLSAgICAgICAgICAgICAgICB1ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBsZW4gKiA0KTsKKwkJLyogIjxDMz48QTQ+IiAoMiBieXRlcykgbWF5IGJlY29tZSAiXFUwMDAwMDBFNCIgKDEwIGJ5dGVzKSwgb3IgMTo1CisJCSAgICJcw6QiICgzIGJ5dGVzKSBtYXkgYmVjb21lICJcdTAwNWNcVTAwMDAwMEU0IiAoMTYgYnl0ZXMpLCBvciB+MTo2ICovCisgICAgICAgICAgICAgICAgdSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgbGVuICogNik7CiAgICAgICAgICAgICAgICAgaWYgKHUgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIHAgPSBidWYgPSBQeVN0cmluZ19Bc1N0cmluZyh1KTsKQEAgLTMyNjgsMTkgKzMyNjksMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgcm4sIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBkZWNvZGVfdXRmOChjLCAmcywgZW5kLCAidXRmLTE2LWJlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBkZWNvZGVfdXRmOChjLCAmcywgZW5kLCAidXRmLTMyLWJlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFB5U3RyaW5nX0FzU3RyaW5nKHcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybiA9IFB5U3RyaW5nX1NpemUodyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChybiAlIDIgPT0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBybjsgaSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihwLCAiXFx1JTAyeCUwMngiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocm4gJSA0ID09IDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm47IGkgKz0gNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYocCwgIlxcVSUwMnglMDJ4JTAyeCUwMngiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpICsgMF0gJiAweEZGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpICsgMV0gJiAweEZGKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IDY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2kgKyAxXSAmIDB4RkYsCisJCQkJCQlyW2kgKyAyXSAmIDB4RkYsCisJCQkJCQlyW2kgKyAzXSAmIDB4RkYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gMTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK