ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLmJtcCBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzVmOTUxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24uYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLmdpZiBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmZkOWZlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLmpwZyBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIyMmMwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnBibSBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnBibQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODQ4YmE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24ucGJtCkBAIC0wLDAgKzEsMyBAQAorUDQKKzE2IDE2Civ7f/G/+t/Vf62xW/GlYV/BWAGwAbAB8AfwH/Af8D///wpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnBnbSBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnBnbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ5ZjJhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24ucGdtCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnBuZyBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTk4N2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnBwbSBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnBwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDljZGIzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24ucHBtCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnJhcyBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnJhcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBlOTZmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24ucmFzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnNnaSBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnNnaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmU5MDgxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24uc2dpCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnRpZmYgYi9MaWIvdGVzdC9pbWdoZHJkYXRhL3B5dGhvbi50aWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZDBiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9pbWdoZHJkYXRhL3B5dGhvbi50aWZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnhibSBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLnhibQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmJlZTJlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24ueGJtCkBAIC0wLDAgKzEsNiBAQAorI2RlZmluZSBweXRob25fd2lkdGggMTYKKyNkZWZpbmUgcHl0aG9uX2hlaWdodCAxNgorc3RhdGljIGNoYXIgcHl0aG9uX2JpdHNbXSA9IHsKKyAgMHhERiwgMHhGRSwgMHg4RiwgMHhGRCwgMHg1RiwgMHhGQiwgMHhBQiwgMHhGRSwgMHhCNSwgMHg4RCwgMHhEQSwgMHg4RiwgCisgIDB4QTUsIDB4ODYsIDB4RkEsIDB4ODMsIDB4MUEsIDB4ODAsIDB4MEQsIDB4ODAsIDB4MEQsIDB4ODAsIDB4MEYsIDB4RTAsIAorICAweDBGLCAweEY4LCAweDBGLCAweEY4LCAweDBGLCAweEZDLCAweEZGLCAweEZGLCB9OwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbWdoZHIucHkgYi9MaWIvdGVzdC90ZXN0X2ltZ2hkci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQ0MzQzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbWdoZHIucHkKQEAgLTAsMCArMSwxMzEgQEAKK2ltcG9ydCBpbWdoZHIKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBURVNURk4sIHVubGluaworCitURVNUX0ZJTEVTID0gKAorICAgICgncHl0aG9uLnBuZycsICdwbmcnKSwKKyAgICAoJ3B5dGhvbi5naWYnLCAnZ2lmJyksCisgICAgKCdweXRob24uYm1wJywgJ2JtcCcpLAorICAgICgncHl0aG9uLnBwbScsICdwcG0nKSwKKyAgICAoJ3B5dGhvbi5wZ20nLCAncGdtJyksCisgICAgKCdweXRob24ucGJtJywgJ3BibScpLAorICAgICgncHl0aG9uLmpwZycsICdqcGVnJyksCisgICAgKCdweXRob24ucmFzJywgJ3Jhc3QnKSwKKyAgICAoJ3B5dGhvbi5zZ2knLCAncmdiJyksCisgICAgKCdweXRob24udGlmZicsICd0aWZmJyksCisgICAgKCdweXRob24ueGJtJywgJ3hibScpCispCisKK2NsYXNzIFVuc2Vla2FibGVJTyhpby5GaWxlSU8pOgorICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCisgICAgZGVmIHNlZWsoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKworY2xhc3MgVGVzdEltZ2hkcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnRlc3RmaWxlID0gZmluZGZpbGUoJ3B5dGhvbi5wbmcnLCBzdWJkaXI9J2ltZ2hkcmRhdGEnKQorICAgICAgICB3aXRoIG9wZW4oY2xzLnRlc3RmaWxlLCAncmInKSBhcyBzdHJlYW06CisgICAgICAgICAgICBjbHMudGVzdGRhdGEgPSBzdHJlYW0ucmVhZCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdF9kYXRhKHNlbGYpOgorICAgICAgICBmb3IgZmlsZW5hbWUsIGV4cGVjdGVkIGluIFRFU1RfRklMRVM6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbmRmaWxlKGZpbGVuYW1lLCBzdWJkaXI9J2ltZ2hkcmRhdGEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWdoZHIud2hhdChmaWxlbmFtZSksIGV4cGVjdGVkKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBzdHJlYW06CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWdoZHIud2hhdChzdHJlYW0pLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgc3RyZWFtOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzdHJlYW0ucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltZ2hkci53aGF0KE5vbmUsIGRhdGEpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1naGRyLndoYXQoTm9uZSwgYnl0ZWFycmF5KGRhdGEpKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl90ZXN0KHNlbGYpOgorICAgICAgICBkZWYgdGVzdF9qdW1ibyhoLCBmaWxlKToKKyAgICAgICAgICAgIGlmIGguc3RhcnRzd2l0aChiJ2VnZ3MnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2hhbScKKyAgICAgICAgaW1naGRyLnRlc3RzLmFwcGVuZCh0ZXN0X2p1bWJvKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoaW1naGRyLnRlc3RzLnBvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWdoZHIud2hhdChOb25lLCBiJ2VnZ3MnKSwgJ2hhbScpCisKKyAgICBkZWYgdGVzdF9maWxlX3BvcyhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgc3RyZWFtOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKGInYWJhYmFnYWxhbWFnYScpCisgICAgICAgICAgICBwb3MgPSBzdHJlYW0udGVsbCgpCisgICAgICAgICAgICBzdHJlYW0ud3JpdGUoc2VsZi50ZXN0ZGF0YSkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgc3RyZWFtOgorICAgICAgICAgICAgc3RyZWFtLnNlZWsocG9zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWdoZHIud2hhdChzdHJlYW0pLCAncG5nJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyZWFtLnRlbGwoKSwgcG9zKQorCisgICAgZGVmIHRlc3RfYmFkX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGltZ2hkci53aGF0KCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBpbWdoZHIud2hhdChOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpbWdoZHIud2hhdChzZWxmLnRlc3RmaWxlLCAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGltZ2hkci53aGF0KG9zLmZzZW5jb2RlKHNlbGYudGVzdGZpbGUpKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIGltZ2hkci53aGF0KGYuZmlsZW5vKCkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2hlYWRlcnMoc2VsZik6CisgICAgICAgIGZvciBoZWFkZXIgaW4gKGInXDIxMVBOXHJcbicsCisgICAgICAgICAgICAgICAgICAgICAgIGInXDAwMVwzMzEnLAorICAgICAgICAgICAgICAgICAgICAgICBiJ1x4NTlceEE2JywKKyAgICAgICAgICAgICAgICAgICAgICAgYidjdXRlY2F0JywKKyAgICAgICAgICAgICAgICAgICAgICAgYicwMDAwMDBKRkknLAorICAgICAgICAgICAgICAgICAgICAgICBiJ0dJRjgwJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbWdoZHIud2hhdChOb25lLCBoZWFkZXIpKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2RhdGEoc2VsZik6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgQnl0ZXNXYXJuaW5nKQorICAgICAgICAgICAgZm9yIGZpbGVuYW1lLCBfIGluIFRFU1RfRklMRVM6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaW5kZmlsZShmaWxlbmFtZSwgc3ViZGlyPSdpbWdoZHJkYXRhJykKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIHN0cmVhbToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHN0cmVhbS5yZWFkKCkuZGVjb2RlKCdsYXRpbjEnKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgaW1naGRyLndoYXQoaW8uU3RyaW5nSU8oZGF0YSkpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBpbWdoZHIud2hhdChOb25lLCBkYXRhKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19maWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgIGltZ2hkci53aGF0KCdtaXNzaW5nJykKKworICAgIGRlZiB0ZXN0X2Nsb3NlZF9maWxlKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBvcGVuKHNlbGYudGVzdGZpbGUsICdyYicpCisgICAgICAgIHN0cmVhbS5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBpbWdoZHIud2hhdChzdHJlYW0pCisgICAgICAgIHN0cmVhbSA9IGlvLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSkKKyAgICAgICAgc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGltZ2hkci53aGF0KHN0cmVhbSkKKworICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGUoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHN0cmVhbToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShzZWxmLnRlc3RkYXRhKQorICAgICAgICB3aXRoIFVuc2Vla2FibGVJTyhURVNURk4sICdyYicpIGFzIHN0cmVhbToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24pOgorICAgICAgICAgICAgICAgIGltZ2hkci53aGF0KHN0cmVhbSkKKworICAgIGRlZiB0ZXN0X291dHB1dF9zdHJlYW0oc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHN0cmVhbToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShzZWxmLnRlc3RkYXRhKQorICAgICAgICAgICAgc3RyZWFtLnNlZWsoMCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgaW1naGRyLndoYXQoc3RyZWFtKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkgYi9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQppbmRleCBjNmNjYTI2Li44ODA4YzQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQpAQCAtNDIsNyArNDIsNiBAQAogICAgICAgICAgICAgaW1wb3J0IGVuY29kaW5ncwogICAgICAgICAgICAgaW1wb3J0IGZvcm1hdHRlcgogICAgICAgICAgICAgaW1wb3J0IGh0bWwuZW50aXRpZXMKLSAgICAgICAgICAgIGltcG9ydCBpbWdoZHIKICAgICAgICAgICAgIGltcG9ydCBrZXl3b3JkCiAgICAgICAgICAgICBpbXBvcnQgbWFpbGNhcAogICAgICAgICAgICAgaW1wb3J0IG50dXJsMnBhdGgK